<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "New Project Provisioning Request Result";
$pageKeywords	= "projects";
$pageAuthor		= "Bjorn Freeman-Benson Jan 2006";

ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>

<?php
$EMailHeaders = "From: \"Eclipse WebMaster (Automated)\"<webmaster@eclipse.org>\n";
$EMailHeaders .= "X-Mailer: Eclipse.org automailer process\n";

function mail_string($committer_number){
  $committer_name     = "committerName"     . $committer_number;
  $committer_email    = "committerEmail"    . $committer_number;
  $committer_website  = "committerWebsite"  . $committer_number;
  $committer_packages = "committerPackages" . $committer_number;
  $committer_lead     = "committerLead"     . $committer_number;
  $committer_download = "committerDownloadPrivileges" . $committer_number;
  
  $tmp_str .= "
    Name: " . $_POST[$committer_name] . "
    Email: " . $_POST[$committer_email] . "
    ";
  if ($_POST[$committer_lead] != ""){
    $tmp_str .= "Project Lead: " . $_POST[$committer_lead] . "
    ";
  }
  if ($_POST[$committer_website] != ""){
    $tmp_str .= "Website: " . $_POST[$committer_website] . "
    ";
  }
  if ($_POST[$committer_download] != ""){
    $tmp_str .= "Download: " . $_POST[$committer_download] . "
    ";
  }
  $tmp_str .= "Packages: " . $_POST[$committer_packages] . "
  ";

  return $tmp_str;
}

function mail_committers($committer_number){
  global $EMailHeaders;
  $committer_name = "committerName"         . $committer_number;
  $committer_email = "committerEmail"       . $committer_number;
  $committer_packages = "committerPackages" . $committer_number;
  $committer_website = "committerWebsite"   . $committer_number;

$cmailstr = "

Committer Request

Name: " . $_POST['yourName'] . "

Email: " . $_POST['yourEmail'] . "

Committer Info: ===================
Has been elected: initial project creation: " . $_POST['yourProject'] . "

Name: " . $_POST[$committer_name] . "
Project: " . $_POST['yourProject'] . "

Email: " . $_POST[$committer_email] . "

CVS package List: " . $_POST[$committer_packages] . "
Web Package List: " . $_POST[$committer_website] . "

-------------------------------------------------
Dear " . $_POST[$committer_name] . ",
If you do not already have a dev.eclipse.org unix account,
please do the following:

1. Create a Bugzilla account for yourself using your same
   email address: " . $_POST[$committer_email] . "
   If you do not use this same email address, your Bugzilla
   permissions will not be set correctly.
   
2. Follow these instructions (especially item 4):
     http://www.eclipse.org/legal/newcommitter.php
   If you have not already done so, you need to fill out a web
   form questionnaire and possibly one or two paper agreements.
   Your committer account cannot be processed until these
   forms are received.

                              Thank you.

";
  $CEMailDest = "emo-records@eclipse.org";
  if ($_POST[$committer_email] != ""){
    $CEMailDest .= "," . $_POST[$committer_email];
  }
  $CEMailSubject = $_POST[$committer_name] . " - New Committer Request Form";
  mail($CEMailDest, $CEMailSubject, $cmailstr, $EMailHeaders);
}

function committers(){
  for($i=1;$i<=7;$i++){
    $committer_name = "committerName".$i;
    if ($_POST[$committer_name] != ""){
      $tmp_str .= mail_string($i);  
      mail_committers($i);
    }else
       if (($_POST[$committer_name] == "") && ($i == 1)){
         $tmp_str .= "* ERROR: No committers listed *
         ";
       }
  }

  return $tmp_str;
}

function website(){
  for($i=1;$i<=7;$i++){
    $committer_website = "committerWebsite".$i;
    $committer_name = "committerName".$i;
    $committer_email = "committerEmail".$i;

    if ($_POST[$committer_website] != ""){
      $tmp_str .= "
      Name: " . $_POST[$committer_name] . "
      Email: " . $_POST[$committer_email] . "
      ";
    }else 
       if (($_POST[$committer_website] == "") && ($i == 1)){
         $tmp_str .= "* ERROR: No committers were given website access *
         ";
       }
  }

  return $tmp_str;
}

function download_privileges(){
  for($i=1;$i<=7;$i++){
    $committerDownloadPrivileges = "committerDownloadPrivileges".$i;
    $committerName = "committerName".$i;
    $committerEmail = "committerEmail".$i;

    if ($_POST[$committerDownloadPrivileges] != ""){
      $tmp_str .= "
      Name: " . $_POST[$committerName] . "
      Email: " . $_POST[$committerEmail] . "
      ";
    }else
      if (($_POST[$committerDownloadPrivileges] == "") && ($i == 1)){
        $tmp_str .= "* ERROR: No committers were given download access *
        ";
    }
  }

  return $tmp_str;
}

