= MaintainingTheWebPages

NOTE: this page is totally and completely outdated.
It needs to be replaced by instructions for the current site.

== How the Aries web site works

The Aries site is built using CMS.
To edit the site you must be an Aries committer, the  ID and password are the same ones as you use for Aries SVN.

The easiest way to edit pages is to install the CMS bookmarklet as described https://cms.apache.org/#bookmark[here]

Navigate to the web page you would like to edit and then click the CMS bookmarklet.

The steps in making a change to the site are:

* Edit
* Submit
* Commit your changes
* Check the 'staged' site
* If the content looks good, publish the site

The Wiki syntax is called Markdown and is documented http://www.freewisdom.org/projects/python-markdown/[here].
Some extensions are installed in  the CMS system (eg tables, syntax highlighting).

More information on CMS is  available http://wiki.apache.org/general/ApacheCms2010[here]

== Making major changes

Because the site is all in SVN its possible to check it out, make and test changes locally and then check in again much as you woudl with code changes.
To do this you will need:

* A local copy of the cms build tools
* A local setup of Apache

First, checkout the site , like this:

 svn co https://svn.apache.org/repos/asf/aries/site/trunk/ site

== To build the site using the build tools.

First check the cms build tools out of SVN:

 svn co https://svn.apache.org/repos/infra/websites/cms/build/ buildtools

To run the build_site.pl script you will need to install the Python version  of Markup.
The instructions for finding and installing Python pre-reqs are given http://wiki.apache.org/general/ApacheCMSFAQ[here]

Then to build the site use this command:

perl build_site.pl --source-base /path/to/newsite/trunk/ --target-base /path/to/output/

which will create *.html in /path/to/output/content

== Check the site on a local server.

Use a vhost to check the site.
On a Mac this means adding the following stanza to /etc/apache2/extra/httpd-vhosts.conf

<VirtualHost *:80>     DocumentRoot "/Users/zoe/Sites/zaries/www"     ServerName zaries     ErrorLog "/Users/zoe/Sites/zaries/error.log"     CustomLog "/Users/zoe/Sites/zaries/access.log" custom

 LogLevel debug

</VirtualHost>

To test the site,  move it like this:

mv /path/to/output/content /Users/zoe/Sites/zaries/www

Then navigate to http://zaries in a browser.

#Add menuitem  Check out the site by using  svn co https://svn.apache.org/repos/asf/aries/site/trunk/ site

update the file under templates/navigation.mdtext

check in the changes by using svn commit

The following steps may not needed if the changes were displayed ok.

Navigate to a lower level page in Apache Aries site and click the CMS bookmarklet.

Check the staging page to verify the menuitem is displayed correct.

Publish the site.
