Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
4421ce1c
Commit
4421ce1c
authored
Sep 15, 2007
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 394923: Make Bugzilla.pm subclassable by using $class->method everywhere
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=ghendricks, a=mkanat
parent
970b7eff
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
57 deletions
+55
-57
Bugzilla.pm
Bugzilla.pm
+55
-57
No files found.
Bugzilla.pm
View file @
4421ce1c
...
...
@@ -79,6 +79,7 @@ use constant SHUTDOWNHTML_EXIT_SILENTLY => [
#}
#$::SIG{__DIE__} = \&Bugzilla::die_with_dignity;
# Note that this is a raw subroutine, not a method, so $class isn't available.
sub
init_page
{
# Some environment variables are not taint safe
...
...
@@ -161,40 +162,42 @@ init_page() if !$ENV{MOD_PERL};
sub
template
{
my
$class
=
shift
;
request_cache
()
->
{
language
}
=
""
;
request_cache
()
->
{
template
}
||=
Bugzilla::
Template
->
create
();
return
request_cache
()
->
{
template
};
$class
->
request_cache
->
{
language
}
=
""
;
$class
->
request_cache
->
{
template
}
||=
Bugzilla::
Template
->
create
();
return
$class
->
request_cache
->
{
template
};
}
sub
template_inner
{
my
(
$class
,
$lang
)
=
@_
;
$lang
=
defined
(
$lang
)
?
$lang
:
(
request_cache
()
->
{
language
}
||
""
);
request_cache
()
->
{
language
}
=
$lang
;
request_cache
()
->
{
"template_inner_$lang"
}
||=
Bugzilla::
Template
->
create
();
return
request_cache
()
->
{
"template_inner_$lang"
};
$lang
=
defined
(
$lang
)
?
$lang
:
(
$class
->
request_cache
->
{
language
}
||
""
);
$class
->
request_cache
->
{
language
}
=
$lang
;
$class
->
request_cache
->
{
"template_inner_$lang"
}
||=
Bugzilla::
Template
->
create
();
return
$class
->
request_cache
->
{
"template_inner_$lang"
};
}
sub
cgi
{
my
$class
=
shift
;
request_cache
()
->
{
cgi
}
||=
new
Bugzilla::
CGI
();
return
request_cache
()
->
{
cgi
};
$class
->
request_cache
->
{
cgi
}
||=
new
Bugzilla::
CGI
();
return
$class
->
request_cache
->
{
cgi
};
}
sub
localconfig
{
request_cache
()
->
{
localconfig
}
||=
read_localconfig
();
return
request_cache
()
->
{
localconfig
};
my
$class
=
shift
;
$class
->
request_cache
->
{
localconfig
}
||=
read_localconfig
();
return
$class
->
request_cache
->
{
localconfig
};
}
sub
params
{
my
$class
=
shift
;
request_cache
()
->
{
params
}
||=
Bugzilla::Config::
read_param_file
();
return
request_cache
()
->
{
params
};
$class
->
request_cache
->
{
params
}
||=
Bugzilla::Config::
read_param_file
();
return
$class
->
request_cache
->
{
params
};
}
sub
user
{
my
$class
=
shift
;
request_cache
()
->
{
user
}
||=
new
Bugzilla::
User
;
return
request_cache
()
->
{
user
};
$class
->
request_cache
->
{
user
}
||=
new
Bugzilla::
User
;
return
$class
->
request_cache
->
{
user
};
}
sub
set_user
{
...
...
@@ -204,31 +207,25 @@ sub set_user {
sub
sudoer
{
my
$class
=
shift
;
return
request_cache
()
->
{
sudoer
};
return
$class
->
request_cache
->
{
sudoer
};
}
sub
sudo_request
{
my
$class
=
shift
;
my
$new_user
=
shift
;
my
$new_sudoer
=
shift
;
request_cache
()
->
{
user
}
=
$new_user
;
request_cache
()
->
{
sudoer
}
=
$new_sudoer
;
my
(
$class
,
$new_user
,
$new_sudoer
)
=
@_
;
$class
->
request_cache
->
{
user
}
=
$new_user
;
$class
->
request_cache
->
{
sudoer
}
=
$new_sudoer
;
# NOTE: If you want to log the start of an sudo session, do it here.
return
;
}
sub
login
{
my
(
$class
,
$type
)
=
@_
;
return
Bugzilla
->
user
if
Bugzilla
->
user
->
id
;
return
$class
->
user
if
$class
->
user
->
id
;
my
$authorizer
=
new
Bugzilla::
Auth
();
$type
=
LOGIN_REQUIRED
if
Bugzilla
->
cgi
->
param
(
'GoAheadAndLogIn'
);
$type
=
LOGIN_REQUIRED
if
$class
->
cgi
->
param
(
'GoAheadAndLogIn'
);
if
(
!
defined
$type
||
$type
==
LOGIN_NORMAL
)
{
$type
=
Bugzilla
->
params
->
{
'requirelogin'
}
?
LOGIN_REQUIRED
:
LOGIN_NORMAL
;
$type
=
$class
->
params
->
{
'requirelogin'
}
?
LOGIN_REQUIRED
:
LOGIN_NORMAL
;
}
my
$authenticated_user
=
$authorizer
->
login
(
$type
);
...
...
@@ -251,8 +248,8 @@ sub login {
!
(
$sudo_target
->
in_group
(
'bz_sudo_protect'
))
)
{
Bugzilla
->
set_user
(
$sudo_target
);
request_cache
()
->
{
sudoer
}
=
$authenticated_user
;
$class
->
set_user
(
$sudo_target
);
$class
->
request_cache
->
{
sudoer
}
=
$authenticated_user
;
# And make sure that both users have the same Auth object,
# since we never call Auth::login for the sudo target.
$sudo_target
->
set_authorizer
(
$authenticated_user
->
authorizer
);
...
...
@@ -260,10 +257,10 @@ sub login {
# NOTE: If you want to do any special logging, do it here.
}
else
{
Bugzilla
->
set_user
(
$authenticated_user
);
$class
->
set_user
(
$authenticated_user
);
}
return
Bugzilla
->
user
;
return
$class
->
user
;
}
sub
logout
{
...
...
@@ -274,7 +271,7 @@ sub logout {
$option
=
LOGOUT_CURRENT
unless
defined
$option
;
Bugzilla::Auth::Persist::
Cookie
->
logout
({
type
=>
$option
});
Bugzilla
->
logout_request
()
unless
$option
eq
LOGOUT_KEEP_CURRENT
;
$class
->
logout_request
()
unless
$option
eq
LOGOUT_KEEP_CURRENT
;
}
sub
logout_user
{
...
...
@@ -293,24 +290,26 @@ sub logout_user_by_id {
# hack that invalidates credentials for a single request
sub
logout_request
{
delete
request_cache
()
->
{
user
};
delete
request_cache
()
->
{
sudoer
};
my
$class
=
shift
;
delete
$class
->
request_cache
->
{
user
};
delete
$class
->
request_cache
->
{
sudoer
};
# We can't delete from $cgi->cookie, so logincookie data will remain
# there. Don't rely on it: use Bugzilla->user->login instead!
}
sub
dbh
{
my
$class
=
shift
;
# If we're not connected, then we must want the main db
request_cache
()
->
{
dbh
}
||=
request_cache
()
->
{
dbh_main
}
$class
->
request_cache
->
{
dbh
}
||=
$class
->
request_cache
->
{
dbh_main
}
=
Bugzilla::DB::
connect_main
();
return
request_cache
()
->
{
dbh
};
return
$class
->
request_cache
->
{
dbh
};
}
sub
languages
{
return
request_cache
()
->
{
languages
}
if
request_cache
()
->
{
languages
};
my
$class
=
shift
;
return
$class
->
request_cache
->
{
languages
}
if
$class
->
request_cache
->
{
languages
};
my
@files
=
glob
(
catdir
(
bz_locations
->
{
'templatedir'
},
'*'
));
my
@languages
;
...
...
@@ -324,22 +323,20 @@ sub languages {
next
unless
$dir_entry
=~
/^[a-zA-Z]{1,8}(-[a-zA-Z]{1,8})?$/
;
push
(
@languages
,
$dir_entry
);
}
return
request_cache
()
->
{
languages
}
=
\
@languages
;
return
$class
->
request_cache
->
{
languages
}
=
\
@languages
;
}
sub
error_mode
{
my
$class
=
shift
;
my
$newval
=
shift
;
my
(
$class
,
$newval
)
=
@_
;
if
(
defined
$newval
)
{
request_cache
()
->
{
error_mode
}
=
$newval
;
$class
->
request_cache
->
{
error_mode
}
=
$newval
;
}
return
request_cache
()
->
{
error_mode
}
return
$class
->
request_cache
->
{
error_mode
}
||
Bugzilla::Constants::
ERROR_MODE_WEBPAGE
;
}
sub
usage_mode
{
my
$class
=
shift
;
my
$newval
=
shift
;
my
(
$class
,
$newval
)
=
@_
;
if
(
defined
$newval
)
{
if
(
$newval
==
USAGE_MODE_BROWSER
)
{
$class
->
error_mode
(
ERROR_MODE_WEBPAGE
);
...
...
@@ -357,9 +354,9 @@ sub usage_mode {
ThrowCodeError
(
'usage_mode_invalid'
,
{
'invalid_usage_mode'
,
$newval
});
}
request_cache
()
->
{
usage_mode
}
=
$newval
;
$class
->
request_cache
->
{
usage_mode
}
=
$newval
;
}
return
request_cache
()
->
{
usage_mode
}
return
$class
->
request_cache
->
{
usage_mode
}
||
Bugzilla::Constants::
USAGE_MODE_BROWSER
;
}
...
...
@@ -388,15 +385,15 @@ sub installation_answers {
sub
switch_to_shadow_db
{
my
$class
=
shift
;
if
(
!
request_cache
()
->
{
dbh_shadow
})
{
if
(
Bugzilla
->
params
->
{
'shadowdb'
})
{
request_cache
()
->
{
dbh_shadow
}
=
Bugzilla::DB::
connect_shadow
();
if
(
!
$class
->
request_cache
->
{
dbh_shadow
})
{
if
(
$class
->
params
->
{
'shadowdb'
})
{
$class
->
request_cache
->
{
dbh_shadow
}
=
Bugzilla::DB::
connect_shadow
();
}
else
{
request_cache
()
->
{
dbh_shadow
}
=
request_cache
()
->
{
dbh_main
};
$class
->
request_cache
->
{
dbh_shadow
}
=
request_cache
()
->
{
dbh_main
};
}
}
request_cache
()
->
{
dbh
}
=
request_cache
()
->
{
dbh_shadow
};
$class
->
request_cache
->
{
dbh
}
=
$class
->
request_cache
->
{
dbh_shadow
};
# we have to return $class->dbh instead of {dbh} as
# {dbh_shadow} may be undefined if no shadow DB is used
# and no connection to the main DB has been established yet.
...
...
@@ -406,7 +403,7 @@ sub switch_to_shadow_db {
sub
switch_to_main_db
{
my
$class
=
shift
;
request_cache
()
->
{
dbh
}
=
request_cache
()
->
{
dbh_main
};
$class
->
request_cache
->
{
dbh
}
=
$class
->
request_cache
->
{
dbh_main
};
# We have to return $class->dbh instead of {dbh} as
# {dbh_main} may be undefined if no connection to the main DB
# has been established yet.
...
...
@@ -445,10 +442,11 @@ sub request_cache {
# Private methods
# Per-process cleanup
# Per-process cleanup. Note that this is a plain subroutine, not a method,
# so we don't have $class available.
sub
_cleanup
{
my
$main
=
request_cache
()
->
{
dbh_main
};
my
$shadow
=
request_cache
()
->
{
dbh_shadow
};
my
$main
=
Bugzilla
->
request_cache
->
{
dbh_main
};
my
$shadow
=
Bugzilla
->
request_cache
->
{
dbh_shadow
};
foreach
my
$dbh
(
$main
,
$shadow
)
{
next
if
!
$dbh
;
$dbh
->
bz_rollback_transaction
()
if
$dbh
->
bz_in_transaction
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment