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
c62ddd06
Commit
c62ddd06
authored
Nov 25, 2009
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 530252: Create a script that sets up the framework of an extension
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat
parent
74060782
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
345 additions
and
4 deletions
+345
-4
Filesystem.pm
Bugzilla/Install/Filesystem.pm
+1
-0
create.pl
extensions/create.pl
+85
-0
008filter.t
t/008filter.t
+1
-1
Files.pm
t/Support/Files.pm
+1
-0
config.pm.tmpl
template/en/default/extensions/config.pm.tmpl
+41
-0
extension.pm.tmpl
template/en/default/extensions/extension.pm.tmpl
+46
-0
hook-readme.txt.tmpl
template/en/default/extensions/hook-readme.txt.tmpl
+27
-0
license.txt.tmpl
template/en/default/extensions/license.txt.tmpl
+47
-0
name-readme.txt.tmpl
template/en/default/extensions/name-readme.txt.tmpl
+38
-0
util.pm.tmpl
template/en/default/extensions/util.pm.tmpl
+42
-0
messages.html.tmpl
template/en/default/global/messages.html.tmpl
+5
-0
user-error.html.tmpl
template/en/default/global/user-error.html.tmpl
+11
-3
No files found.
Bugzilla/Install/Filesystem.pm
View file @
c62ddd06
...
@@ -130,6 +130,7 @@ sub FILESYSTEM {
...
@@ -130,6 +130,7 @@ sub FILESYSTEM {
"$datadir/bugzilla-update.xml"
=>
{
perms
=>
$ws_writeable
},
"$datadir/bugzilla-update.xml"
=>
{
perms
=>
$ws_writeable
},
"$datadir/params"
=>
{
perms
=>
$ws_writeable
},
"$datadir/params"
=>
{
perms
=>
$ws_writeable
},
"$datadir/mailer.testfile"
=>
{
perms
=>
$ws_writeable
},
"$datadir/mailer.testfile"
=>
{
perms
=>
$ws_writeable
},
"$extensionsdir/create.pl"
=>
{
perms
=>
$owner_executable
},
);
);
# Directories that we want to set the perms on, but not
# Directories that we want to set the perms on, but not
...
...
extensions/create.pl
0 → 100644
View file @
c62ddd06
#!/usr/bin/perl -w
#
# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
use
strict
;
use
lib
qw(. lib)
;
use
Bugzilla
;
use
Bugzilla::
Constants
;
use
Bugzilla::
Error
;
use
Bugzilla::
Util
qw(get_text)
;
use
File::
Path
qw(mkpath)
;
use
DateTime
;
my
$base_dir
=
bz_locations
()
->
{
'extensionsdir'
};
my
$name
=
$ARGV
[
0
]
or
ThrowUserError
(
'extension_create_no_name'
);
if
(
$name
!~
/^[A-Z]/
)
{
ThrowUserError
(
'extension_first_letter_caps'
,
{
name
=>
$name
});
}
my
$extension_dir
=
"$base_dir/$name"
;
mkpath
(
$extension_dir
)
||
die
"$extension_dir already exists or cannot be created.\n"
;
my
$lcname
=
lc
(
$name
);
foreach
my
$path
(
qw(lib template/en/default/hook)
,
"template/en/default/$lcname"
)
{
mkpath
(
"$extension_dir/$path"
)
||
die
"$extension_dir/$path: $!"
;
}
my
$year
=
DateTime
->
now
()
->
year
;
my
$template
=
Bugzilla
->
template
;
my
$vars
=
{
year
=>
$year
,
name
=>
$name
,
path
=>
$extension_dir
};
my
%
create_files
=
(
'config.pm.tmpl'
=>
'Config.pm'
,
'extension.pm.tmpl'
=>
'Extension.pm'
,
'util.pm.tmpl'
=>
'lib/Util.pm'
,
'hook-readme.txt.tmpl'
=>
'template/en/default/hook/README'
,
'name-readme.txt.tmpl'
=>
"template/en/default/$lcname/README"
,
);
foreach
my
$template_file
(
keys
%
create_files
)
{
my
$target
=
$create_files
{
$template_file
};
my
$output
;
$template
->
process
(
"extensions/$template_file"
,
$vars
,
\
$output
)
or
ThrowTemplateError
(
$template
->
error
());
open
(
my
$fh
,
'>'
,
"$extension_dir/$target"
);
print
$fh
$output
;
close
(
$fh
);
}
print
get_text
(
'extension_created'
,
$vars
),
"\n"
;
__END__
=head1 NAME
extensions/create.pl - Create a framework for a new Bugzilla Extension.
=head1 SYNOPSIS
extensions/create.pl NAME
Creates a framework for an extension called NAME in the F<extensions/>
directory.
t/008filter.t
View file @
c62ddd06
...
@@ -96,7 +96,7 @@ foreach my $path (@Support::Templates::include_paths) {
...
@@ -96,7 +96,7 @@ foreach my $path (@Support::Templates::include_paths) {
foreach
my
$file
(
@testitems
)
{
foreach
my
$file
(
@testitems
)
{
# There are some files we don't check, because there is no need to
# There are some files we don't check, because there is no need to
# filter their contents due to their content-type.
# filter their contents due to their content-type.
if
(
$file
=~
/\.(txt|png)\.tmpl$/
)
{
if
(
$file
=~
/\.(
pm|
txt|png)\.tmpl$/
)
{
ok
(
1
,
"($lang/$flavor) $file is filter-safe"
);
ok
(
1
,
"($lang/$flavor) $file is filter-safe"
);
next
;
next
;
}
}
...
...
t/Support/Files.pm
View file @
c62ddd06
...
@@ -29,6 +29,7 @@ use File::Find;
...
@@ -29,6 +29,7 @@ use File::Find;
@files
=
glob
(
'*'
);
@files
=
glob
(
'*'
);
find
(
sub
{
push
(
@files
,
$
File::Find::
name
)
if
$_
=~
/\.pm$/
;},
'Bugzilla'
);
find
(
sub
{
push
(
@files
,
$
File::Find::
name
)
if
$_
=~
/\.pm$/
;},
'Bugzilla'
);
push
(
@files
,
'extensions/create.pl'
);
sub
isTestingFile
{
sub
isTestingFile
{
my
(
$file
)
=
@_
;
my
(
$file
)
=
@_
;
...
...
template/en/default/extensions/config.pm.tmpl
0 → 100644
View file @
c62ddd06
[
%
# -*- mode: perl -*- %]
[
%
# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[
%
# INTERFACE:
# name: string; The name of the extension.
#%]
[
%
PROCESS
global
/
variables
.
none
.
tmpl
%
]
[
%
PROCESS
extensions
/
license
.
txt
.
tmpl
%
]
package
B
[
%
%
]
ugzilla::Extension::
[
%
name
%
];
use
strict
;
use
constant
NAME
=>
'[% name %]'
;
use
constant
REQUIRED_MODULES
=>
[
];
use
constant
OPTIONAL_MODULES
=>
[
];
__PACKAGE__
->
NAME
;
template/en/default/extensions/extension.pm.tmpl
0 → 100644
View file @
c62ddd06
[
%
# -*- mode: perl -*- %]
[
%
# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[
%
# INTERFACE:
# name: string; The name of the extension.
#%]
[
%
PROCESS
global
/
variables
.
none
.
tmpl
%
]
[
%
PROCESS
extensions
/
license
.
txt
.
tmpl
%
]
package
B
[
%
%
]
ugzilla::Extension::
[
%
name
%
];
use
strict
;
use
base
qw(B[% %]ugzilla::Extension)
;
# This code for this is in [% path %]/lib/Util.pm
use
B
[
%
%
]
ugzilla::Extension::
[
%
name
%
]
::
Util
;
our
$VERSION
=
'0.01'
;
# See the documentation of B[% %]ugzilla::Hook ("perldoc B[% %]ugzilla::Hook"
# in the bugzilla directory) for a list of all available hooks.
sub
install_update_db
{
my
(
$self
,
$args
)
=
@_
;
}
__PACKAGE__
->
NAME
;
template/en/default/extensions/hook-readme.txt.tmpl
0 → 100644
View file @
c62ddd06
[%# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% PROCESS global/variables.none.tmpl %]
Template hooks go in this directory. Template hooks are called in normal
[%+ terms.Bugzilla %] templates like [[% '%' %] Hook.process('some-hook') %].
More information about them can be found in the documentation of
B[% %]ugzilla::Extension. (Do "perldoc B[% %]ugzilla::Extension" from the main
[%+ terms.Bugzilla %] directory to see that documentation.)
template/en/default/extensions/license.txt.tmpl
0 → 100644
View file @
c62ddd06
[
%
# -*- mode: perl -*- %]
[
%
# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[
%
# INTERFACE:
# name: string; The name of the extension.
#%]
[
%
PROCESS
global
/
variables
.
none
.
tmpl
%
]
# -*- 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 [% name %] [%+ terms.Bugzilla %] Extension.
#
# The Initial Developer of the Original Code is YOUR NAME
# Portions created by the Initial Developer are Copyright (C) [% year %] the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# YOUR NAME <YOUR EMAIL ADDRESS>
template/en/default/extensions/name-readme.txt.tmpl
0 → 100644
View file @
c62ddd06
[%# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% PROCESS global/variables.none.tmpl %]
Normal templates go in this directory. You can load them in your
code like this:
use B[% %]ugzilla::Error;
my $template = B[% %]ugzilla->template;
$template->process('[% name FILTER lower %]/some-template.html.tmpl')
or ThrowTemplateError($template->error());
That would be how to load a file called some-template.html.tmpl that
was in this directory.
Note that you have to be careful that the full path of your template
never conflicts with a template that exists in [% terms.Bugzilla %] or in
another extension, or your template might override that template. That's why
we created this directory called '[% name FILTER lower %]' for you, so you
can put your templates in here to help avoid conflicts.
template/en/default/extensions/util.pm.tmpl
0 → 100644
View file @
c62ddd06
[
%
# -*- mode: perl -*- %]
[
%
# 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 Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[
%
# INTERFACE:
# name: string; The name of the extension.
#%]
[
%
PROCESS
global
/
variables
.
none
.
tmpl
%
]
[
%
PROCESS
extensions
/
license
.
txt
.
tmpl
%
]
package
B
[
%
%
]
ugzilla::Extension::
[
%
name
%
];
use
strict
;
use
base
qw(Exporter)
;
our
@EXPORT
=
qw(
)
;
# This file can be loaded by your extension via
# "use B[% %]ugzilla::Extension::[% name %]::Util". You can put functions
# used by your extension in here. (Make sure you also list them in
# @EXPORT.)
1
;
template/en/default/global/messages.html.tmpl
View file @
c62ddd06
...
@@ -281,6 +281,11 @@
...
@@ -281,6 +281,11 @@
[%+ new_email FILTER html %] has been canceled.
[%+ new_email FILTER html %] has been canceled.
Your old account settings have been reinstated.
Your old account settings have been reinstated.
[% ELSIF message_tag == "extension_created" %]
An extension named [% name FILTER html %] has been created
in [% path FILTER html %]. Make sure you change "YOUR NAME" and
"YOUR EMAIL ADDRESS" in the code to your name and your email address.
[% ELSIF message_tag == "field_value_created" %]
[% ELSIF message_tag == "field_value_created" %]
[% title = "New Field Value Created" %]
[% title = "New Field Value Created" %]
The value <em>[% value.name FILTER html %]</em> has been added as a
The value <em>[% value.name FILTER html %]</em> has been added as a
...
...
template/en/default/global/user-error.html.tmpl
View file @
c62ddd06
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#
#
# Contributor(s): Gervase Markham <gerv@gerv.net>
# Contributor(s): Gervase Markham <gerv@gerv.net>
# Frédéric Buclin <LpSolit@gmail.com>
# Frédéric Buclin <LpSolit@gmail.com>
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
#%]
[%# INTERFACE:
[%# INTERFACE:
...
@@ -32,10 +33,10 @@
...
@@ -32,10 +33,10 @@
# in this file; if you do not wish to change it, use the "none" filter.
# in this file; if you do not wish to change it, use the "none" filter.
#
#
# Extension- or custom-specific error handling can be easily added
# Extension- or custom-specific error handling can be easily added
# via hooks: just place
your <extension>-errors.html.tmpl into
# via hooks: just place
additional code into
# template/en/
extension/hook/global/user-error.html.tmpl/errors/
# template/en/
hook/global/user-error-errors.html.tmpl
# Note: be aware of uniqueness of error string parameter value, since
# Note: be aware of uniqueness of error string parameter value, since
# nobody can guarantee the hook files processing order in the future
# nobody can guarantee the hook files processing order in the future
.
#%]
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/variables.none.tmpl %]
...
@@ -428,6 +429,13 @@
...
@@ -428,6 +429,13 @@
does not exist or you aren't authorized to
does not exist or you aren't authorized to
enter [% terms.abug %] into it.
enter [% terms.abug %] into it.
[% ELSIF error == "extension_create_no_name" %]
You must specify a name for your extension, as an argument to this script.
[% ELSIF error == "extension_first_letter_caps" %]
The first letter of your extension's name must be a capital letter.
(You specified '[% name FILTER html %]'.)
[% ELSIF error == "field_already_exists" %]
[% ELSIF error == "field_already_exists" %]
[% title = "Field Already Exists" %]
[% title = "Field Already Exists" %]
The field '[% field.name FILTER html %]'
The field '[% field.name FILTER html %]'
...
...
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