diff options
Diffstat (limited to 'extensions/MozProjectReview')
14 files changed, 1498 insertions, 0 deletions
diff --git a/extensions/MozProjectReview/Config.pm b/extensions/MozProjectReview/Config.pm new file mode 100644 index 000000000..5a9d2b730 --- /dev/null +++ b/extensions/MozProjectReview/Config.pm @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Extension::MozProjectReview; + +use strict; + +use constant NAME => 'MozProjectReview'; + +use constant REQUIRED_MODULES => [ +]; + +use constant OPTIONAL_MODULES => [ +]; + +__PACKAGE__->NAME; diff --git a/extensions/MozProjectReview/Extension.pm b/extensions/MozProjectReview/Extension.pm new file mode 100644 index 000000000..c7b6bdd36 --- /dev/null +++ b/extensions/MozProjectReview/Extension.pm @@ -0,0 +1,256 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Extension::MozProjectReview; + +use strict; + +use base qw(Bugzilla::Extension); + +use Bugzilla::User; +use Bugzilla::Group; +use Bugzilla::Error; +use Bugzilla::Constants; + +our $VERSION = '0.01'; + +sub post_bug_after_creation { + my ($self, $args) = @_; + my $vars = $args->{vars}; + my $bug = $vars->{bug}; + + my $user = Bugzilla->user; + my $params = Bugzilla->input_params; + my $template = Bugzilla->template; + + return if !($params->{format} + && $params->{format} eq 'moz-project-review' + && $bug->component eq 'Project Review'); + + my $error_mode_cache = Bugzilla->error_mode; + Bugzilla->error_mode(ERROR_MODE_DIE); + + # do a match if applicable + Bugzilla::User::match_field({ + 'legal_cc' => { 'type' => 'multi' } + }); + + my ($do_sec_review, $do_legal, $do_finance, $do_privacy_vendor, + $do_data_safety, $do_privacy_tech, $do_privacy_policy); + + if ($params->{mozilla_data} eq 'Yes') { + $do_legal = 1; + $do_privacy_policy = 1; + $do_privacy_tech = 1; + $do_sec_review = 1; + } + + if ($params->{mozilla_data} eq 'Yes' + && $params->{data_safety_user_data} eq 'Yes') + { + $do_data_safety = 1; + } + + if ($params->{new_or_change} eq 'New') { + $do_legal = 1; + $do_privacy_policy = 1; + } + elsif ($params->{new_or_change} eq 'Existing') { + $do_legal = 1; + } + + if ($params->{separate_party} eq 'Yes') { + $do_legal = 1; + } + + if ($params->{data_access} eq 'Yes') { + $do_privacy_policy = 1; + $do_sec_review = 1; + } + + if ($params->{data_access} eq 'Yes' + && $params->{'privacy_policy_vendor_user_data'} eq 'Yes') + { + $do_privacy_vendor = 1; + } + + if ($params->{vendor_cost} eq '> $25,000') { + $do_finance = 1; + } + + my ($sec_review_bug, $legal_bug, $finance_bug, $privacy_vendor_bug, + $data_safety_bug, $privacy_tech_bug, $privacy_policy_bug); + + eval { + if ($do_sec_review) { + my $bug_data = { + short_desc => 'Security Review for ' . $bug->short_desc, + product => 'mozilla.org', + component => 'Security Assurance: Review Request', + bug_severity => 'normal', + groups => [ 'mozilla-corporation-confidential' ], + keywords => 'sec-review-needed', + op_sys => 'All', + rep_platform => 'All', + version => 'other', + blocked => $bug->bug_id, + }; + $sec_review_bug = _file_child_bug($bug, $vars, 'sec-review', $bug_data); + } + + if ($do_legal) { + my $component; + if ($params->{new_or_change} eq 'New') { + $component = 'General'; + } + elsif ($params->{new_or_change} eq 'Existing') { + $component = $params->{mozilla_project}; + } + + if ($params->{separate_party} eq 'Yes' + && $params->{relationship_type}) + { + $component = $params->{relationship_type} eq 'unspecified' + ? 'General' + : $params->{relationship_type}; + } + + my $bug_data = { + short_desc => 'Complete Legal Review for ' . $bug->short_desc, + product => 'Legal', + component => $component, + bug_severity => 'normal', + priority => '--', + groups => [ 'legal' ], + op_sys => 'All', + rep_platform => 'All', + version => 'unspecified', + blocked => $bug->bug_id, + cc => $params->{'legal_cc'}, + }; + $legal_bug = _file_child_bug($bug, $vars, 'legal', $bug_data); + + } + + if ($do_finance) { + my $bug_data = { + short_desc => 'Complete Finance Review for ' . $bug->short_desc, + product => 'Finance', + component => 'Purchase Request Form', + bug_severity => 'normal', + priority => '--', + groups => [ 'finance' ], + op_sys => 'All', + rep_platform => 'All', + version => 'unspecified', + blocked => $bug->bug_id, + }; + $finance_bug = _file_child_bug($bug, $vars, 'finance', $bug_data); + } + + if ($do_data_safety) { + my $bug_data = { + short_desc => 'Data Safety Review for ' . $bug->short_desc, + product => 'Data Safety', + component => 'General', + bug_severity => 'normal', + priority => '--', + groups => [ 'mozilla-corporation-confidential' ], + op_sys => 'All', + rep_platform => 'All', + version => 'unspecified', + blocked => $bug->bug_id, + }; + $data_safety_bug = _file_child_bug($bug, $vars, 'data-safety', $bug_data); + } + + if ($do_privacy_tech) { + my $bug_data = { + short_desc => 'Complete Privacy-Technical Review for ' . $bug->short_desc, + product => 'mozilla.org', + component => 'Security Assurance: Review Request', + bug_severity => 'normal', + priority => '--', + keywords => 'privacy-review-needed', + groups => [ 'mozilla-corporation-confidential' ], + op_sys => 'All', + rep_platform => 'All', + version => 'other', + blocked => $bug->bug_id, + }; + $privacy_tech_bug = _file_child_bug($bug, $vars, 'privacy-tech', $bug_data); + } + + if ($do_privacy_policy) { + my $bug_data = { + short_desc => 'Complete Privacy-Policy Review for ' . $bug->short_desc, + product => 'Privacy', + component => 'Privacy Review', + bug_severity => 'normal', + priority => '--', + groups => [ 'mozilla-corporation-confidential' ], + op_sys => 'All', + rep_platform => 'All', + version => 'unspecified', + blocked => $bug->bug_id, + }; + $privacy_policy_bug = _file_child_bug($bug, $vars, 'privacy-policy', $bug_data); + } + + if ($do_privacy_vendor) { + my $bug_data = { + short_desc => 'Complete Privacy / Vendor Review for ' . $bug->short_desc, + product => 'Privacy', + component => 'Vendor Review', + bug_severity => 'normal', + priority => '--', + groups => [ 'mozilla-corporation-confidential' ], + op_sys => 'All', + rep_platform => 'All', + version => 'unspecified', + blocked => $bug->bug_id, + }; + $privacy_vendor_bug = _file_child_bug($bug, $vars, 'privacy-vendor', $bug_data); + } + }; + + my $error = $@; + Bugzilla->error_mode($error_mode_cache); + + if ($error + || ($do_legal && !$legal_bug) + || ($do_sec_review && !$sec_review_bug) + || ($do_finance && !$finance_bug) + || ($do_data_safety && !$data_safety_bug) + || ($do_privacy_tech && !$privacy_tech_bug) + || ($do_privacy_policy && !$privacy_policy_bug) + || ($do_privacy_vendor && !$privacy_vendor_bug)) + { + warn "Failed to create additional moz-project-review bugs: $error" if $error; + $vars->{message} = 'moz_project_review_creation_failed'; + $vars->{message_error} = $error; + } +} + +sub _file_child_bug { + my ($parent_bug, $vars, $template_suffix, $bug_data) = @_; + my $template = Bugzilla->template; + my $comment = ""; + + my $full_template = "bug/create/comment-moz-project-review-$template_suffix.txt.tmpl"; + $template->process($full_template, $vars, \$comment) + || ThrowTemplateError($template->error()); + + $bug_data->{comment} = $comment; + my $new_bug = Bugzilla::Bug->create($bug_data); + + $parent_bug->set_all({ dependson => { add => [ $new_bug->bug_id ] }}); + Bugzilla::BugMail::Send($new_bug->id, { changer => Bugzilla->user }); + + return $new_bug; +} + +__PACKAGE__->NAME; diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-data-safety.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-data-safety.txt.tmpl new file mode 100644 index 000000000..5a6ffbbbd --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-data-safety.txt.tmpl @@ -0,0 +1,40 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Data Safety Questions: + +User Data: [% cgi.param('data_safety_user_data') %] +How many involved?: [% cgi.param('data_safety_user_count') %] +How many users do you anticipate to be involved?: [% cgi.param('data_safety_user_count_anticipated') %] +Type of Data: +[%+ cgi.param('data_safety_data_type') %] +Data Reason: +[%+ cgi.param('data_safety_data_reason') %] +Community Benefit: +[%+ cgi.param('data_safety_community_benefit') %] +Data Collection: +[%+ cgi.param('data_safety_community_collection') %] +Data Retention: [% cgi.param('data_safety_retention') %] +Data Retention Length: [% cgi.param('data_safety_retention_length') %] +Separate Party: [% cgi.param('data_safety_separate_party') %] +Separate Party Data Type: +[%+ cgi.param('data_safety_separate_party_data') %] +Separate Party Data Communication: +[%+ cgi.param('data_safety_separate_party_data_communication') %] +Who are the separate parties?: +[%+ cgi.param('data_safety_separate_party_who') %] +Community Visibility and Input: [% cgi.param('data_safety_community_visibility') %] +Communication Channels: +[%+ cgi.param('data_safety_communication_channels') %] +Public Communication Plan: +[%+ cgi.param('data_safety_communication_plan') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-finance.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-finance.txt.tmpl new file mode 100644 index 000000000..99691c287 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-finance.txt.tmpl @@ -0,0 +1,31 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Finance Questions: + +Vendor: [% cgi.param('finance_purchase_vendor') %] +Is this line item in budget?: [% cgi.param('finance_purchase_inbudget') %] +[% IF cgi.param('finance_purchase_inbudget') == 'No' %] +Not In Budget Why: +[%+ cgi.param('finance_purchase_notinbudget_why') %] +[% END %] +What is the purchase for?: +[%+ cgi.param('finance_purchase_what') %] +Why is the purchase needed?: +[%+ cgi.param('finance_purchase_why') %] +What is the risk if not purchased?: +[%+ cgi.param('finance_purchase_risk') %] +What is the alternative?: +[%+ cgi.param('finance_purchase_alternative') %] +What is the urgency?: [% cgi.param('finance_purchase_urgency') %] +Total Cost: [% cgi.param('finance_purchase_cost') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-legal.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-legal.txt.tmpl new file mode 100644 index 000000000..9f3f98328 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-legal.txt.tmpl @@ -0,0 +1,30 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Legal Questions: + +Priority: [% cgi.param('legal_priority') %] +Other Party: [% cgi.param('legal_other_party') %] +Business Objective: [% cgi.param('legal_business_objective') %] +URL: [% cgi.param('legal_url') %] +SOW Details: [% cgi.param('legal_sow_details') %] +[% IF cgi.param('legal_vendor_services_where') %] +Vendor Services from Where: +[% IF cgi.param('legal_vendor_services_where') == 'A single country' %] +[%- cgi.param('legal_vendor_single_country') %] +[% ELSE %] +[%- cgi.param('legal_vendor_services_where') %] +[% END %] +[% END %] +Description: +[%+ cgi.param('legal_description') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-policy.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-policy.txt.tmpl new file mode 100644 index 000000000..816834c40 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-policy.txt.tmpl @@ -0,0 +1,18 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Privacy Policy: [% cgi.param('privacy_policy_project') %] +Privacy Policy Link: [% cgi.param('privacy_policy_project_link') %] +User Data: [% cgi.param('privacy_policy_user_data') %] +Data Safety [% terms.Bug %] ID: [% cgi.param('privacy_policy_user_data_bug') %] +Legal [% terms.Bug %] ID: [% cgi.param('privacy_policy_legal_bug') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-tech.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-tech.txt.tmpl new file mode 100644 index 000000000..7b72cf1bc --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-tech.txt.tmpl @@ -0,0 +1,12 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-vendor.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-vendor.txt.tmpl new file mode 100644 index 000000000..eaf9f12e3 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-privacy-vendor.txt.tmpl @@ -0,0 +1,16 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Privacy Policy: [% cgi.param('privacy_policy_vendor_user_data') %] +Vendor's Privacy Policy: [% cgi.param('privacy_policy_vendor_link') %] +Privacy Questionnaire: [% cgi.param('privacy_policy_vendor_questionnaire') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-sec-review.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-sec-review.txt.tmpl new file mode 100644 index 000000000..029f6df48 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review-sec-review.txt.tmpl @@ -0,0 +1,20 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS "bug/create/comment-moz-project-review.txt.tmpl" %] + +Security Review Questions: + +Affects Products: [% cgi.param('sec_affects_products') %] +Review Due Date: [% cgi.param('sec_review_date') %] +Review Invitees: [% cgi.param('sec_review_invitees') %] +Extra Information: +[%+ cgi.param('sec_review_extra') %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review.txt.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review.txt.tmpl new file mode 100644 index 000000000..66ab024fe --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/comment-moz-project-review.txt.tmpl @@ -0,0 +1,36 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +Initial Questions: + +Project/Feature Name: [% cgi.param('short_desc') %] +Tracking [% terms.Bug %] ID:[% cgi.param('tracking_id') %] +Description: +[%+ cgi.param('description') %] +Additional Information: +[%+ cgi.param('additional') %] +Urgency: [% cgi.param('urgency') %] +Key Initiative: [% cgi.param('key_initiative') == 'Other' + ? cgi.param('key_initiative_other') + : cgi.param('key_initiative') %] +Release Date: [% cgi.param('release_date') %] +Project Status: [% cgi.param('project_status') %] +Mozilla Data: [% cgi.param('mozilla_data') %] +New or Change: [% cgi.param('new_or_change') %] +Mozilla Project: [% cgi.param('mozilla_project') %] +Mozilla Related: [% cgi.param('mozilla_related') %] +Separate Party: [% cgi.param('separate_party') %] +[% IF cgi.param('separate_part') == 'Yes' %] +Type of Relationship: [% cgi.param('relationship_type') %] +Data Access: [% cgi.param('data_access') %] +Privacy Policy: [% cgi.param('privacy_policy') %] +Vendor Cost: [% cgi.param('vendor_cost') %] +[% END %] diff --git a/extensions/MozProjectReview/template/en/default/bug/create/create-moz-project-review.html.tmpl b/extensions/MozProjectReview/template/en/default/bug/create/create-moz-project-review.html.tmpl new file mode 100644 index 000000000..df8966bbb --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/bug/create/create-moz-project-review.html.tmpl @@ -0,0 +1,779 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Mozilla Project Review" + style_urls = [ 'extensions/MozProjectReview/web/style/moz_project_review.css' ] + javascript_urls = [ 'js/field.js', 'js/util.js', + 'extensions/MozProjectReview/web/js/moz_project_review.js' ] + yui = [ 'autocomplete', 'calendar' ] +%] + +<p> + <strong>Please use this form for submitting a Mozilla Project Review</strong> + If you have a [% terms.bug %] to file, go <a href="enter_bug.cgi">here</a>. +</p> + +<p> + (<span class="required_star">*</span> = + <span class="required_explanation">Required Field</span>) +</p> + +<form method="post" action="post_bug.cgi" id="incidentForm" enctype="multipart/form-data" + onSubmit="return MPR.validateAndSubmit();"> + <input type="hidden" id="product" name="product" value="mozilla.org"> + <input type="hidden" id="component" name="component" value="Project Review"> + <input type="hidden" id="rep_platform" name="rep_platform" value="All"> + <input type="hidden" id="groups" name="groups" value="mozilla-corporation-confidential"> + <input type="hidden" id="op_sys" name="op_sys" value="All"> + <input type="hidden" id="priority" name="priority" value="--"> + <input type="hidden" id="version" name="version" value="other"> + <input type="hidden" id="format" name="format" value="moz-project-review"> + <input type="hidden" id="bug_severity" name="bug_severity" value="normal"> + <input type="hidden" id="token" name="token" value="[% token FILTER html %]"> + + <div id="initial_questions"> + <div class="header">Initial Questions</div> + + <div id="project_feature_summary_row" class="field_row"> + <span class="field_label required">Project/Feature Name:</span> + <span class="field_data"> + <input type="text" name="short_desc" id="short_desc" size="60" maxsize="255"> + </span> + </div> + + <div id="tracking_id_row" class="field_row"> + <span class="field_label">Tracking [% terms.Bug %] ID:</span> + <span class="field_data"> + <div class="field_description">Master tracking [% terms.bug %] number (if it exists)?</div> + <input type="text" name="tracking_id" id="tracking_id" size="60"> + </span> + </div> + + <div id="contacts_row" class="field_row"> + <span class="field_label required">Points of Contact:</span> + <span class="field_data"> + <div class="field_description">Who are the points of contact for this review?</div> + [% INCLUDE global/userselect.html.tmpl + id => "cc" + name => "cc" + value => "" + size => 60 + classes => ["bz_userfield"] + multiple => 5 + %] + </span> + </div> + + <div id="description_row" class="field_row"> + <span class="field_label required">Description:</span> + <span class="field_data"> + <div class="field_description">Please provide a short description of the feature / application / project / + business relationship (e.g. problem solved, use cases, etc.)</div> + <textarea name="description" id="description" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="additional_row" class="field_row"> + <span class="field_label">Additional Information:</span> + <span class="field_data"> + <div class="field_description">Please provide links to additional information (e.g. feature page, wiki) + if available and not yet included in feature description.)</div> + <textarea name="additional" id="additional" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="urgency_row" class="field_row"> + <span class="field_label required">Urgency:</span> + <span class="field_data"> + <div class="field_description">What is the urgency of this project?</div> + <select id="urgency" name="urgency"> + <option value="">Select One</option> + <option value="2 days">2 days</option> + <option value="a week">a week</option> + <option value="2-4 weeks">2-4 weeks</option> + <option value="no rush">no rush</option> + </select> + </span> + </div> + + <div id="key_initiative_row" class="field_row"> + <span class="field_label required">Key Initiative:</span> + <span class="field_data"> + <div class="field_description">Which key initiative does this support?</div> + <select name="key_initiative" id="key_initiative" + onchange="MPR.toggleVisibleById(this,'Other','key_initiative_other_row');"> + <option value="">Select One</option> + <option value="Firefox Desktop">Firefox Desktop</option> + <option value="Firefox Mobile">Firefox Mobile</option> + <option value="Firefox OS">Firefox OS</option> + <option value="Firefox Platform">Firefox Platform</option> + <option value="Marketplace / Apps">Marketplace / Apps</option> + <option value="Services: Persona">Services: Persona</option> + <option value="Services: WebRTC">Services: WebRTC</option> + <option value="Services: UP">Services: UP</option> + <option value="Services: Social API">Services: Social API</option> + <option value="Labs / Research / H3">Labs / Research / H3</option> + <option value="Product Support">Product Support</option> + <option value="Corp Support">Corp Support</option> + <option value="Other">Other</option> + </select> + </span> + </div> + + <div id="key_initiative_other_row" class="field_row bz_default_hidden"> + <span class="field_label"> </span> + <span class="field_data"> + <input type="text" name="key_initiative_other" id="key_initiative_other" size="60"> + </span> + </div> + + <div id="release_date_row" class="field_row"> + <span class="field_label">Release Date:</span> + <span class="field_data"> + <div class="field_description">What is your key release / launch date (if applicable)?</div> + <input name="release_date" size="20" id="release_date" value="" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_release_date" + onclick="showCalendar('release_date')"> + <span>Calendar</span> + </button> + <div id="con_calendar_release_date"></div> + <script type="text/javascript"> + createCalendar('release_date') + </script> + </span> + </div> + + <div id="project_status_row" class="field_row"> + <span class="field_label required">Project Status:</span> + <span class="field_data"> + <div class="field_description">What is the current state of your project?</div> + <select name="project_status" id="project_status"> + <option value="">Select One</option> + <option value="future">Future project under discussion</option> + <option value="active">Active planning</option> + <option value="development">Development</option> + <option value="ready">Ready to launch/commit</option> + <option value="launched">Already launched/committed</option> + </select> + </span> + </div> + + <div id="mozilla_data_row" class="field_row"> + <span class="field_label required">Mozilla Data:</span> + <span class="field_data"> + <div class="field_description">Does this product/service/project access, interact with, or store Mozilla + (customer, contributor, user, employee) data? Example of such data includes + email addresses, first and last name, addresses, phone numbers, credit card data.)</div> + <select name="mozilla_data" id="mozilla_data" + onchange="MPR.toggleSpecialSections();"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="new_or_change_row" class="field_row"> + <span class="field_label required">New or Change:</span> + <span class="field_data"> + <div class="field_description">Is this a NEW product, service, project, feature, or functionality, + a change to an EXISTING one, or neither?</div> + <select name="new_or_change" id="new_or_change" + onchange="MPR.toggleVisibleById(this,'Existing','mozilla_project_row');"> + <option value="">Select One</option> + <option value="New">New</option> + <option value="Existing">Existing</option> + <option value="Neither">Neither</option> + </select> + </span> + </div> + + <div id="mozilla_project_row" class="field_row bz_default_hidden"> + <span class="field_label">Mozilla Project:</span> + <span class="field_data"> + <div class="field_description">What product/service/project does this pertain to?</div> + <select name="mozilla_project" id="mozilla_project"> + <option value="none">None</option> + <option value="FirefoxOS">FirefoxOS</option> + <option value="Marketplace">Marketplace</option> + <option value="Persona">Persona</option> + <option value="Marketing Initiative">Marketing Initiative</option> + </select> + </span> + </div> + + <div id="mozilla_related_row" class="field_row"> + <span class="field_label">Mozilla Related:</span> + <span class="field_data"> + <div class="field_description">What Mozilla products/services/projects does this product/service/project + integrate with or relate to?</div> + <input type="text" name="mozilla_related" id="mozilla_related" size="60"> + </span> + </div> + + <div id="separate_party_row" class="field_row"> + <span class="field_label required">Separate Party:</span> + <span class="field_data"> + <div class="field_description"> Does this project involve a + relationship with another party (such as a third party vendor, hosted + service provider, consultant or strategic partner)? This includes MSAs, + Consulting Agreements, NDAs, click to accept, API agreements, open + source licenses, renewals, additional services or goods, and any other + agreements. + </div> + <select name="separate_party" id="separate_party" + onchange="MPR.toggleVisibleById(this,'Yes','initial_separate_party_questions'); + if (this.value == 'No') { + Dom.addClass('finance_questions','bz_default_hidden'); + if (Dom.get('mozilla_data').value != 'Yes') + Dom.addClass('legal_questions', 'bz_default_hidden'); + } + else { + Dom.removeClass('legal_questions', 'bz_default_hidden'); + MPR.toggleVisibleById('relationship_type','Hardware Purchase','finance_questions'); + }"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="initial_separate_party_questions" class="bz_default_hidden"> + <div id="relation_type_row" class="field_row"> + <span class="field_label required">Type of Relationship:</span> + <span class="field_data"> + <div class="field_description">What type of relationship?</div> + <select name="relationship_type" id="relationship_type" + onchange="MPR.toggleVisibleById(this, 'Vendor/Services', 'legal_sow_details_row'); + MPR.toggleVisibleById(this, 'Vendor/Services', 'legal_vendor_services_where_row'); + MPR.toggleVisibleById(this, 'Hardware Purchase', 'finance_questions'); + if (this.value == 'Hardware Purchase') Dom.addClass('legal_questions', 'bz_default_hidden'); + else if (Dom.get('separate_party').value == 'Yes' || Dom.get('mozilla_data').value == 'Yes') + Dom.removeClass('legal_questions', 'bz_default_hidden');"> + <option value="">Select One</option> + <option value="Vendor/Services">Vendor/Services</option> + <option value="Distribution/Bundling">Distribution/Bundling</option> + <option value="Hardware Purchase">Hardware Purchase</option> + <option value="Search">Search</option> + <option value="NDA">NDA</option> + <option value="Other">Other</option> + </select> + </span> + </div> + + <div id="data_access_row" class="field_row"> + <span class="field_label required">Data Access:</span> + <span class="field_data"> + <div class="field_description">Will the other party have access to Mozilla (customer, contributor, user, + employee) data? (If this is for an NDA, choose no)</div> + <select name="data_access" id="data_access" + onchange="MPR.toggleSpecialSections();"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="privacy_policy_row" class="field_row"> + <span class="field_label">Privacy Policy:</span> + <span class="field_data"> + <div class="field_description">What is the url for their privacy policy?</div> + <input type="text" name="privacy_policy" id="privacy_policy" size="60"> + </span> + </div> + + <div id="vendor_cost_row" class="field_row"> + <span class="field_label required">Vendor Cost:</span> + <span class="field_data"> + <div class="field_description">What is the anticipated cost of the vendor relationship? + (Entire Contract Cost, not monthly cost)</div> + <select name="vendor_cost" id="vendor_cost" + onchange="MPR.toggleVisibleById(this,'> $25,000','finance_questions');"> + <option value="">Select One</option> + <option value="N/A">N/A</option> + <option value="<= $25,000"><= $25,000</option> + <option value="> $25,000">> $25,000</option> + </select> + </span> + </div> + </div> + </div> + + <div id="sec_review_questions" class="bz_default_hidden"> + <div class="header">Security Review</div> + + <div id="sec_review_affects_products_row"> + <span class="field_label">Affects Products:</span> + <span class="field_data"> + <div class="field_description">Does this feature or code change affect Firefox, Thunderbird or any + product or service the Mozilla ships to end users?</div> + <select name="sec_affects_products" id="sec_affects_products"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="sec_review_date_row" class="field_row"> + <span class="field_label">Review Due Date:</span> + <span class="field_data"> + <div class="field_description">When would you like the review to be completed? + (<a href="https://mail.mozilla.com/home/ckoenig@mozilla.com/Security%20Review.html" + target="_blank">more info</a>)</div> + <input name="sec_review_date" size="20" id="sec_review_date" value="" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_sec_review_date" + onclick="showCalendar('sec_review_date')"> + <span>Calendar</span> + </button> + <div id="con_calendar_sec_review_date"></div> + <script type="text/javascript"> + createCalendar('sec_review_date') + </script> + </span> + </div> + + <div id="sec_review_invitees_row" class="field_row"> + <span class="field_label">Review Invitees:</span> + <span class="field_data"> + <div class="field_description">Whom should be invited to the review?</div> + <input type="text" name="sec_review_invitees" id="sec_review_invitees" size="60"> + </span> + </div> + + <div id="sec_review_extra_row" class="field_row"> + <span class="field_label">Extra Information:</span> + <span class="field_data"> + <div class="field_description">If you feel something is missing here or you would like to provide other + kind of feedback, feel free to do so here?</div> + <textarea name="sec_review_extra" id="sec_review_extra" rows="10" cols="80"></textarea> + </span> + </div> + </div> + + <div id="privacy_policy_project_questions" class="bz_default_hidden"> + <div class="header">Privacy (Policy/Project)</div> + + <div id="privacy_policy_project_row" class="field_row"> + <span class="field_label">Privacy Policy:</span> + <span class="field_data"> + <div class="field_description">Do you currently have a privacy policy for your project / site / product?</div> + <select name="privacy_policy_project" id="privacy_policy_project" + onchange="MPR.toggleVisibleById(this,'Yes','privacy_policy_project_link_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="privacy_policy_project_link_row" class="field_row bz_default_hidden"> + <span class="field_label">Privacy Policy Link:</span> + <span class="field_data"> + <div class="field_description">Please provide link to policy</div> + <input type="text" name="privacy_policy_project_link" id="privacy_policy_project_link" size="60"> + </span> + </div> + + <div id="privacy_policy_project_user_data_row" class="field_row"> + <span class="field_label">User Data:</span> + <span class="field_data"> + <div class="field_description">Does your product/service/project collect, use or maintain any user data?</div> + <select name="privacy_policy_user_data" id="privacy_policy_user_data" + onchange="MPR.toggleVisibleById(this,'Yes','privacy_policy_project_user_data_bug_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="privacy_policy_project_user_data_bug_row" class="bz_default_hidden"> + <span class="field_label">Data Safety [% terms.Bug %] ID:</span> + <span class="field_data"> + <div class="field_description">Please provide link to Data Safety [% terms.bug %]</div> + <input type="text" name="privacy_policy_user_data_bug" id="privacy_policy_user_data_bug" size="60"> + </span> + </div> + + <div id="privacy_policy_project_legal_bug_row" class="field_row"> + <span class="field_label">Legal [% terms.Bug %]:</span> + <span class="field_data"> + <div class="field_description">For reference, please provide link to related Legal [% terms.bug %] or enter + "not filed" if a legal [% terms.bug %] has not yet been filed.</div> + <input type="text" name="privacy_policy_legal_bug" id="privacy_policy_legal_bug" size="60"> + </span> + </div> + </div> + + <div id="privacy_policy_vendor_questions" class="bz_default_hidden"> + <div class="header">Privacy (Policy/Vendor)</div> + + <div id="privacy_policy_vendor_user_data_row" class="field_row"> + <span class="field_label">Privacy Policy:</span> + <span class="field_data"> + <div class="field_description">Will the vendor have access to Mozilla (customer, contributor, user, employee) data?</div> + <select name="privacy_policy_vendor_user_data" id="privacy_policy_vendor_user_data" + onchange="MPR.toggleVisibleById(this,'Yes','privacy_policy_vendor_extra');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="privacy_policy_vendor_extra" class="bz_default_hidden"> + <div id="privacy_policy_vendor_link_row" class="field_row"> + <span class="field_label">Vendor's Privacy Policy:</span> + <span class="field_data"> + <div class="field_description">Please provide link to vendor's privacy policy</div> + <input type="text" name="privacy_policy_vendor_link" id="privacy_policy_vendor_link" size="60"> + </span> + </div> + + <div id="privacy_policy_vendor_questionnaire_row" class="field_row"> + <span class="field_label">Privacy Questionnaire:</span> + <span class="field_data"> + <div class="field_description">Has vendor completed Mozilla Vendor Privacy Questionnaire?</div> + <select name="privacy_policy_vendor_questionnaire" id="privacy_policy_vendor_questionnaire"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + </div> + </div> + + <div id="legal_questions" class="bz_default_hidden"> + <div class="header">Legal</div> + + <div id="legal_priority_row" class="field_row"> + <span class="field_label required">Priority:</span> + <span class="field_data"> + <div class="field_description">Priority to your team</div> + <select name="legal_priority" id="legal_priority"> + <option value="">Select One</option> + <option value="high">High</option> + <option value="medium">Medium</option> + <option value="low">Low</option> + </select> + </span> + </div> + + <div id="legal_cc_row" class="field_row"> + <span class="field_label">Cc:</span> + <span class="field_data"> + [% INCLUDE global/userselect.html.tmpl + id => "legal_cc" + name => "legal_cc" + value => "" + size => 60 + classes => ["bz_userfield"] + multiple => 5 + %] + </span> + </div> + + <div id="legal_other_party_row" class="field_row"> + <span class="field_label">Other Party:</span> + <span class="field_data"> + <div class="field_description">Name of other party involved</div> + <input type="text" name="legal_other_party" id="legal_other_party" size="60"> + </span> + </div> + + <div id="legal_business_objective_row" class="field_row"> + <span class="field_label">Business Objective:</span> + <span class="field_data"> + <textarea name="legal_business_objective" id="legal_business_objective" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="legal_sow_details_row" class="class_row bz_default_hidden"> + <span class="field_label">SOW Details:</span> + <span class="field_data"> + <div class="field_description">If applicable</div> + <textarea name="legal_sow_details" id="legal_sow_details" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="legal_vendor_services_where_row" class="field_row bz_default_hidden"> + <span class="field_label required">Vendor Services Location:</span> + <span class="field_data"> + <div class="field_description">Where will the services primarily be provided?</div> + <select name="legal_vendor_services_where" id="legal_vendor_services_where"> + <option value="">Select One</option> + <option value="U.S.">U.S.</option> + <option value="Europe">Europe</option> + <option value="Canada">Canada</option> + <option value="Global">Global</option> + <option value="Another region of the world">Another region of the world</option> + <option value="A single country">A single country</option> + </select> + <br> + <input class="bz_default_hidden" type="text" + name="legal_vendor_single_country" id="legal_vendor_single_country" size="60"> + </span> + </div> + </div> + + <div id="finance_questions" class="bz_default_hidden"> + <div class="header">Finance</div> + + <div id="finance_purchase_vendor_row" class="field_row"> + <span class="field_label required">Vendor:</span> + <span class="field_data"> + <input type="text" name="finance_purchase_vendor" maxsize="255" size="60" id="finance_purchase_vendor"> + </span> + </div> + + <div id="finance_purchase_inbudget_row" class="field_row"> + <span class="field_label required">Is this line item in budget?:</span> + <span class="field_data"> + <select name="finance_purchase_inbudget" id="finance_purchase_inbudget" + onchange="MPR.toggleVisibleById(this, 'No', 'finance_purchase_notinbudget_why_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="finance_purchase_notinbudget_why_row" class="field_row bz_default_hidden"> + <span class="field_label required">Not In Budget Why:</span> + <span class="field_data"> + <em>Please include additional description for this out of budget line item</em><br> + <textarea name="finance_purchase_notinbudget_why" id="finance_purchase_notinbudget_why" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="finance_purchase_what_row" class="field_row"> + <span class="field_label required">What is the purchase for?:</span> + <span class="field_data"> + <textarea name="finance_purchase_what" id="finance_purchase_what" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="finance_purchase_why_row" class="field_row"> + <span class="field_label required">Why is the purchase needed?:</span> + <span class="field_data"> + <textarea name="finance_purchase_why" id="finance_purchase_why" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="finance_purchase_risk_row" class="field_row"> + <span class="field_label required">What is the risk<br>if not purchased?:</span> + <span class="field_data"> + <textarea name="finance_purchase_risk" id="finance_purchase_risk" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="finance_purchase_alternative_row" class="field_row"> + <span class="field_label required">What is the alternative?:</span> + <span class="field_data"> + <textarea name="finance_purchase_alternative" id="finance_purchase_alternative" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="finance_purchase_urgency_row" class="field_row"> + <span class="field_label required">When do the items need to be ordered by?:</span> + <span class="field_data"> + <select name="finance_purchase_urgency" id="finance_purchase_urgency"> + <option value="within 24 hours">within 24 hours</option> + <option value="1 to 3 days">1 to 3 days</option> + <option value="a week">a week</option> + <option value="no rush" selected>no rush</option> + </select> + </span> + </div> + + <div id="finance_purchase_cost_row" class="field_row"> + <span class="field_label required">Total Cost:</span> + <span class="field_data"> + <input type="text" name="finance_purchase_cost" id="finance_purchase_cost" size="60"> + </span> + </div> + </div> + + <div id="data_safety_questions" class="bz_default_hidden"> + <div class="header">Data Safety</div> + + <div id="data_safety_user_data_row" class="field_row"> + <span class="field_label">User Data:</span> + <span class="field_data"> + <div class="field_description">Does your project collect data from users?</div> + <select name="data_safety_user_data" id="data_safety_user_data" + onchange="MPR.toggleVisibleById(this,'Yes','data_safety_extra_questions');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="data_safety_extra_questions" class="bz_default_hidden"> + <div id="data_safety_user_count_row" class="field_row"> + <span class="field_label">How many involved?:</span> + <span class="field_data"> + <div class="field_description">How many users are currently involved?</div> + <input type="text" name="data_safety_user_count" id="data_safety_user_count" size="60"> + </span> + </div> + + <div id="data_safety_user_count_anticipated_row" class="field_row"> + <span class="field_label">How many antcipated?:</span> + <span class="field_data"> + <div class="field_description">How many users do you anticipate to be involved?</div> + <input type="text" name="data_safety_user_count_anticipated" id="data_safety_user_count_anticipated" size="60"> + </span> + </div> + + <div id="data_safety_data_type_row" class="field_row"> + <span class="field_label">Type of Data:</span> + <span class="field_data"> + <div class="field_description">Please provide examples of the types of user data you collect.</div> + <textarea name="data_safety_data_type" id="data_safety_data_type" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_data_reason_row" class="field_row"> + <span class="field_label">Data Reason:</span> + <span class="field_data"> + <div class="field_description">Why do you need to collect user data?</div> + <textarea name="data_safety_data_reason" id="data_safety_data_reason" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_community_benefit_row" class="field_row"> + <span class="field_label">Community Benefit:</span> + <span class="field_data"> + <div class="field_description">What community benefits are derived from the collection of user data for your project?</div> + <textarea name="data_safety_community_benefit" id="data_safety_community_benefit" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_community_collection_row" class="field_row"> + <span class="field_label">Data Collection:</span> + <span class="field_data"> + <div class="field_description">How is the data being collected? (e.g., forms on web site, provided directly by user, + observed data collection, etc.) (Consider that you may be collecting data unintentionally + such as automatic logging by web servers)</div> + <textarea name="data_safety_community_collection" id="data_safety_community_collection" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_retention_row" class="field_row"> + <span class="field_label">Data Retention:</span> + <span class="field_data"> + <div class="field_description">Will your project / team members need to retain user data?</div> + <select name="data_safety_retention" id="data_safety_retention" + onchange="MPR.toggleVisibleById(this,'Yes','data_safety_retention_length_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="data_safety_retention_length_row" class="field_row bz_default_hidden"> + <span class="field_label">Data Retention Length:</span> + <span class="field_data"> + <div class="field_description">If the data is being retained, for how long?</div> + <input type="text" name="data_safety_retention_length" id="data_safety_retention_length" size="60"></textarea> + </span> + </div> + + <div id="data_safety_separate_party_row" class="field_row"> + <span class="field_label">Separate Party:</span> + <span class="field_data"> + <div class="field_description">Will any user data be shared or accessed by third party partners, customers or providers?</div> + <select name="data_safety_separate_party" id="data_safety_separate_party" + onchange="MPR.toggleVisibleById(this,'Yes','data_safety_separate_party_data_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="data_safety_separate_party_extra" class="bz_default_hidden"> + <div id="data_safety_separate_party_data_row" class="field_row"> + <span class="field_label">Separate Party Data Type:</span> + <span class="field_data"> + <div class="field_description">What is the data being shared or accessed?</div> + <textarea name="data_safety_separate_party_data" id="data_safety_community_separate_party_data" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_separate_party_data_communication_row" class="field_row"> + <span class="field_label">Separate Party<br>Data Communication:</span> + <span class="field_data"> + <div class="field_description">How would the data be communicated / transferred to the third parties?</div> + <textarea name="data_safety_separate_party_data_communication" id="data_safety_separate_party_data_communication" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_separate_party_who_row" class="field_row"> + <span class="field_label">Who are the separate parties?:</span> + <span class="field_data"> + <div class="field_description">Who are the third party vendors and in what countries are they based?</div> + <textarea name="data_safety_separate_party_who" id="data_safety_separate_party_who" rows="10" cols="80"></textarea> + </span> + </div> + </div> + + <div id="data_safety_community_visibility_row" class="field_row"> + <span class="field_label">Community Visibility and Input:</span> + <span class="field_data"> + <div class="field_description">Has your proposal been shared publicly, including requirements for Mozilla to collect and host user data?</div> + <select name="data_safety_community_visibility" id="data_safety_community_visibility" + onchange="MPR.toggleVisibleById(this,'Yes','data_safety_communication_channels_row'); + MPR.toggleVisibleById(this,'No','data_safety_communication_plan_row');"> + <option value="">Select One</option> + <option value="Yes">Yes</option> + <option value="No">No</option> + </select> + </span> + </div> + + <div id="data_safety_communication_channels_row" class="field_row bz_default_hidden"> + <span class="field_label">Communication Channels:</span> + <span class="field_data"> + <div class="field_description">What communication channels are you using and what kind of input have you received thus far?</div> + <textarea name="data_safety_communication_channels" id="data_safety_communication_channels" rows="10" cols="80"></textarea> + </span> + </div> + + <div id="data_safety_communication_plan_row" class="field_row bz_default_hidden"> + <span class="field_label">Public Communication Plan:</span> + <span class="field_data"> + <div class="field_description">Data Safety discussion needed. Provide your plan for publicly sharing your proposal.</div> + <textarea name="data_safety_communication_plan" id="data_safety_communication_plan" rows="10" cols="80"></textarea> + </span> + </div> + </div> + </div> + + <input type="submit" id="commit" value="Submit Review"> +</form> + +<p> + Thanks for contacting us. You will be notified by email of any progress made in resolving your request. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/extensions/MozProjectReview/template/en/default/hook/global/messages-messages.html.tmpl b/extensions/MozProjectReview/template/en/default/hook/global/messages-messages.html.tmpl new file mode 100644 index 000000000..ac7c1f6c7 --- /dev/null +++ b/extensions/MozProjectReview/template/en/default/hook/global/messages-messages.html.tmpl @@ -0,0 +1,13 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% IF message_tag == "moz_project_review_creation_failed" %] + The parent [% terms.bug %] was created successfully, but creation of + the dependent [% terms.bugs %] failed. The error has been logged + and no further action is required at this time. +[% END %] diff --git a/extensions/MozProjectReview/web/js/moz_project_review.js b/extensions/MozProjectReview/web/js/moz_project_review.js new file mode 100644 index 000000000..028666fcc --- /dev/null +++ b/extensions/MozProjectReview/web/js/moz_project_review.js @@ -0,0 +1,180 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This Source Code Form is "Incompatible With Secondary Licenses", as + * defined by the Mozilla Public License, v. 2.0. + */ + +YAHOO.namespace('MozProjectReview'); + +var MPR = YAHOO.MozProjectReview; +var Dom = YAHOO.util.Dom; +var Event = YAHOO.util.Event; + +MPR.required_fields = { + "initial_questions": { + "short_desc": "Please enter a value for project or feature name in the initial questions section", + "cc": "Please enter a value for points of contact in the initial questions section", + "urgency": "Please enter a value for urgency in the initial questions section", + "key_initiative": "Please select a value for key initiative in the initial questions section", + "project_status": "Please select a value for project status in the initial questions section", + "mozilla_data": "Please select a value for mozilla data in the initial questions section", + "new_or_change": "Please select a value for new or change to existing project in the initial questions section", + "separate_party": "Please select a value for separate party in the initial questions section" + }, + "finance_questions": { + "finance_purchase_vendor": "Please enter a value for vendor in the finance questions section", + "finance_purchase_what": "Please enter a value for what in the finance questions section", + "finance_purchase_why": "Please enter a value for why in the finance questions section", + "finance_purchase_risk": "Please enter a value for risk in the finance questions section", + "finance_purchase_alternative": "Please enter a value for alternative in the finance questions section", + "finance_purchase_inbudget": "Please enter a value for in budget in the finance questions section", + "finance_purchase_urgency": "Please select a value for urgency in the finance questions section", + "finance_purchase_cost": "Please enter a value for total cost in the finance questions section" + }, + "legal_questions": { + "legal_priority": "Please select a priority for the legal questions section" + } +}; + +MPR.toggleSpecialSections = function () { + var mozilla_data_select = Dom.get('mozilla_data'); + var data_access_select = Dom.get('data_access'); + var vendor_cost_select = Dom.get('vendor_cost'); + + if (mozilla_data_select.value == 'Yes') { + Dom.removeClass('legal_questions', 'bz_default_hidden'); + Dom.removeClass('privacy_policy_project_questions', 'bz_default_hidden'); + Dom.removeClass('data_safety_questions', 'bz_default_hidden'); + Dom.removeClass('sec_review_questions', 'bz_default_hidden'); + } + else { + if (Dom.get('separate_party').value != 'Yes') + Dom.addClass('legal_questions', 'bz_default_hidden'); + Dom.addClass('privacy_policy_project_questions', 'bz_default_hidden'); + Dom.addClass('data_safety_questions', 'bz_default_hidden'); + Dom.addClass('sec_review_questions', 'bz_default_hidden'); + } + + if (data_access_select.value == 'Yes' || mozilla_data_select.value == 'Yes') { + Dom.removeClass('sec_review_questions', 'bz_default_hidden'); + } + else { + Dom.addClass('sec_review_questions', 'bz_default_hidden'); + } + + if (data_access_select.value == 'Yes') { + Dom.removeClass('privacy_policy_vendor_questions', 'bz_default_hidden'); + } + else { + Dom.addClass('privacy_policy_vendor_questions', 'bz_default_hidden'); + } + + if (vendor_cost_select.value == '> $25,000') { + Dom.removeClass('finance_questions', 'bz_default_hidden'); + } + else { + Dom.addClass('finance_questions', 'bz_default_hidden'); + } +} + +MPR.toggleVisibleById = function () { + var args = Array.prototype.slice.call(arguments); + var select = args.shift(); + var value = args.shift(); + var ids = args; + + if (typeof select == 'string') { + select = Dom.get(select); + } + + for (var i = 0; i < ids.length; i++) { + if (select.value == value) { + Dom.removeClass(ids[i], 'bz_default_hidden'); + } + else { + Dom.addClass(ids[i], 'bz_default_hidden'); + } + } +} + +MPR.validateAndSubmit = function () { + var alert_text = ''; + var section = ''; + for (section in MPR.required_fields) { + if (!Dom.hasClass(section, 'bz_default_hidden')) { + var field = ''; + for (field in MPR.required_fields[section]) { + if (!MPR.isFilledOut(field)) { + alert_text += MPR.required_fields[section][field] + "\n"; + } + } + } + } + + if (Dom.get('relationship_type').value == 'Vendor/Services' + && Dom.get('legal_vendor_services_where').value == '') + { + alert_text += "Please select a value for vendor services where\n"; + } + + if (Dom.get('relationship_type').value == 'Vendor/Services' + && Dom.get('legal_vendor_services_where').value == 'A single country' + && Dom.get('legal_vendor_single_country').value == '') + { + alert_text += "Please select a value for vendor services where single country\n"; + } + + if (Dom.get('key_initiative').value == 'Other') { + if (!MPR.isFilledOut('key_initiative_other')) + alert_text += "Please enter a value for key initiative in the initial questions section\n"; + } + + if (Dom.get('separate_party').value == 'Yes') { + if (!MPR.isFilledOut('relationship_type')) alert_text += "Please select a value for type of relationship\n"; + if (!MPR.isFilledOut('data_access')) alert_text += "Please select a value for data access\n"; + if (!MPR.isFilledOut('vendor_cost')) alert_text += "Please select a value for vendor cost\n"; + } + + if (Dom.get('finance_purchase_inbudget').value == 'No') { + if (!MPR.isFilledOut('finance_purchase_notinbudget_why')) + alert_text += "Please include additional description for the out of budget line item\n"; + } + + if (alert_text) { + alert(alert_text); + return false; + } + + return true; +} + +YAHOO.util.Event.onDOMReady(function() { + MPR.toggleSpecialSections(); + MPR.toggleVisibleById('new_or_change', 'Existing', 'mozilla_project_row'); + MPR.toggleVisibleById('separate_party', 'Yes', 'initial_separate_party_questions'); + MPR.toggleVisibleById('relationship_type', 'Vendor/Services', 'legal_sow_details_row'); + MPR.toggleVisibleById('vendor_cost', '> $25,000', 'finance_questions'); + MPR.toggleVisibleById('privacy_policy_project', 'Yes', 'privacy_policy_project_link_row'); + MPR.toggleVisibleById('privacy_policy_user_data', 'Yes', 'privacy_policy_project_user_data_bug_row'); + MPR.toggleVisibleById('privacy_policy_vendor_user_data', 'Yes', 'privacy_policy_vendor_extra'); + MPR.toggleVisibleById('data_safety_user_data', 'Yes', 'data_safety_extra_questions'); + MPR.toggleVisibleById('data_safety_retention', 'Yes', 'data_safety_retention_length_row'); + MPR.toggleVisibleById('data_safety_separate_party', 'Yes', 'data_safety_separate_party_data_row'); + MPR.toggleVisibleById('data_safety_community_visibility', 'Yes', 'data_safety_communication_channels_row'); + MPR.toggleVisibleById('data_safety_community_visibility', 'No', 'data_safety_communication_plan_row'); +}); + +//Takes a DOM element id and makes sure that it is filled out +MPR.isFilledOut = function (elem_id) { + var str = Dom.get(elem_id).value; + return str.length > 0 ? true : false; +} + +Event.addListener('legal_vendor_services_where', 'change', function(e) { + if (this.value == 'A single country') + Dom.removeClass('legal_vendor_single_country', 'bz_default_hidden'); + else + Dom.addClass('legal_vendor_single_country', 'bz_default_hidden'); +}); diff --git a/extensions/MozProjectReview/web/style/moz_project_review.css b/extensions/MozProjectReview/web/style/moz_project_review.css new file mode 100644 index 000000000..cf1c3a8b8 --- /dev/null +++ b/extensions/MozProjectReview/web/style/moz_project_review.css @@ -0,0 +1,48 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This Source Code Form is "Incompatible With Secondary Licenses", as + * defined by the Mozilla Public License, v. 2.0. */ + +.header { + width: 95%; + border-bottom: 1px solid rgb(116,126,147); + font-size: 1.5em; + color: rgb(102, 100, 88); + padding-bottom: 5px; + margin-bottom: 5px; + margin-top: 12px; +} + +.field_row { + width: 100%; + min-width: 700px; + clear: both; +} + +.field_label { + float: left; + width: 20%; +} + +.field_data { + float: left; + width: 75%; + margin-left: 5px; + margin-bottom: 5px; +} + +.field_description { + font-style: italic; + font-size: 90%; + color: rgb(102, 100, 88); +} + +span.required:before { + content: "* "; +} + +span.required:before, span.required_star { + color: red; +} |