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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ivan Ivlev
bugzilla
Commits
dcca787f
Commit
dcca787f
authored
Feb 14, 2002
by
justdave%syndicomm.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backing out checkin for bug 115369, it's busted on Perl 5.00503.
parent
29086df9
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
289 deletions
+92
-289
globals.pl
globals.pl
+13
-206
long_list.cgi
long_list.cgi
+79
-83
No files found.
globals.pl
View file @
dcca787f
...
...
@@ -986,7 +986,7 @@ sub detaint_natural {
# expressions.
sub
quoteUrls
{
my
(
$text
)
=
(
@_
);
my
(
$
knownattachments
,
$
text
)
=
(
@_
);
return
$text
unless
$text
;
my
$base
=
Param
(
'urlbase'
);
...
...
@@ -994,6 +994,8 @@ sub quoteUrls {
my
$protocol
=
join
'|'
,
qw(afs cid ftp gopher http https mid news nntp prospero telnet wais)
;
my
%
options
=
(
metachars
=>
1
,
@_
);
my
$count
=
0
;
# Now, quote any "#" characters so they won't confuse stuff later
...
...
@@ -1044,9 +1046,9 @@ sub quoteUrls {
$item
=
GetBugLink
(
$num
,
$item
);
$things
[
$count
++
]
=
$item
;
}
while
(
$text
=~
s/\b
(Created an )?attachment(\s|%\#)*(\(id=)?(\d+)\)?
/"##$count##"/ei
)
{
while
(
$text
=~
s/\b
attachment(\s|%\#)*(\d+)
/"##$count##"/ei
)
{
my
$item
=
$&
;
my
$num
=
$
4
;
my
$num
=
$
2
;
$item
=
value_quote
(
$item
);
# Not really necessary, since we know
# there's no special chars in it.
$item
=
qq{<A HREF="attachment.cgi?id=$num&action=view">$item</A>}
;
...
...
@@ -1060,6 +1062,14 @@ sub quoteUrls {
$item
=~
s@\d+@$bug_link@
;
$things
[
$count
++
]
=
$item
;
}
while
(
$text
=~
s/Created an attachment \(id=(\d+)\)/"##$count##"/e
)
{
my
$item
=
$&
;
my
$num
=
$1
;
if
(
$knownattachments
->
{
$num
})
{
$item
=
qq{<A HREF="attachment.cgi?id=$num&action=view">$item</A>}
;
}
$things
[
$count
++
]
=
$item
;
}
$text
=
value_quote
(
$text
);
$text
=~
s/\
/\n/g
;
...
...
@@ -1223,33 +1233,6 @@ sub GetLongDescriptionAsHTML {
return
$result
;
}
sub
GetComments
{
my
(
$id
)
=
(
@_
);
my
@comments
;
SendSQL
(
"SELECT profiles.realname, profiles.login_name,
date_format(longdescs.bug_when,'%Y-%m-%d %H:%i'),
longdescs.thetext
FROM longdescs, profiles
WHERE profiles.userid = longdescs.who
AND longdescs.bug_id = $id
ORDER BY longdescs.bug_when"
);
while
(
MoreSQLData
())
{
my
%
comment
;
(
$comment
{
'name'
},
$comment
{
'email'
},
$comment
{
'time'
},
$comment
{
'body'
})
=
FetchSQLData
();
$comment
{
'email'
}
.=
Param
(
'emailsuffix'
);
$comment
{
'name'
}
=
$comment
{
'name'
}
||
$comment
{
'email'
};
push
(
@comments
,
\%
comment
);
}
return
\
@comments
;
}
# Fills in a hashtable with info about the columns for the given table in the
# database. The hashtable has the following entries:
# -list- the list of column names
...
...
@@ -1587,182 +1570,6 @@ use Template;
# Create the global template object that processes templates and specify
# configuration parameters that apply to all templates processed in this script.
our
$template
=
Template
->
new
(
{
# Colon-separated list of directories containing templates.
INCLUDE_PATH
=>
"template/custom:template/default"
,
# Allow templates to be specified with relative paths.
RELATIVE
=>
1
,
# Remove white-space before template directives (PRE_CHOMP) and at the
# beginning and end of templates and template blocks (TRIM) for better
# looking, more compact content. Use the plus sign at the beginning
# of directives to maintain white space (i.e. [%+ DIRECTIVE %]).
PRE_CHOMP
=>
1
,
TRIM
=>
1
,
# Functions for processing text within templates in various ways.
FILTERS
=>
{
# Render text in strike-through style.
strike
=>
sub
{
return
"<strike>"
.
$_
[
0
]
.
"</strike>"
}
,
}
,
}
);
# Use the Toolkit Template's Stash module to add utility pseudo-methods
# to template variables.
use
Template::
Stash
;
# Add "contains***" methods to list variables that search for one or more
# items in a list and return boolean values representing whether or not
# one/all/any item(s) were found.
$
Template::Stash::
LIST_OPS
->
{
contains
}
=
sub
{
my
(
$list
,
$item
)
=
@_
;
return
grep
(
$_
eq
$item
,
@$list
);
};
$
Template::Stash::
LIST_OPS
->
{
containsany
}
=
sub
{
my
(
$list
,
$items
)
=
@_
;
foreach
my
$item
(
@$items
)
{
return
1
if
grep
(
$_
eq
$item
,
@$list
);
}
return
0
;
};
# Add a "substr" method to the Template Toolkit's "scalar" object
# that returns a substring of a string.
$
Template::Stash::
SCALAR_OPS
->
{
substr
}
=
sub
{
my
(
$scalar
,
$offset
,
$length
)
=
@_
;
return
substr
(
$scalar
,
$offset
,
$length
);
};
# Add a "truncate" method to the Template Toolkit's "scalar" object
# that truncates a string to a certain length.
$
Template::Stash::
SCALAR_OPS
->
{
truncate
}
=
sub
{
my
(
$string
,
$length
,
$ellipsis
)
=
@_
;
$ellipsis
||=
""
;
return
$string
if
!
$length
||
length
(
$string
)
<=
$length
;
my
$strlen
=
$length
-
length
(
$ellipsis
);
my
$newstr
=
substr
(
$string
,
0
,
$strlen
)
.
$ellipsis
;
return
$newstr
;
};
# Define the global variables and functions that will be passed to the UI
# template. Additional values may be added to this hash before templates
# are processed.
our
$vars
=
{
# Function for retrieving global parameters.
'Param'
=>
\&
Param
,
# Function for processing global parameters that contain references
# to other global parameters.
'PerformSubsts'
=>
\&
PerformSubsts
,
};
my
$suppress_used_only_once_warning
=
$vars
;
sub
GetOutputFormats
{
# Builds a list of possible output formats for a script by looking for
# format files in the appropriate template directories as specified by
# the template include path and the "sub-directory name" parameter.
# This function is relevant for scripts with one basic function whose
# results can be represented in multiple formats, f.e. buglist.cgi,
# which has one function (query and display of a list of bugs) that can
# be represented in multiple formats (i.e. html, rdf, xml, etc.).
# It is *not* relevant for scripts with several functions but only one
# basic output format, f.e. editattachstatuses.cgi, which not only lists
# statuses but also provides adding, editing, and deleting functions.
# Format files have names that look like NAME_format.EXT.atml, where NAME
# is the name of the format and EXT is the filename extension identifying
# the type of content the format file generates. If the generated content
# gets saved to a file, the name of that file should have the extension
# appended to it. If the content gets sent to the user without being saved
# in a file (f.e. when returned as the response to an HTTP request),
# the content type (in MIME type format) should be looked up from the list
# of types, indexed by extension, in the "localconfig" file.
my
(
$subdir
)
=
@_
;
# A set of output format records, indexed by format name, each record
# containing template, extension, and contenttype fields.
my
$formats
=
{};
# The list of directories in which we look for templates to process.
my
$includepath
=
$template
->
context
->
{
LOAD_TEMPLATES
}
->
[
0
]
->
include_path
();
# Use the Perl module wrapper to the directory manipulation routines.
use
IO::
Dir
;
foreach
my
$path
(
@$includepath
)
{
my
$dirname
=
$path
.
"/"
.
$subdir
;
my
$dir
=
new
IO::
Dir
$dirname
;
next
if
!
defined
$dir
;
my
$file
;
while
(
defined
(
$file
=
$dir
->
read
()))
{
if
(
$file
=~
/^(.+)_format\.(.+)\.(atml|tmpl)$/
&&
$::contenttypes
->
{
$2
})
{
$formats
->
{
$1
}
=
{
'template'
=>
$file
,
'extension'
=>
$2
,
'contenttype'
=>
$::contenttypes
->
{
$2
}
};
}
}
}
return
$formats
;
}
sub
ValidateOutputFormat
{
my
(
$subdir
,
$name
)
=
@_
;
if
(
$name
eq
"default"
)
{
return
{
'template'
=>
"default_format.html.tmpl"
,
'extension'
=>
"html"
,
'contenttype'
=>
"text/html"
};
}
# Get the list of output formats supported by this script.
my
$formats
=
GetOutputFormats
(
$subdir
);
# Validate the output format requested by the user.
if
(
!
$formats
->
{
$name
})
{
my
$escapedname
=
html_quote
(
$name
);
DisplayError
(
"The <em>$escapedname</em> output format is not
supported by this script. Supported formats are <em>"
.
join
(
"</em>, <em>"
,
map
(
html_quote
(
$_
),
keys
(
%
$formats
)))
.
"</em>."
);
exit
;
}
# Return the record of information about this output format.
return
$formats
->
{
$name
};
}
###############################################################################
###############################################################################
# Global Templatization Code
# Use the template toolkit (http://www.template-toolkit.org/) to generate
# the user interface using templates in the "template/" subdirectory.
use
Template
;
# Create the global template object that processes templates and specify
# configuration parameters that apply to all templates processed in this script.
$::template
=
Template
->
new
(
{
# Colon-separated list of directories containing templates.
...
...
long_list.cgi
View file @
dcca787f
...
...
@@ -19,11 +19,10 @@
# Rights Reserved.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# Gervase Markham <gerv@gerv.net>
use
diagnostics
;
use
strict
;
use
lib
"."
;
use
lib
qw(.)
;
...
...
@@ -34,44 +33,17 @@ require "CGI.pl";
sub
sillyness
{
my
$zz
;
$zz
=
$::legal_keywords
;
$zz
=
$::userid
;
$zz
=
$::usergroupset
;
$zz
=
@::legal_keywords
;
$zz
=
%::
FORM
;
}
# Use the template toolkit (http://www.template-toolkit.org/) to generate
# the user interface (HTML pages and mail messages) using templates in the
# "template/" subdirectory.
use
Template
;
# Create the global template object that processes templates and specify
# configuration parameters that apply to all templates processed in this script.
my
$template
=
Template
->
new
(
{
# Colon-separated list of directories containing templates.
INCLUDE_PATH
=>
"template/custom:template/default"
,
# Allow templates to be specified with relative paths.
RELATIVE
=>
1
,
PRE_CHOMP
=>
1
,
});
# Define the global variables and functions that will be passed to the UI
# template. Individual functions add their own values to this hash before
# sending them to the templates they process.
my
$vars
=
{
# Function for retrieving global parameters.
'Param'
=>
\&
Param
,
# Function for processing global parameters that contain references
# to other global parameters.
'PerformSubsts'
=>
\&
PerformSubsts
,
'quoteUrls'
=>
\&
quoteUrls
,
'time2str'
=>
\&
time2str
,
'str2time'
=>
\&
str2time
,
};
print
"Content-type: text/html\n"
;
#Changing attachment to inline to resolve 46897
#zach@zachlipton.com
print
"Content-disposition: inline; filename=bugzilla_bug_list.html\n\n"
;
PutHeader
(
"Full Text Bug Listing"
);
ConnectToDatabase
();
quietly_check_login
();
...
...
@@ -79,55 +51,79 @@ quietly_check_login();
GetVersionTable
();
my
$generic_query
=
"
SELECT bugs.bug_id, bugs.product, bugs.version, bugs.rep_platform,
bugs.op_sys, bugs.bug_status, bugs.resolution, bugs.priority,
bugs.bug_severity, bugs.component, assign.login_name, report.login_name,
bugs.bug_file_loc, bugs.short_desc, bugs.target_milestone,
bugs.qa_contact, bugs.status_whiteboard, bugs.keywords
FROM bugs,profiles assign,profiles report
WHERE assign.userid = bugs.assigned_to AND report.userid = bugs.reporter"
;
my
$buglist
=
$::FORM
{
'buglist'
}
||
$::FORM
{
'bug_id'
}
||
$::FORM
{
'id'
}
||
""
;
my
@bugs
;
foreach
my
$bug_id
(
split
(
/[:,]/
,
$buglist
))
{
detaint_natural
(
$bug_id
)
||
next
;
SendSQL
(
SelectVisible
(
"$generic_query AND bugs.bug_id = $bug_id"
,
select
bugs.bug_id,
bugs.product,
bugs.version,
bugs.rep_platform,
bugs.op_sys,
bugs.bug_status,
bugs.bug_severity,
bugs.priority,
bugs.resolution,
assign.login_name,
report.login_name,
bugs.component,
bugs.bug_file_loc,
bugs.short_desc,
bugs.target_milestone,
bugs.qa_contact,
bugs.status_whiteboard,
bugs.keywords
from bugs,profiles assign,profiles report
where assign.userid = bugs.assigned_to and report.userid = bugs.reporter and"
;
$::FORM
{
'buglist'
}
=
""
unless
exists
$::FORM
{
'buglist'
};
foreach
my
$bug
(
split
(
/:/
,
$::FORM
{
'buglist'
}))
{
detaint_natural
(
$bug
)
||
next
;
SendSQL
(
SelectVisible
(
"$generic_query bugs.bug_id = $bug"
,
$::userid
,
$::usergroupset
));
my
%
bug
;
my
@row
=
FetchSQLData
();
foreach
my
$field
(
"bug_id"
,
"product"
,
"version"
,
"rep_platform"
,
"op_sys"
,
"bug_status"
,
"resolution"
,
"priority"
,
"bug_severity"
,
"component"
,
"assigned_to"
,
"reporter"
,
"bug_file_loc"
,
"short_desc"
,
"target_milestone"
,
"qa_contact"
,
"status_whiteboard"
,
"keywords"
)
{
$bug
{
$field
}
=
shift
@row
;
}
if
(
$bug
{
'bug_id'
})
{
$bug
{
'comments'
}
=
GetComments
(
$bug
{
'bug_id'
});
$bug
{
'qa_contact'
}
=
$bug
{
'qa_contact'
}
>
0
?
DBID_to_name
(
$bug
{
'qa_contact'
})
:
""
;
push
(
@bugs
,
\%
bug
);
my
@row
;
if
(
@row
=
FetchSQLData
())
{
my
(
$id
,
$product
,
$version
,
$platform
,
$opsys
,
$status
,
$severity
,
$priority
,
$resolution
,
$assigned
,
$reporter
,
$component
,
$url
,
$shortdesc
,
$target_milestone
,
$qa_contact
,
$status_whiteboard
,
$keywords
)
=
(
@row
);
print
"<IMG SRC=\"1x1.gif\" WIDTH=1 HEIGHT=80 ALIGN=LEFT>\n"
;
print
"<TABLE WIDTH=100%>\n"
;
print
"<TD COLSPAN=4><TR><DIV ALIGN=CENTER><B><FONT =\"+3\">"
.
html_quote
(
$shortdesc
)
.
"</B></FONT></DIV>\n"
;
print
"<TR><TD><B>Bug#:</B> <A HREF=\"show_bug.cgi?id=$id\">$id</A>\n"
;
print
"<TD><B>Product:</B> $product\n"
;
print
"<TD><B>Version:</B> $version\n"
;
print
"<TD><B>Platform:</B> $platform\n"
;
print
"<TR><TD><B>OS/Version:</B> $opsys\n"
;
print
"<TD><B>Status:</B> $status\n"
;
print
"<TD><B>Severity:</B> $severity\n"
;
print
"<TD><B>Priority:</B> $priority\n"
;
print
"<TR><TD><B>Resolution:</B> $resolution</TD>\n"
;
print
"<TD><B>Assigned To:</B> $assigned\n"
;
print
"<TD><B>Reported By:</B> $reporter\n"
;
if
(
Param
(
"useqacontact"
))
{
my
$name
=
""
;
if
(
$qa_contact
>
0
)
{
$name
=
DBID_to_name
(
$qa_contact
);
}
print
"<TD><B>QA Contact:</B> $name\n"
;
}
print
"<TR><TD COLSPAN=2><B>Component:</B> $component\n"
;
if
(
Param
(
"usetargetmilestone"
))
{
print
"<TD COLSPAN=2><B>Target Milestone:</B> $target_milestone\n"
;
}
print
"<TR><TD COLSPAN=6><B>URL:</B> "
;
print
"<A HREF=\""
.
$url
.
"\">"
.
html_quote
(
$url
)
.
"</A>\n"
;
print
"<TR><TD COLSPAN=6><B>Summary:</B> "
.
html_quote
(
$shortdesc
)
.
"\n"
;
if
(
@::legal_keywords
)
{
print
"<TR><TD><B>Keywords: </B>$keywords</TD></TR>\n"
;
}
if
(
Param
(
"usestatuswhiteboard"
))
{
print
"<TR><TD COLSPAN=6><B>Status Whiteboard:"
.
html_quote
(
$status_whiteboard
)
.
"\n"
;
}
print
"<TR><TD><B>Description:</B>\n</TABLE>\n"
;
print
GetLongDescriptionAsHTML
(
$bug
);
print
"<HR>\n"
;
}
}
# Add the bug list of hashes to the variables
$vars
->
{
'bugs'
}
=
\
@bugs
;
$vars
->
{
'use_keywords'
}
=
1
if
(
@::legal_keywords
);
print
"Content-type: text/html\n"
;
print
"Content-disposition: inline; filename=bugzilla_bug_list.html\n\n"
;
# Generate and return the UI (HTML page) from the appropriate template.
$template
->
process
(
"show/multiple.tmpl"
,
$vars
)
||
DisplayError
(
"Template process failed: "
.
$template
->
error
())
&&
exit
;
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