<?xml version="1.0" encoding="UTF-8"?>
<!--
   Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

	<properties>
		<title>Release Guide</title>
		<author email="sebawagner@apache.org">
			OpenMeetings Team
		</author>
	</properties>

	<body>

		<section name="How to update Apache OpenMeetings website">

			<subsection name="Required tools">
				<div>
					<ul>
						<li>Sun JDK6</li>
						<li>Apache ANT (1.8 or later)</li>
					</ul>
				</div>
			</subsection>
			
			<subsection name="Introduction">
				<div>
					<p>
						The Apache OpenMeetings HTML websites are generated from XML files. 
						You edit the XML files, run the ANT command "ant anakia" that generates the HTML files 
						and then you checkin to SVN both: XML and HTML files.
					</p>
					<p>
						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.
					</p>
				</div>
			</subsection>

			<subsection name="Editing the website">
				<div>
					<p>
						OpenMeetings website (
						<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>
						) is a copy from the SVN repository.
						<br />
						The file in the SVN to be synced are at:
						<br />
						<a
							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/
						</a>
						<br/>and<br/>
						<a
							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/
						</a>
					</p>
					
					<div>
						To update the website you checkout trunk:
						<br />
						<a
							href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/
						</a> <br/>
						edit the files in the folder <tt>xdocs</tt><br/>
						then you run the command:
						<div class="xmlcode">
							ant anakia
						</div>
						control the output locally in the folder <tt>docs</tt><br/>
						And then checkin into the SVN <i>both</i> the edited xml and generated html files.
					</div>
					
					<p>
						The public website is automatically synced with the SVN repository.<br/>
						Changes to the SVN should be immediately synced to the production website.<br/>
						If not you might login to people.apache.org,<br/>
						cd to <tt>/www/openmeetings.apache.org/content/</tt><br/>
						and run the linux command "touch" on the files that need to be synced
					</p>
				</div>
			</subsection>
			
			<subsection name="Adding a new menu entry">
				<div>
					To add a new menu entry in the left side panel you need to modify the file: 
					<br/>
					<tt>xdocs/stylesheets/project.xml</tt>
				</div>
			</subsection>
			
			<subsection name="Writing a new macro">
				<div>
					<p>
						You can write macros in a template language to parse from the XML files certain aspects.
					</p>
					<p>
						To add a new macro see the file:<br/>
						<tt>xdocs/stylesheets/site.vsl</tt>
					</p>
				</div>
				
			</subsection>

		</section>

	</body>

</document>