function mailing_lists(){
  for($i=1;$i<=5;$i++){
    $mailing_list = "mailingList".$i;
    $short_description = "shortDescription".$i;

    if ($_POST[$mailing_list] != ""){
      $tmp_str .= "
      Name: " . $_POST[$mailing_list] . "
      Short Description: " . $_POST[$short_description] . "
      ";
    }else
       if (($_POST[$mailing_list] == "") && ($i == 1)){
         $tmp_str .= "* ERROR: No mailing lists specified *
         ";
       }
  }
  
  return $tmp_str;
}

function components(){
  for($i=1;$i<=6;$i++){
    $component = "component".$i;
    $component_description = "componentDescription".$i;
    $component_owner = "componentOwner".$i;

    if ($_POST[$component] != ""){
      $tmp_str .= "
      Name: " . $_POST[$component] . "
      Description: " . $_POST[$component_description] . "
      Owner: " . $_POST[$component_owner] . "
      ";
    }else
       if (($_POST[$component] == "") && ($i == 1)){
         $tmp_str .= "* ERROR: No Bugzilla components specified *
         ";
       }
  }

  return $tmp_str;
}

#############
# Main Code #
#############

$EMailDest = "webmaster@eclipse.org,bjorn.freeman-benson@eclipse.org,vlacroix@eclipse.org";
$EMailSubject = "New Project Validation Phase Provisioning Request Form";

$_STATE = $_POST['state'];

if ($_STATE == "submit"){
  echo "
Thank you for submitting this form.  You have submitted the following.
There are TODO items in this email for:
   1. the webmaster
   2. EMO legal
   3. EMO process
   4. You, the submitter
Note that your project will not be completely provisioned until you 
have finished your to do items.
";

$mailStr .= "
New Project Validation Phase Provisioning Request

Name: " . $_POST['yourName'] . "
Email: " . $_POST['yourEmail'] . "
Phone: " . $_POST['yourPhone'] . "
Process: " . $_POST['yourDevelopmentProcess'] . "

New Project: " . $_POST['yourProject'] . "
Host Project: " . $_POST['hostProject'] . "

_____ Committers _____
1. This is the list of committers. They will be provisioned with
   UNIX accounts after they have filled out the online and paper
   forms and agreements.
2. [webmaster] Use this list to create the unix groups.
3. [EMO legal] Use this list to mark project leads.
";

$mailStr .= committers();

$mailStr .= "
_____ Initial CVS Components _____
" . $_POST['initialComponents'] . "
";

####################
# Project Websites #
####################

$mailStr .= "
_____ Project Database ______
1. [EMO process] Set the proposal database to 'creation review successful'
2. [EMO process] Create the project entry in the Foundation database

_____ Project Website ______
1. [webmaster] Create the /cvsroot/org.eclipse website CVS component.
2. [webmaster] Create the initial \"intentionally blank\" default index.php file in that component.
3. [webmaster] Create the www.eclipse.org/[shortname] directory
4. [webmaster] Set up the auto-update mechanism from the CVS to the www.eclipse.org directory
5. [webmaster] Grant CVS access for the website to:
";


$mailStr .= website();

#############
# Downloads #
#############

$mailStr .= "
_____ Downloads ______
1. [webmaster] Create a downloads area. Provide access to: 
";

$mailStr .= download_privileges();

#################
# Mailing Lists #
#################

$mailStr .= "
_____ Newsgroups ____
1. [webmaster] If the project-specific newsgroup has not been
   created, please do so now.
   
_____ Mailing Lists _____
1. [webmaster] Create these mailing lists.";

$mailStr .= mailing_lists();

#######################
# Bugzilla Components #
#######################

$mailStr .= "
_____ Bugzilla Components _____
1. [webmaster] Create these bugzilla components.";


$mailStr .= components();

$mailStr .= "
_____ Project Status Information _____
1. [" . $_POST['yourName'] . "] After the project website CVS is provisioned,
   create the project status infrastructure files.  See
   http://www.eclipse.org/projects/dev_process/project-status-infrastructure.php
   These files are used to surface the newsgroups, mailing lists, and other
   information on the eclipse.org website.
";

$EMailSubject = $EMailSubject . " (" . $_POST['yourProject'] . ")";

if ($_POST['yourEmail'] != ""){
  $EMailDest .= "," . $_POST['yourEmail'];
}

mail($EMailDest, $EMailSubject, $mailStr, $EMailHeaders);

echo "<pre>
" . $mailStr . "
</pre>
";

}

?>
</div></div>
<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>

