<head>
<title>OpenOffice.org Art Project</title>


<style type="text/css">
.galleriestable {
        border: 1px solid #0E72A4;
        background-color: #FFFFFF;
        margin-top: 1px;
        margin-bottom: 1px;
}

.tableh1 {
        background : #00315a ;
        color : #FFFFFF;
        padding-top: 3px;
        padding-right: 10px;
        padding-bottom: 3px;
        padding-left: 10px;
}

.tableh1_compact {
        background : #0E72A4 ;
        color : #FFFFFF;
        padding-top: 2px;
        padding-right: 5px;
        padding-bottom: 2px;
        padding-left: 5px;
}

.tableh2 {
        background: #d8dee3 ;
        color : #000000;
        padding-top: 3px;
        padding-right: 10px;
        padding-bottom: 3px;
        padding-left: 10px;
}

.tableh2_compact {
        background: #D1D7DC ;
        color : #000000;
        padding-top: 2px;
        padding-right: 5px;
        padding-bottom: 2px;
        padding-left: 5px;
}

.tableb {
        background: #EFEFEF ;
        padding-top: 3px;
        padding-right: 10px;
        padding-bottom: 3px;
        padding-left: 10px;
}

.tableb_compact {
        background: #EFEFEF ;
        padding-top: 2px;
        padding-right: 5px;
        padding-bottom: 2px;
        padding-left: 5px;
}

.tablef {
        background: #d8dee3;
        padding-top: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        padding-left: 10px;
}

</style>

</head>

<H2>The OpenOffice.org Art Project</H2>

<!-- Project menu -->
<div align="right">
    <a href="index.html">Index</a> 
 :: <a href="index.html#galleries">Galleries</a>
 :: <a href="to-do-artwork.html"><b>Artwork To-Do</b></a>    
 :: <a href="to-do-maintenance.html"><b>Project Maintenance To-Do</b></a>     
 <br>
 
 <a href="about-participation.html">How to participate</a>
  :: <a href="about-request-graphics.html">Request graphics</a>
  :: <a href="about-issuezilla.html">IssueZilla</a>
  :: <a href="about-issuezilla-uploading_files.html"><b>Sending us files</b></a>
  :: <a href="about-legal.html">Licenses</a>
  :: <a href="about-project.html">About the project</a>  
 <br><br>
</div>
<!-- end of project menu -->


<!-- Galleries entry table -->
<table style="border-style:solid; border-color:#06338b; border-width:5px"  cellpadding="2" cellspacing="3" width="100%" bgcolor="#9bc0f5">
	<tr>
		<td>
		<strong>The OpenOffice.org Art Project is updating its web site. </strong>
		<br />
		This page is outdated, but most of its content is being worked on at the <a href="http://wiki.services.openoffice.org/wiki/Art">OpenOffice.org wiki</a>:
		<br />
		Please follow <a href="http://wiki.services.openoffice.org/wiki/Art">this link</a> 
		and use the wiki subpages to find the information you're looking for.
		<br />
		If you can't find what you want to know, please contact our mailing list <a href="mailto:art&#64;marketing.openoffice.org">art@marketing.openoffice.org</a>.
		<br />
		<br />		
		Sorry for any inconvenience, we hope to finish the update as soon as possible. 
		<br />		
		- And you are welcome to help us in this area too... - 
		</td>
	</tr>
</table>
<br />


<TABLE border="0" cellpadding="1" cellspacing="0" width="100%" bgcolor="#ffffff">
<TR>
<TD valign="top"  width="85%">	<!-- Begin contents of page -->
	<TABLE class="galleriestable" width="100%">
	<TR>
	<td class="tableh1">
	<strong>How to submit files to the project:</strong>
	</TD>
	</TR>
	<TR>
	<TD class="tableb">

<p><b>You have graphics or files you want to send to us ?</b>
<BR>
Posting the files on the project's mailing list it is <b>not recommended</b> 
because some members still use slow dial-up connections.<br><br>
If you have created artwork you want to show to us please follow the 
steps below in order to send us the files. 

<p><b>This method is the recommended way of submitting files to the Art Project:</b>
<ol>
<li> First you have to be a registered user of the OpenOffice.org website. For registration please visit: 
	<a href="http://www.openoffice.org/servlets/Join">http://www.openoffice.org/servlets/Join</a>;
