<?php  		
	set_include_path($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common" . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . "/projects" . PATH_SEPARATOR . get_include_path());																												
    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: 		Igor Vinnykov
	# Date:			2007-11-16
	#
	# Description: Primary Newsgroup page
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Subversive - Newsgroup";
	$pageKeywords	= "Subversive, Subversion, SVN, Team Provider, Newsgroup";
	$pageAuthor		= "Igor Vinnykov";
	
	include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'
	
	$sidebar = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/subversive/sidebars/main.php");	
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>Newsgroup</h1>
		<p>
		    Subversive newsgroup is a place where our community can discuss general topics related with the project. It's a right place to ask questions about Subversive usage, share feedback and request a help. You can connect to the newsgroup by <a href="news://news.eclipse.org/eclipse.technology.subversive">news://news.eclipse.org/eclipse.technology.subversive</a>. You can find instructions how to connect to the newsgroup below.
		</p>
		<h2>Get the password</h2>
		<p>
            In order to access newsgroup you should request a free password by filling the registration form on <a href="http://www.eclipse.org/newsgroups/register.php">http://www.eclipse.org/newsgroups/register.php</a>. You'll receive login credentials by e-mail shortly after registering. You can work with newsgroups using simple web interface or setup your favorite NNTP news reader like Outlook, Thunderbird, etc.
        </p>
        <h2>Access through Web interface</h2>
        <p>
            You can work with newsgroup through simple and useful web interface, which allows reading posts and writing answers. Use following link to access the Subversive newsgroup through web interface:<br/><a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.subversive">http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.subversive</a>.
        </p>
        <h2>Access through news readers</h2>
        <p>
            You can use any news reader, which supports NNTP. The most popular mail clients like Outlook and Thunderbird can be used to work with newsgroups. In order to setup any news reader use following settings:
            <ul>
                <li>News server: news.eclipse.org</li>
                <li>Port: 119, or 80 for firewalled users</li>
                <li>SSL: no</li>
                <li>UserID and Password are provided during subscription</li>                                                
            </ul>
        </p>
        <p>
            Let's follow MS Outlook Express setup process by example.
            <ol>
                <li>Start MS Outlook Express</li>
                <li>Click on Tools &gt; Accounts... menu item</li>
                <li>Switch to the News tab</li>
                <li>Perform Add &gt; News...</li>
                <li>On the first page of the wizard enter your name, which will be shown in posts. Click on Next button.</li>
                <li>On the second page of the wizard enter your e-mail address. Click on Next button.</li>
                <li>On the third page of wizard enter <i>news.eclipse.org</i> as NNTP server. Set <i>My news server requires me to log on</i> option. Click on Next button.</li>
                <li>On the fourth page of the wizard enter username and password, which you receive by e-mail during subscription. Click on Next button.</li>
                <li>Click on Finish button</li>
                <li>Click on Close button in order to close Internet Accounts window</li>
                <li>You will be prompted to download the list of available newsgroups. Click on OK button.</li>                                                                                                                                                                
                <li>In the list find <i>eclipse.technology.subversive</i> newsgroup, select it and click on Subscribe button.</li>                                                                                                                                                                
                <li>Click on OK button in order to close Newsgroups Subscriptions dialog</li>                                                                                                                                                                
            </ol>
        </p>
        <p>
            Now you can select <i>eclipse.technology.subversive</i> node in the Folders tree in order to see posts in this newsgroup and make own posts.
        </p>
		<h2>Frequently asked questions</h2>
		<h4>You have mailing lists and newsgroups. What is the difference and what should I use?</h4>
        <p>
		    Mailing lists are mostly used for communication between Subversive committers, integrators, contributors and getting announcements from development team. Newsgroups are aimed to organize general discussions in wider community.
		</p>
		<p>
		    Thus, if you use Subversive and need to get the support or ask questions, then you should post to the newsgroup.<br/>
		    If you are Subversive committer, contributor or integrator, then post to the <a href="https://dev.eclipse.org/mailman/listinfo/subversive-dev">subversive-dev@eclipse.org</a> mailing list.<br/>
		    If you want to get announcement about new Subversive versions, then subscribe to the <a href="https://dev.eclipse.org/mailman/listinfo/subversive-announce">subversive-announce@eclipse.org</a> mailing list.
		</p>
		<h4>What should I do before asking the question?</h4>
		<p>
		    Development team will be really appreciated if before asking the question you can try to find the answer in previous posts by browsing or searching them.
		</p>
		<h4>I found a bug, should I post it to the newsgroup?</h4>
		<p>
		    If you are sure that the problem caused by Subversive, then create new item on Bugzilla. If you have doubts then post a question to the newsgroup. 
		</p>
	</div>	

	<div id="rightcolumn">
        $sidebar		
	</div>

EOHTML;


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