<?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'

require_once ("../../../eclipse-php-classes/system/dbconnection_foundation.class.php");

	#*****************************************************************************
	#
	# submitcontributionquestionnaire2.php
	#
	# Author: 		Denis Roy and others
	# Date:			2005-01-21
	#
	# Description: Process to store contribution questionnaires and e-mail EMO
	#
	# HISTORY:
	#
	#****************************************************************************

	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org Contribution Questionnaire";
	$pageKeywords	= "legal, contribution, content, committer, project";
	$pageAuthor		= "M. Ward Nov 30/05";

    $_ContributionID = $_GET['i'];
	$_p = $_GET['p'];

	# Connect to database
	$dbc    = new DBConnectionRW();
	$dbh    = $dbc->connect();

	$sql = "SELECT *
		FROM Contributions
		WHERE ContributionID = " . $_ContributionID;
	$rs = mysql_query($sql, $dbh)or die(mysql_error());

	$myrow = mysql_fetch_assoc($rs);

	$preExistPkgList = $myrow['preExistPkgList'];

	$pkgList = split("\n", $preExistPkgList);
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

    <div id="maincontent">
      <h1>$pageTitle</h1> 
	  <div id="midcolumn">
        <table border=0 cellspacing=5 cellpadding=2 width="100%" >
          <tr><td>
	        <form name="newsRequest" method="post" action="committer_process/submitcontributionquestionnaire2.php">
	          <input type="hidden" name="c" value=
EOHTML;
				$html .= "\"" . $_ContributionID . "\" />";
$html .= <<<EOHTML
	          <table width="100%" border="0">
              <tr>
               <td colspan="2"><p><strong>3rd Party Package Information</strong></p><br /></td>
      		  </tr>
              <td colspan="2">If the Contribution includes content that was not authored by one of the contributors and is therefore based on code maintained by a 3rd party (including any code from freeware, shareware, electronic bulletin boards, or the internet), please complete this section. </td>
              </tr>
EOHTML;
			for($i = 0; $i < count($pkgList); $i++) {
				if($pkgList[$i] != "") {
$html .= <<<EOHTML
  			  <tr>
    		    <td width="22%">Package Name: </td>
    			<td width="78%"><input type="text" size="60" name=
EOHTML;
				 $html .= "\"pkgName" . $i ."\" value= \"" . $pkgList[$i] ."\">";
$html .= <<<EOHTML
			    </td>
  			  </tr>
  			  <tr>
    			<td>Package Version: </td>
    			<td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"pkgVersion" .$i ."\">";
$html .= <<<EOHTML
    			</td>
  			  </tr>
  			  <tr>
    		    <td>Link to Package Source: </td>
    			<td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"pkgSource" .$i ."\">";
$html .= <<<EOHTML
				</td>
  			  </tr>
  			  <tr>
    			<td>% of package in the contribution: </td>
    			<td><input type="text" size="10" name=
EOHTML;
				 $html .= "\"pkgPercent" .$i ."\" value=\"100\">";
$html .= <<<EOHTML
				</td>
  			  <tr>
    		    <td colspan="2">If the Contribution is under any license other than the <a href="epl-v10.html">EPL</a>, please identify the License and where it is located. </td>
  			  </tr>
  			  <tr>
    	        <td>License Name: </td>
    			<td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"pkgLicense" .$i ."\">";
$html .= <<<EOHTML
			    </td>  			
  			  <tr>
    		    <td>Link to Package License: </td>
    			<td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"pkgLicenseType" .$i ."\">";
$html .= <<<EOHTML
			    </td>
              </tr>
              <tr>
  				<td valign="top"><p>Supporting Information: </p>
          		<p>Please provide details about the content, authors, and the licenses and/or agreements that permit the content to be contributed to Eclipse Foundation:</p></td>
      			<td><textarea cols="60" rows="10" name=
EOHTML;
				 $html .= "\"otherAuthors" .$i ."\">";
$html .= <<<EOHTML
				</textarea></td>
 			  </tr>
 			  <tr>
    			<td>Committer Name: </td>
    			<td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"committerName" .$i ."\">";
$html .= <<<EOHTML
  	  	  	    </td>
  			  </tr>
  			  <tr>
                <td>Committer Email: </td>
                <td><input type="text" size="60" name=
EOHTML;
				 $html .= "\"committerEmail" .$i ."\">";
$html .= <<<EOHTML
				</td>
              </tr>
EOHTML;
				}
			}
$html .= <<<EOHTML
 			  <tr>
    		    <td colspan="2">&nbsp;</td>
  			  </tr>
  			  <br />
    		</table>
			<p>
		      <input type="reset" name="Reset" value="Reset">  
	          <input type="submit" name="Submit" value="Submit">
	        </p>
          </form>
        </td></tr></table>
	  </div>
	</div>

EOHTML;


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

?>