<li> If you are registered, log-in to the website by visiting: 
	<a href="http://www.openoffice.org/servlets/TLogin">http://www.openoffice.org/servlets/TLogin</a>;
<li> LOCATE THE ISSUE:<br> 
	If there is already an existing issue on the topic for which you wish to submit your work (please 
	ask about it's existence on the project's mailing list <a href="mailto:art@marketing.openoffice.org">
	art@marketing.openoffice.org</a>):
	<ul>
	<li>if you know the issue's address (URL) go to that address;
	<li>if you know only the issue number, go to <a href="http://marketing.openoffice.org/servlets/ProjectIssues">
	http://marketing.openoffice.org/servlets/ProjectIssues</a> and in the "Query database" section enter the 
	issue number and press the Find button;
	</ul>
<li> OR CREATE A NEW ISSUE: <br> 
	If there is no issue created, please use the instructions in our 
	<a href="http://marketing.openoffice.org/art/about-issuezilla.html">IssueZilla Tutorial</a>
	on how to create an issue for the Art Project. Once the issue created proceed to the next step.
<li> ADDING THE FILE: <br>
	On the issue page, go to the <b>Attachments</b> section and click on the 
	"<b>Create a new attachment (proposed patch, testcase, etc.)"</b> link and:
	<ol>
	<li> hit Browse button and select your local file that you wish to submit
	<li> provide one line description for the file
	<li> select the correct file format/mime type
	<li> hit the submit button and a confirmation that your attachment was added will appear
	</ol>
<li> TELLING US ABOUT THE FILE:<br>
	After you have attached the file you can go back to the issue and in the "Attachments" section you will see 
	a link to the file you have added. You can copy that link location (in some browsers: Right-Click 
	and Copy Link Location) and paste the link in your emails to the mailing list. 
	It is also recommended that in your message you also mention the Issue Number and/or the Issue URL 
	in order for us to easy locate the right issue.
<li> ASKING FOR HELP:<br>
	If you have difficulties, please do not hesitate to ask for help on the project's mailing list.
</ol>


<br>


<p><b>Usefull links:</b>
<ul>
<li><a href="http://marketing.openoffice.org/art/about-issuezilla.html">Using IssueZilla system 
inside the Art Project (tutorial)</a>
<li><a href="http://qa.openoffice.org/issue_handling/bug_writing_guidelines.html">Issue Writing
Guidelines</a>
<li><a href="http://qa.openoffice.org/issue_handling/basic_rules.html">Basic Issue Tracker Rules</a>
<li><a href="http://www.openoffice.org/scdocs/ProjectIssues">Project Issues topic located in the
site Help files</a>
</ul>

<br><br><br>
<small>
-=End document version 0.1.1en=-<br>
===============================
<br>Version: 0.1en
<br>Last updated: December 04 2004
<br>Credits: Special thanks to Robert Vojta and the members of the Art Project.
<br><br>

	
	
	
	
	
	</TD>
	</TR>			
	</TABLE>
	<!-- end contents of page -->
</TD>
<TD width="150" valign="top">
		
		<!-- Help needed table -->
			<TABLE class="galleriestable" width="100%">
			<TR>
			<TD class="tableh2">
			<small>
			<b><font color="#7F7F7F">HELP NEEDED:</font></b><br>
			
			<script language="JavaScript"
			src="http://oosurvey.gratismania.ro/oooart/news/todo.php"></script>
			<br><!-- <a href="#">More...</a> -->
			</small>
			</TD>
			</TR>
			</table>
		
		<!-- news table -->
			<TABLE class="galleriestable" width="100%">
			<TR>
			<TD class="tableh2">
			<small>
			<b><font color="#7F7F7F">PROJECT NEWS:</font></b><br>
			<script language="JavaScript" 
			src="http://oosurvey.gratismania.ro/oooart/news/news.php"></script>
			<BR>
			<!-- http://oosurvey.gratismania.ro/oooart/news/news.php -->
			<!-- <a href="#">More...</a> -->
			</small>
			</TD>
			</TR>
			</table>


</TD>
</TR>
</TABLE>
<!-- end of galleries entry table -->
