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

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Adding content to www.eclipse.org/bpel/";
	$pageKeywords	= "BPEL, www content, howto";
	$pageAuthor		= "BPEL Team";
	
	# 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)
	include($_SERVER['DOCUMENT_ROOT'] . "/$projectShortName/items/developers_menu.php");
	
	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	
<div id="maincontent">
		
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<p>
			<div class="right">
	            Last modified on:<span class="date"> April 29th<sup>th</sup>, 2007</span>
	        </div>
 		</p>
 
 
 Here are the steps necessary to edit and check the content on www.eclipse.org/bpel/ locally on 
 your development workstation.
 
 <h2>Pull source</h2>
 
 Create a project in your Eclipse workbench called <b>www</b> and checkout into it the following modules from
 the repository <b>dev.eclipse.org:/cvsroot/org.eclipse</b>. 
 
 <ol>
   <li><tt>www/bpel</tt> - the main bpel web content tree</li>
   <li><tt>www/eclipse.org-common</tt> - some common things that you need</li>
   <li><tt>www/images</tt> - images</li>
   <li><tt>www/projects</tt> - project related stuff</li>
 </ol>
 
 For example, this is what I see ...
 
 <p style="margin-left: 20px;">
 	<img src="images/www-project.png"/>
 </p>
 
 <p>
  You will need the CVS username and password to commit things to this repository. 
 </p>
 
 
 <h2>Get PHPEclipse</h2>
 
 If you <i>do not dream in PHP code</i>
 then this is probably a <b>good</b> thing to do. You can download from 
 <a class="www" href="http://sourceforge.net/projects/phpeclipse" target="_download">http://sourceforge.net/projects/phpeclipse</a>.
 After installing, restart your eclipse environment, and pressumably you should be able to
 open and browse the repository and perhaps even see colors when editing those PHP files.
 <br/>
 <br/>
 
 <p style="margin-left: 20px;">
 <img src="images/php-editor.png"/>
 </p>
  
 <p>
 This concludes the eclipse end setup. Now onto running the <b>www.eclipse.org/bpel/</b> 
 locally on your workstation.
 </p>
 <h2>Install XAMPP</h2>
 
 Install the XAMPP stack on your workstation (MySQL + Apache + PHP and Perl).
 You download it from 
 <a class="www" href="http://www.apachefriends.org/en/xampp.html" target="_download">http://www.apachefriends.org/en/xampp.html</a>.
 <p>
 Installation ought to self explantory if you can came this far.
 </p>
 <p>
 If you do not want to do this, then you are on your own. I used my own installation of Apache 
 and re-used the XAMPP instllation of the rest. 
 </p>
 
 <h2>Modify Apache Configuration</h2>
 
 You need to modify the apache configuration so that it uses <b>virtual hosts</b>
 and specifically defines one that we will use for the local eclipse.org environment. 
 There two steps here:
 
 <ol>
  <li> Edit your <tt>/etc/hosts</tt> or 
                 <tt>\windows\system32\drivers\etc\hosts</tt>
                 file to include this entry
      <pre class="code">
  127.0.0.1		local.eclipse.org
      </pre>
      or create an alias for localhost as in ...
      <pre class="code">
  127.0.0.1		localhost local.eclipse.org
      </pre>
   </li>
      
  <li> Edit your apache configuration to include the <b>local.eclipse.org</b>
  virtual host. This should be in the configuration file <tt>etc/extras/httpd-vhosts.conf</tt> in your XAMPP home directory.  
  
      <pre class="code">
NameVirtualHost *:80
#
&lt;VirtualHost *:80>
    ServerName local.eclipse.org
    ServerAdmin admin@email.com
    DocumentRoot c:/ws/eclipse.org/www    
    ServerAlias www.local.eclipse.org
    ErrorLog logs/local.eclipse.org-error.log
    CustomLog logs/local.eclipse.org-access.log common
&lt;/VirtualHost>
      </pre>
            
    The <b>DocumentRoot</b> for your virtual local.eclipse.org host should be pointing
    to where-ever you had created the <b>www</b> project (and where <b>www/bpel</b> exists).
    </li>        
 </ol>
 
 Now restart the apache configuration and see how things work.

 
 You should be able to point to <b>http://local.eclipse.org/bpel/</b>
 and get the BPEL home page.
 	</div>
 	
 	$rightcolumn_links
 </div>	

EOHTML;


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