<?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("../_projectCommon.php");    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Edit Membership Page";


ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">

<h1><?=$pageTitle;?></h1>

<div style="float: right; border: 1px dashed black;
background-color: #FFFFDD; margin-left:10pt"><table><tr><td width="150px">If you are a third party
and would like to point out an error, or make a suggestion about a membership
page, please
<a href="mailto:tags.suggest@eclipse.org?subject=Noticed Something about a members page&body=PASTE URL HERE">email us</a>.
</td>
</tr></table></div>

<blockquote><em>To edit your organization membership page, you must have an account with
the Eclipse Foundation Portal.  If you do not have an account, instructions are noted below.
</em></blockquote>

<ol>
<li> Login to the <a href="http://portal.eclipse.org/">Foundation Portal</a>.
	<ul><li>If you do not have a Foundation Portal account, but are your organization's
	Company Representative, Delegate, Marketing Contact or Membership Page Editor you can request a portal
	<a href="http://portal.eclipse.org/myfoundation/portal/password-request.php"> account and password </a> immediately.</li>
	<li>If you are not your organization's
	Company Representative, Delegate, Marketing Contact or Membership Page Editor, you can request an
	<a href="https://dev.eclipse.org/portal/myfoundation/portal/portal.php?anon=member_account_request"> account and password </a>
	(please allow 2-4 business days for confirmation and processing).</li>
	</ul>
</li>

<li>
After logging into the portal with the correct credentials you will see one of the components
that allows you to edit your
membership page.  For example:  <br><img src="./images/editMembershipPage-1.PNG" />
</li>

<li>
Click the "see your page" link to see how your page looks live on eclipse.org.  Note that <font color="red">changes made to your membership
page on the portal are published instantly</font>.  Click the "edit" link to edit your short description, long description and URL.
Click either of the "change" links to upload your Small or Large Logo.  <font color="red">Your Small Logo
will automatically be scaled to 120px width.  If you upload a smaller or larger logo, it will be rescaled and may not look good.
Your large logo can be
any size, but if you upload too large of an image it will look bad on your organization page -- 200px-250px width is recommended. </font>
Here is how the fields are used on eclipse.org:
<ul>
<li>The Short Description field is limited to 155 characters and is used as your organization description in lists. Basic HTML tags such as &lt;b&gt; and &lt;em&gt; are permitted but count towards your character limit. </li>

<li>The Long Description field is limited to 2k. HTML is permitted including embedding external graphics, flash, etc, from your website in the HTML. Please do not use DIV tags as this can cause problems with redering. We strongly recommend you keep your page to no more than 1 screen in height and encourage click-through to your own website for more information. </li>

<li>Your Company URL should start with http:// or https://.  This URL is linked from your company logo and name on
your eclipse.org page -- it is the URL you want visitors to land on when clicking through from eclipse.org to your site.</li>

<li>Small Logo's are used when displaying your organization in lists. It must be in PNG, GIF or JPG format and will be rendered at 120px width. If you submit logos larger/smaller than 120px native width the graphic will likely not look good. </li>

<li>Large logos are displayed on your main membership information page. You can submit your logo in any size, but the larger the logo the more space it will take up on your organization page. We recommend using a logo of between 200 and 250px width for best look at feel.</li>
</ul>


<li>If your organization has listings on <a href="http://eclipseplugincentral.com/">EPIC</a> they will automatically be listed on your membership page.
If you have listings on EPIC that are not showing up on your membership page, please ensure that your organization (company) name
on EPIC is exactly the same as it appears on your membership page (including suffixes such as Inc., Gmbh, etc).
Please <a href="mailto:membership@eclipse.org?subject=EPIC listings not showing up on our membership page">email us</a> if you need further help.</li>

<li>
At the bottom of the membership page component is the ability to edit  "Other Products and Services" that you would like to
itemize on your membership page.  Simply click "[add]" to add more, "[edit]" to edit an existing entry.  To remove an entry, click "[edit]" and clear
the text from the Product, Description and URL fields.
<br><img src="./images/editMembershipPage-2.PNG" /></li>

</ol>
</div> <!-- midcolumn -->
</div> <!-- maincontent -->

<?php
	# Paste your HTML content between the EOHTML markers!
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage(NULL, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
