亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? setting.pm

?? bugzilla
?? PM
字號:
# -*- Mode: perl; indent-tabs-mode: nil -*-## The contents of this file are subject to the Mozilla Public# License Version 1.1 (the "License"); you may not use this file# except in compliance with the License. You may obtain a copy of# the License at http://www.mozilla.org/MPL/## Software distributed under the License is distributed on an "AS# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or# implied. See the License for the specific language governing# rights and limitations under the License.## The Original Code is the Bugzilla Bug Tracking System.## Contributor(s): Shane H. W. Travis <travis@sedsystems.ca>#                 Max Kanat-Alexander <mkanat@bugzilla.org>#                 Marc Schumann <wurblzap@gmail.com>#                 Fr茅d茅ric Buclin <LpSolit@gmail.com>package Bugzilla::User::Setting;use strict;use base qw(Exporter);# Module stuff@Bugzilla::User::Setting::EXPORT = qw(get_all_settings get_defaults     add_setting);use Bugzilla::Error;use Bugzilla::Util qw(trick_taint get_text);##################################  Module Initialization  ##################################sub new {    my $invocant = shift;    my $setting_name = shift;    my $user_id = shift;    my $class = ref($invocant) || $invocant;    my $subclass = '';    # Create a ref to an empty hash and bless it    my $self = {};    my $dbh = Bugzilla->dbh;    # Confirm that the $setting_name is properly formed;    # if not, throw a code error.     #     # NOTE: due to the way that setting names are used in templates,    # they must conform to to the limitations set for HTML NAMEs and IDs.    #    if ( !($setting_name =~ /^[a-zA-Z][-.:\w]*$/) ) {      ThrowCodeError("setting_name_invalid", { name => $setting_name });    }    # If there were only two parameters passed in, then we need    # to retrieve the information for this setting ourselves.    if (scalar @_ == 0) {        my ($default, $is_enabled, $value);        ($default, $is_enabled, $value, $subclass) =           $dbh->selectrow_array(             q{SELECT default_value, is_enabled, setting_value, subclass                 FROM setting            LEFT JOIN profile_setting                   ON setting.name = profile_setting.setting_name                WHERE name = ?                  AND profile_setting.user_id = ?},             undef,              $setting_name, $user_id);        # if not defined, then grab the default value        if (! defined $value) {            ($default, $is_enabled, $subclass) =              $dbh->selectrow_array(                 q{SELECT default_value, is_enabled, subclass                   FROM setting                   WHERE name = ?},              undef,              $setting_name);        }        $self->{'is_enabled'} = $is_enabled;        $self->{'default_value'} = $default;        # IF the setting is enabled, AND the user has chosen a setting        # THEN return that value        # ELSE return the site default, and note that it is the default.        if ( ($is_enabled) && (defined $value) ) {            $self->{'value'} = $value;        } else {            $self->{'value'} = $default;            $self->{'isdefault'} = 1;        }    }    else {        ($subclass) = $dbh->selectrow_array(            q{SELECT subclass FROM setting WHERE name = ?},            undef,            $setting_name);        # If the values were passed in, simply assign them and return.        $self->{'is_enabled'}    = shift;        $self->{'default_value'} = shift;        $self->{'value'}         = shift;        $self->{'is_default'}    = shift;    }    if ($subclass) {        eval('require ' . $class . '::' . $subclass);        $@ && ThrowCodeError('setting_subclass_invalid',                             {'subclass' => $subclass});        $class = $class . '::' . $subclass;    }    bless($self, $class);    $self->{'_setting_name'} = $setting_name;    $self->{'_user_id'}      = $user_id;    return $self;}##################################  Subroutine Definitions ##################################sub add_setting {    my ($name, $values, $default_value, $subclass, $force_check) = @_;    my $dbh = Bugzilla->dbh;    my $exists = _setting_exists($name);    return if ($exists && !$force_check);    ($name && $default_value)      ||  ThrowCodeError("setting_info_invalid");    if ($exists) {        # If this setting exists, we delete it and regenerate it.        $dbh->do('DELETE FROM setting_value WHERE name = ?', undef, $name);        $dbh->do('DELETE FROM setting WHERE name = ?', undef, $name);        # Remove obsolete user preferences for this setting.        my $list = join(', ', map {$dbh->quote($_)} @$values);        $dbh->do("DELETE FROM profile_setting                  WHERE setting_name = ? AND setting_value NOT IN ($list)",                  undef, $name);    }    else {        print get_text('install_setting_new', { name => $name }) . "\n";    }    $dbh->do(q{INSERT INTO setting (name, default_value, is_enabled, subclass)                    VALUES (?, ?, 1, ?)},             undef, ($name, $default_value, $subclass));    my $sth = $dbh->prepare(q{INSERT INTO setting_value (name, value, sortindex)                                    VALUES (?, ?, ?)});    my $sortindex = 5;    foreach my $key (@$values){        $sth->execute($name, $key, $sortindex);        $sortindex += 5;    }}sub get_all_settings {    my ($user_id) = @_;    my $settings = get_defaults($user_id); # first get the defaults    my $dbh = Bugzilla->dbh;    my $sth = $dbh->prepare(           q{SELECT name, default_value, is_enabled, setting_value               FROM setting          LEFT JOIN profile_setting                 ON setting.name = profile_setting.setting_name              WHERE profile_setting.user_id = ?           ORDER BY name});    $sth->execute($user_id);    while (my ($name, $default_value, $is_enabled, $value)                = $sth->fetchrow_array()) {        my $is_default;        if ( ($is_enabled) && (defined $value) ) {            $is_default = 0;        } else {            $value = $default_value;            $is_default = 1;        }        $settings->{$name} = new Bugzilla::User::Setting(           $name, $user_id, $is_enabled,            $default_value, $value, $is_default);    }    return $settings;}sub get_defaults {    my ($user_id) = @_;    my $dbh = Bugzilla->dbh;    my $default_settings = {};    $user_id ||= 0;    my $sth = $dbh->prepare(q{SELECT name, default_value, is_enabled                                FROM setting                            ORDER BY name});    $sth->execute();    while (my ($name, $default_value, $is_enabled) = $sth->fetchrow_array()) {        $default_settings->{$name} = new Bugzilla::User::Setting(            $name, $user_id, $is_enabled, $default_value, $default_value, 1);    }    return $default_settings;}sub set_default {    my ($setting_name, $default_value, $is_enabled) = @_;    my $dbh = Bugzilla->dbh;    my $sth = $dbh->prepare(q{UPDATE setting                                 SET default_value = ?, is_enabled = ?                               WHERE name = ?});    $sth->execute($default_value, $is_enabled, $setting_name);}sub _setting_exists {    my ($setting_name) = @_;    my $dbh = Bugzilla->dbh;    my $sth = $dbh->prepare("SELECT name FROM setting WHERE name = ?");    $sth->execute($setting_name);    return ($sth->rows) ? 1 : 0;}sub legal_values {    my ($self) = @_;    return $self->{'legal_values'} if defined $self->{'legal_values'};    my $dbh = Bugzilla->dbh;    $self->{'legal_values'} = $dbh->selectcol_arrayref(              q{SELECT value                  FROM setting_value                 WHERE name = ?              ORDER BY sortindex},        undef, $self->{'_setting_name'});    return $self->{'legal_values'};}sub validate_value {    my $self = shift;    if (grep(/^$_[0]$/, @{$self->legal_values()})) {        trick_taint($_[0]);    }    else {        ThrowCodeError('setting_value_invalid',                       {'name'  => $self->{'_setting_name'},                        'value' => $_[0]});    }}sub reset_to_default {    my ($self) = @_;    my $dbh = Bugzilla->dbh;    my $sth = $dbh->do(q{ DELETE                            FROM profile_setting                           WHERE setting_name = ?                             AND user_id = ?},                       undef, $self->{'_setting_name'}, $self->{'_user_id'});      $self->{'value'}       = $self->{'default_value'};      $self->{'is_default'}  = 1;}sub set {    my ($self, $value) = @_;    my $dbh = Bugzilla->dbh;    my $query;    if ($self->{'is_default'}) {        $query = q{INSERT INTO profile_setting                   (setting_value, setting_name, user_id)                   VALUES (?,?,?)};    } else {        $query = q{UPDATE profile_setting                      SET setting_value = ?                    WHERE setting_name = ?                      AND user_id = ?};    }    $dbh->do($query, undef, $value, $self->{'_setting_name'}, $self->{'_user_id'});    $self->{'value'}       = $value;    $self->{'is_default'}  = 0;}1;__END__=head1 NAMEBugzilla::User::Setting - Object for a user preference setting=head1 SYNOPSISSetting.pm creates a setting object, which is a hash containing the userpreference information for a single preference for a single user. These are usually accessed through the "settings" object of a user, and not directly.=head1 DESCRIPTIONuse Bugzilla::User::Setting;my $settings;$settings->{$setting_name} = new Bugzilla::User::Setting(   $setting_name, $user_id);OR$settings->{$setting_name} = new Bugzilla::User::Setting(   $setting_name, $user_id, $is_enabled,   $default_value, $value, $is_default);=head1 CLASS FUNCTIONS=over 4=item C<add_setting($name, \@values, $default_value)>Description: Checks for the existence of a setting, and adds it              to the database if it does not yet exist.Params:      C<$name> - string - the name of the new setting             C<$values> - arrayref - contains the new choices               for the new Setting.             C<$default_value> - string - the site defaultReturns:     a pointer to a hash of settings=item C<get_all_settings($user_id)>Description: Provides the user's choices for each setting in the              system; if the user has made no choice, uses the site             default instead.Params:      C<$user_id> - integer - the user id.Returns:     a pointer to a hash of settings=item C<get_defaults($user_id)>Description: When a user is not logged in, they must use the site             defaults for every settings; this subroutine provides them.Params:      C<$user_id> (optional) - integer - the user id.  Note that             this optional parameter is mainly for internal use only.Returns:     A pointer to a hash of settings.  If $user_id was passed, set             the user_id value for each setting.=item C<set_default($setting_name, $default_value, $is_enabled)>Description: Sets the global default for a given setting. Also sets             whether users are allowed to choose their own value for             this setting, or if they must use the global default.Params:      C<$setting_name> - string - the name of the setting             C<$default_value> - string - the new default value for this setting             C<$is_enabled> - boolean - if false, all users must use the global defaultReturns:     nothing=begin private=item C<_setting_exists>Description: Determines if a given setting exists in the database.Params:      C<$setting_name> - string - the setting nameReturns:     boolean - true if the setting already exists in the DB.=back=end private=head1 METHODS=over 4=item C<legal_values($setting_name)>Description: Returns all legal values for this settingParams:      noneReturns:     A reference to an array containing all legal values=item C<validate_value>Description: Determines whether a value is valid for the setting             by checking against the list of legal values.             Untaints the parameter if the value is indeed valid,             and throws a setting_value_invalid code error if not.Params:      An lvalue containing a candidate for a setting valueReturns:     nothing=item C<reset_to_default>Description: If a user chooses to use the global default for a given              setting, their saved entry is removed from the database via              this subroutine.Params:      noneReturns:     nothing=item C<set($value)>Description: If a user chooses to use their own value rather than the              global value for a given setting, OR changes their value for             a given setting, this subroutine is called to insert or              update the database as appropriate.Params:      C<$value> - string - the new value for this setting for this user.Returns:     nothing=back

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体在线国模精品偷拍| 91国产精品成人| 在线日韩国产精品| 精品国产一二三| 亚洲国产日日夜夜| 成人黄色在线视频| 精品国产伦理网| 午夜精品久久久久影视| 成人精品免费看| 久久一夜天堂av一区二区三区| 亚洲综合免费观看高清完整版在线 | 国产日韩成人精品| 美女网站色91| 欧美高清dvd| 亚洲一二三级电影| 91丨九色丨蝌蚪丨老版| 国产欧美精品区一区二区三区 | 精品国产乱码久久久久久免费| 一区二区日韩av| 97久久精品人人爽人人爽蜜臀| 欧美不卡在线视频| 日韩激情av在线| 欧美久久高跟鞋激| 亚洲va欧美va人人爽午夜| 色综合久久久久久久久| 国产精品不卡在线| 不卡区在线中文字幕| 国产精品三级电影| 丁香六月久久综合狠狠色| 欧美mv日韩mv| 国产精品一区在线观看乱码| 亚洲精品在线观| 国产成人午夜高潮毛片| 久久久久久久性| 成人午夜视频在线观看| 国产精品久久久久久久久免费樱桃 | 五月激情六月综合| 91精品国产欧美一区二区| 天天影视网天天综合色在线播放| 91高清在线观看| 亚洲一区二区三区四区在线观看| 在线观看亚洲一区| 香蕉av福利精品导航| 欧美久久久久免费| 蜜臀久久久久久久| 久久综合五月天婷婷伊人| 日韩欧美激情四射| 久久精品久久久精品美女| 日韩欧美一区二区视频| 黄色日韩三级电影| 国产片一区二区| 91免费国产在线| 亚洲成人自拍网| 欧美变态tickling挠脚心| 国产美女精品在线| 亚洲精品免费看| 91精品国产一区二区三区蜜臀| 久久爱www久久做| 国产精品国产自产拍高清av王其| 91黄视频在线| 极品销魂美女一区二区三区| 欧美国产日产图区| 欧美亚洲精品一区| 激情六月婷婷久久| 亚洲视频免费在线观看| 7777女厕盗摄久久久| 国产乱码一区二区三区| 一区二区三区四区在线播放| 在线91免费看| 99精品国产99久久久久久白柏| 婷婷久久综合九色综合伊人色| 国产精品水嫩水嫩| 欧美精品一二三区| 成人精品国产一区二区4080| 日本亚洲天堂网| 中文字幕亚洲欧美在线不卡| 5月丁香婷婷综合| 99精品视频在线观看免费| 视频一区二区中文字幕| 中文字幕综合网| 日韩欧美精品在线| 色老综合老女人久久久| 九九精品一区二区| 香港成人在线视频| 一区2区3区在线看| 国产日韩欧美一区二区三区综合| 欧美日韩一区三区四区| 丰满亚洲少妇av| 另类专区欧美蜜桃臀第一页| 亚洲精品国产第一综合99久久| 久久久另类综合| 日韩午夜电影av| 欧美亚洲自拍偷拍| 99精品视频在线观看免费| 激情五月激情综合网| 亚洲国产欧美在线| 亚洲精品国产高清久久伦理二区| 国产人成亚洲第一网站在线播放| 日韩精品一区二区在线观看| 欧美亚洲动漫精品| 91网站在线播放| www.欧美日韩国产在线| 国产一区福利在线| 精品一区二区免费| 麻豆成人91精品二区三区| 午夜激情一区二区| 亚洲一区二区三区四区不卡| 综合精品久久久| 亚洲日本在线天堂| 亚洲精品成人少妇| 亚洲欧美在线观看| 亚洲精品国产无天堂网2021| 亚洲三级小视频| 亚洲女性喷水在线观看一区| 自拍av一区二区三区| 国产精品欧美一级免费| 亚洲国产精品成人久久综合一区| 国产午夜精品一区二区三区嫩草| 欧美精品一区二区三区蜜桃 | 欧美日韩卡一卡二| 欧美网站一区二区| 欧美精品三级在线观看| 欧美年轻男男videosbes| 欧美日韩aaaaa| 欧美日韩一二三| 日韩三级中文字幕| 精品88久久久久88久久久| 久久综合九色综合97_久久久| 亚洲精品在线免费播放| 欧美国产日产图区| 亚洲精品写真福利| 天天综合色天天| 奇米影视在线99精品| 国内精品伊人久久久久av一坑| 国产经典欧美精品| 色哟哟欧美精品| 日韩欧美中文一区| 亚洲国产精品t66y| 亚洲丰满少妇videoshd| 麻豆视频一区二区| 成人免费视频国产在线观看| 日本精品一区二区三区四区的功能| 欧美色电影在线| 欧美成人video| 国产精品高潮呻吟久久| 一区二区高清免费观看影视大全| 日韩激情av在线| 成人精品一区二区三区四区| 欧美日韩精品一区二区三区蜜桃| 精品国产乱码久久久久久浪潮| 国产精品毛片无遮挡高清| 夜夜夜精品看看| 国产露脸91国语对白| 日本高清免费不卡视频| 欧美一级黄色大片| 亚洲欧美色图小说| 韩国一区二区视频| 色国产精品一区在线观看| 精品理论电影在线| 亚洲精品免费在线播放| 国产麻豆精品theporn| 91在线观看高清| 26uuu精品一区二区| 亚洲黄色av一区| 国产一区二区免费在线| 欧美日韩在线直播| 亚洲日本在线天堂| 国产寡妇亲子伦一区二区| 欧美精品色综合| 亚洲欧美另类在线| 国产酒店精品激情| 欧美一级黄色大片| 亚洲123区在线观看| 成人av免费观看| 久久综合色8888| 日韩成人免费电影| 91成人在线免费观看| 欧美激情自拍偷拍| 国产毛片精品视频| 精品国产自在久精品国产| 五月天亚洲精品| 欧美三级欧美一级| 综合久久久久久| eeuss鲁片一区二区三区在线观看| 日韩精品一区二区三区视频在线观看| 亚洲黄色av一区| 91日韩在线专区| 亚洲欧洲av色图| 91尤物视频在线观看| 久久久久久久久伊人| 加勒比av一区二区| 久久婷婷国产综合精品青草| 日韩国产一二三区| 欧美二区三区的天堂| 亚洲一区在线看| 精品视频在线视频| 亚洲国产综合在线| 欧美高清视频一二三区 | 日韩欧美色综合网站| 日韩影视精彩在线|