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
6a64cd59
Commit
6a64cd59
authored
Nov 05, 2002
by
myk%mozilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for bug 156548: XUL implementation of duplicates report.
parent
952d1ad6
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
426 additions
and
2 deletions
+426
-2
CGI.pl
CGI.pl
+1
-1
checksetup.pl
checksetup.pl
+5
-1
collectstats.pl
collectstats.pl
+17
-0
duplicates.css
css/duplicates.css
+27
-0
duplicates.cgi
duplicates.cgi
+12
-0
duplicates.xul
duplicates.xul
+133
-0
duplicates.js
js/duplicates.js
+153
-0
duplicates.css
skins/standard/duplicates.css
+27
-0
duplicates.rdf.tmpl
template/en/default/reports/duplicates.rdf.tmpl
+51
-0
No files found.
CGI.pl
View file @
6a64cd59
...
...
@@ -206,7 +206,7 @@ sub get_netaddr {
my
(
$ipaddr
)
=
@_
;
# Check for a valid IPv4 addr which we know how to parse
if
(
$ipaddr
!~
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
)
{
if
(
!
$ipaddr
||
$ipaddr
!~
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
)
{
return
undef
;
}
...
...
checksetup.pl
View file @
6a64cd59
...
...
@@ -837,8 +837,12 @@ END
open
HTACCESS
,
">data/.htaccess"
;
print
HTACCESS
<<'END';
# nothing in this directory is retrievable unless overriden by an .htaccess
# in a subdirectory
# in a subdirectory; the only exception is duplicates.rdf, which is used by
# duplicates.xul and must be loadable over the web
deny from all
<Files duplicates.rdf>
allow from all
</Files>
END
close
HTACCESS
;
chmod
$fileperm
,
"data/.htaccess"
;
...
...
collectstats.pl
View file @
6a64cd59
...
...
@@ -53,6 +53,23 @@ foreach (@myproducts) {
&
calculate_dupes
();
# Generate a static RDF file containing the default view of the duplicates data.
open
(
CGI
,
"REQUEST_METHOD=GET QUERY_STRING=ctype=rdf ./duplicates.cgi |"
)
||
die
"can't fork duplicates.cgi: $!"
;
open
(
RDF
,
">data/duplicates.tmp"
)
||
die
"can't write to data/duplicates.tmp: $!"
;
my
$headers_done
=
0
;
while
(
<
CGI
>
)
{
print
RDF
if
$headers_done
;
$headers_done
=
1
if
$_
eq
"\n"
;
}
close
CGI
;
close
RDF
;
if
(
-
s
"data/duplicates.tmp"
)
{
rename
(
"data/duplicates.rdf"
,
"data/duplicates-old.rdf"
);
rename
(
"data/duplicates.tmp"
,
"data/duplicates.rdf"
);
}
sub
check_data_dir
{
my
$dir
=
shift
;
...
...
css/duplicates.css
0 → 100644
View file @
6a64cd59
/* 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.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Myk Melez <myk@mozilla.org>
*/
treechildren
:-moz-tree-cell-text
(
resolution-FIXED
)
{
text-decoration
:
line-through
;
}
treecol
#id_column
{
width
:
6em
;
}
treecol
#duplicate_count_column
{
width
:
5em
;
}
treecol
#duplicate_delta_column
{
width
:
5em
;
}
duplicates.cgi
View file @
6a64cd59
...
...
@@ -32,6 +32,18 @@ use lib qw(.);
require
"globals.pl"
;
require
"CGI.pl"
;
use
vars
qw($buffer)
;
# Go directly to the XUL version of the duplicates report (duplicates.xul)
# if the user specified ctype=xul. Adds params if they exist, and directs
# the user to a signed copy of the script in duplicates.jar if it exists.
if
(
$::FORM
{
'ctype'
}
eq
"xul"
)
{
my
$params
=
CanonicaliseParams
(
$::buffer
,
[
"format"
,
"ctype"
]);
print
"Location: "
.
(
-
e
"duplicates.jar"
?
"duplicates.jar!/"
:
""
)
.
"duplicates.xul"
.
(
$params
?
"?$params"
:
""
)
.
"\n\n"
;
exit
;
}
# Use global templatisation variables.
use
vars
qw($template $vars)
;
...
...
duplicates.xul
0 → 100644
View file @
6a64cd59
<?xml version="1.0"?>
<!--
-
- 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.
-
- The Initial Developer of the Original Code is Netscape Communications
- Corporation. Portions created by Netscape are
- Copyright (C) 1998 Netscape Communications Corporation. All
- Rights Reserved.
-
- Contributor(s): Myk Melez <myk@mozilla.org>
-
-->
<!DOCTYPE window [
<!ENTITY idColumn.label "ID">
<!ENTITY duplicateCountColumn.label "Count">
<!ENTITY duplicateDeltaColumn.label "Delta">
<!ENTITY componentColumn.label "Component">
<!ENTITY severityColumn.label "Severity">
<!ENTITY osColumn.label "OS">
<!ENTITY targetMilestoneColumn.label "Milestone">
<!ENTITY summaryColumn.label "Summary">
]>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="css/duplicates.css" type="text/css"?>
<window
id=
"duplicates_report"
xmlns:html=
"http://www.w3.org/1999/xhtml"
xmlns=
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title=
"Duplicates Report"
>
// Code for populating the tree from the RDF data source
// and loading bug reports when the user selects rows in the tree.
<script
type=
"application/x-javascript"
src=
"js/duplicates.js"
/>
<tree
id=
"results-tree"
flex=
"1"
flags=
"dont-build-content"
enableColumnDrag=
"true"
datasources=
"rdf:null"
ref=
""
onselect=
"loadBugInPane();"
ondblclick=
"loadBugInWindow();"
>
<treecols>
<treecol
id=
"id_column"
label=
"&idColumn.label;"
primary=
"true"
sort=
"?id"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"duplicate_count_column"
label=
"&duplicateCountColumn.label;"
sort=
"?duplicate_count"
sortActive=
"true"
sortDirection=
"descending"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"duplicate_delta_column"
label=
"&duplicateDeltaColumn.label;"
sort=
"?duplicate_delta"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"component_column"
label=
"&componentColumn.label;"
flex=
"3"
sort=
"?component"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"severity_column"
label=
"&severityColumn.label;"
flex=
"1"
sort=
"?severity"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"os_column"
label=
"&osColumn.label;"
flex=
"2"
sort=
"?os"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"target_milestone_column"
label=
"&targetMilestoneColumn.label;"
flex=
"1"
sort=
"?target_milestone"
persist=
"width hidden sortActive sortDirection ordinal"
/>
<splitter
class=
"tree-splitter"
/>
<treecol
id=
"summary_column"
label=
"&summaryColumn.label;"
flex=
"12"
sort=
"?summary"
persist=
"width hidden sortActive sortDirection ordinal"
/>
</treecols>
<template>
<rule>
<conditions>
<treeitem
uri=
"?uri"
/>
<triple
subject=
"?uri"
predicate=
"http://www.bugzilla.org/rdf#bugs"
object=
"?bugs"
/>
<member
container=
"?bugs"
child=
"?bug"
/>
<triple
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#id"
object=
"?id"
/>
</conditions>
<bindings>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#duplicate_count"
object=
"?duplicate_count"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#duplicate_delta"
object=
"?duplicate_delta"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#component"
object=
"?component"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#severity"
object=
"?severity"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#priority"
object=
"?priority"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#os"
object=
"?os"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#target_milestone"
object=
"?target_milestone"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#summary"
object=
"?summary"
/>
<binding
subject=
"?bug"
predicate=
"http://www.bugzilla.org/rdf#resolution"
object=
"?resolution"
/>
</bindings>
<action>
<treechildren>
<treeitem
uri=
"?bug"
>
<treerow
properties=
"resolution-?resolution"
>
<treecell
ref=
"id_column"
label=
"?id"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"duplicate_count_column"
label=
"?duplicate_count"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"duplicate_delta_column"
label=
"?duplicate_delta"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"component_column"
label=
"?component"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"severity_column"
label=
"?severity"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"os_column"
label=
"?os"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"target_milestone_column"
label=
"?target_milestone"
properties=
"resolution-?resolution"
/>
<treecell
ref=
"summary_column"
label=
"?summary"
properties=
"resolution-?resolution"
/>
</treerow>
</treeitem>
</treechildren>
</action>
</rule>
</template>
</tree>
<splitter
id=
"report-content-splitter"
collapse=
"after"
state=
"open"
persist=
"state"
>
<grippy/>
</splitter>
<iframe
id=
"content-browser"
src=
"about:blank"
flex=
"2"
persist=
"height"
/>
</window>
js/duplicates.js
0 → 100644
View file @
6a64cd59
/* 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.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Myk Melez <myk@mozilla.org>
*/
// When the XUL window finishes loading, load the RDF data into it.
window
.
addEventListener
(
'load'
,
loadData
,
false
);
// The base URL of this Bugzilla installation; derived from the page's URL.
var
gBaseURL
=
window
.
location
.
href
.
replace
(
/duplicates
\.(
jar!|xul
)
.*/
,
""
);
function
loadData
()
{
// Loads the duplicates data as an RDF data source, attaches it to the tree,
// and rebuilds the tree to display the data.
netscape
.
security
.
PrivilegeManager
.
enablePrivilege
(
"UniversalXPConnect"
);
// Get the RDF service so we can use it to load the data source.
var
rdfService
=
Components
.
classes
[
"@mozilla.org/rdf/rdf-service;1"
]
.
getService
(
Components
.
interfaces
.
nsIRDFService
);
// When a bug report loads in the content iframe, a 'load' event bubbles up
// to the browser window, which calls this load handler again, which reloads
// the RDF data, which causes the tree to lose the selection. To prevent
// this, we have to remove this handler.
window
.
removeEventListener
(
'load'
,
loadData
,
false
);
// The URL of the RDF file; by default for performance a static file
// generated by collectstats.pl, but a call to duplicates.cgi if the page's
// URL contains parameters (so we can dynamically generate the RDF data
// based on those parameters).
var
dataURL
=
gBaseURL
+
"data/duplicates.rdf"
;
if
(
window
.
location
.
href
.
search
(
/duplicates
\.
xul
\?
.+/
)
!=
-
1
)
dataURL
=
window
.
location
.
href
.
replace
(
/
(
duplicates
\.
jar!
\/)?
duplicates
\.
xul
\?
/
,
"duplicates.cgi?ctype=rdf&"
);
// Get the data source and add it to the XUL tree's database to populate
// the tree with the data.
var
dataSource
=
rdfService
.
GetDataSource
(
dataURL
);
// If we're using the static file, add an observer that detects failed loads
// (in case this installation isn't generating the file nightly) and redirects
// to the CGI version when loading of the static version fails.
if
(
window
.
location
.
href
.
search
(
/duplicates
\.
xul
\?
.+/
)
==
-
1
)
{
var
sink
=
dataSource
.
QueryInterface
(
Components
.
interfaces
.
nsIRDFXMLSink
);
sink
.
addXMLSinkObserver
(
StaticDataSourceObserver
);
}
// Add the data source to the tree, set the tree's "ref" attribute
// to the base URL of the data source, and rebuild the tree.
var
resultsTree
=
document
.
getElementById
(
'results-tree'
);
resultsTree
.
database
.
AddDataSource
(
dataSource
);
resultsTree
.
setAttribute
(
'ref'
,
gBaseURL
+
"data/duplicates.rdf"
);
resultsTree
.
builder
.
rebuild
();
}
function
getBugURI
()
{
var
tree
=
document
.
getElementById
(
'results-tree'
);
var
index
=
tree
.
currentIndex
;
netscape
.
security
.
PrivilegeManager
.
enablePrivilege
(
"UniversalXPConnect"
);
var
builder
=
tree
.
builder
.
QueryInterface
(
Components
.
interfaces
.
nsIXULTreeBuilder
);
var
resource
=
builder
.
getResourceAtIndex
(
index
);
return
resource
.
Value
;
}
function
loadBugInWindow
()
{
// Loads the selected bug in the browser window, replacing the duplicates report
// with the bug report.
var
bugURI
=
getBugURI
();
window
.
location
=
bugURI
;
}
function
loadBugInPane
()
{
// Loads the selected bug in the iframe-based content pane that is part of
// this XUL document.
var
splitter
=
document
.
getElementById
(
'report-content-splitter'
);
var
state
=
splitter
.
getAttribute
(
'state'
);
if
(
state
!=
"collapsed"
)
{
var
bugURI
=
getBugURI
();
var
browser
=
document
.
getElementById
(
'content-browser'
);
browser
.
setAttribute
(
'src'
,
bugURI
);
}
}
var
StaticDataSourceObserver
=
{
onBeginLoad
:
function
(
aSink
)
{
}
,
onInterrupt
:
function
(
aSink
)
{
}
,
onResume
:
function
(
aSink
)
{
}
,
onEndLoad
:
function
(
aSink
)
{
// Removes the observer from the data source so it doesn't stay around
// when duplicates.xul is reloaded from scratch.
netscape
.
security
.
PrivilegeManager
.
enablePrivilege
(
"UniversalXPConnect"
);
aSink
.
removeXMLSinkObserver
(
StaticDataSourceObserver
);
}
,
onError
:
function
(
aSink
,
aStatus
,
aErrorMsg
)
{
// Tries the dynamic data source since the static one failed to load.
netscape
.
security
.
PrivilegeManager
.
enablePrivilege
(
"UniversalXPConnect"
);
// Get the RDF service so we can use it to load the data source.
var
rdfService
=
Components
.
classes
[
"@mozilla.org/rdf/rdf-service;1"
]
.
getService
(
Components
.
interfaces
.
nsIRDFService
);
// Remove the observer from the data source so it doesn't stay around
// when duplicates.xul is reloaded from scratch.
aSink
.
removeXMLSinkObserver
(
StaticDataSourceObserver
);
// Remove the static data source from the tree.
var
oldDataSource
=
aSink
.
QueryInterface
(
Components
.
interfaces
.
nsIRDFDataSource
);
var
resultsTree
=
document
.
getElementById
(
'results-tree'
);
resultsTree
.
database
.
RemoveDataSource
(
oldDataSource
);
// Munge the URL to point to the CGI and load the data source.
var
dataURL
=
gBaseURL
+
"duplicates.cgi?ctype=rdf"
;
newDataSource
=
rdfService
.
GetDataSource
(
dataURL
);
// Add the data source to the tree and rebuild the tree with the new data.
resultsTree
.
database
.
AddDataSource
(
newDataSource
);
resultsTree
.
builder
.
rebuild
();
}
};
skins/standard/duplicates.css
0 → 100644
View file @
6a64cd59
/* 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.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Myk Melez <myk@mozilla.org>
*/
treechildren
:-moz-tree-cell-text
(
resolution-FIXED
)
{
text-decoration
:
line-through
;
}
treecol
#id_column
{
width
:
6em
;
}
treecol
#duplicate_count_column
{
width
:
5em
;
}
treecol
#duplicate_delta_column
{
width
:
5em
;
}
template/en/default/reports/duplicates.rdf.tmpl
0 → 100644
View file @
6a64cd59
[% template_version = "1.0@bugzilla.org" %]
[%# 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.
#
# The Initial Developer of the Original Code is Netscape Communications
# Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): Myk Melez <myk@mozilla.org>
#%]
<?xml version="1.0"?>
<!-- [% template_version %] -->
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:bz="http://www.bugzilla.org/rdf#"
xmlns:nc="http://home.netscape.com/NC-rdf#">
<bz:duplicates_report rdf:about="[% Param('urlbase') %]data/duplicates.rdf">
<bz:bugs>
<Seq>
[% FOREACH bug = bugs %]
<li>
<bz:bug rdf:about="[% Param('urlbase') %]show_bug.cgi?id=[% bug.id %]">
<bz:id nc:parseType="Integer">[% bug.id %]</bz:id>
<bz:resolution>[% bug.resolution FILTER html %]</bz:resolution>
<bz:duplicate_count nc:parseType="Integer">[% bug.count %]</bz:duplicate_count>
<bz:duplicate_delta nc:parseType="Integer">[% bug.delta %]</bz:duplicate_delta>
<bz:component>[% bug.component FILTER html %]</bz:component>
<bz:severity>[% bug.bug_severity FILTER html %]</bz:severity>
<bz:os>[% bug.op_sys FILTER html %]</bz:os>
<bz:target_milestone>[% bug.target_milestone FILTER html %]</bz:target_milestone>
<bz:summary>[% bug.short_desc FILTER html %]</bz:summary>
</bz:bug>
</li>
[% END %]
</Seq>
</bz:bugs>
</bz:duplicates_report>
</RDF>
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