Participate in the development!
Never worked on an open source software project before? Read Havoc Pennington's article Working on Free Software to find out what it's like.
If you're interested in helping with the development of net2ftp, feel free!
Even if you can't code, there are plenty of other things to do, such as:

- design the user interface
- create new logos and icons
- test new versions
- translate messages
- write reviews
- write documentation (for end users and developers)
- maintain the downloadable zip files

Post a message on the forum or send an email to david AT net2ftp DOT com.
Overview of the code
net2ftp uses one script file (index.php) for all screens: login, browse, copy, ...
The functions are stored in different include files according to what they do:

- homepage.inc.php contains functions to print the login page and net2ftp homepage
- manage.inc.php contains the high-level functions to print the screens (copy, upload,...)
- filesystem.inc.php contains the low-level functions that execute FTP commands or local filesystem commands
- browse.inc.php contains all functions related to the Browse Screen (requesting the ftp_rawlist, parsing it, showing the output)
- authorizations.inc.php contains functions to check the authorizations
- html.inc.php contains functions which print the HTML header and footer
- httpheaders.inc.php contains the code that is related to sending HTTP headers (needed for example to trigger the Save As popup of your browser, when you want to download a file)
- registerglobals.inc.php registers the variables and does some preliminary checking

Two state variables (state and state2) determine which screen is shown.
Below is some sample code taken from index.php.
----- sample code from index.php ----- switch ($state) { // When $state is not defined, it is set to "login" to show the Login Screen case "login": // Show the login screen printLoginForm(); break; case "browse": // Browse screen browse($state2, $directory, $FormAndFieldName, $browse_details); break; case "manage": // Actions: copy, upload, rename, ... // Almost all actions have 2 screens: a form and a result screen. // Both are handled by the same function. manage($state2, $directory, $entry, $selectedEntries, $newNames, $dirorfile, $formresult, $chmodStrings, $targetDirectories, $copymovedelete, $text, $wysiwyg, $uploadedFilesArray, $uploadedArchivesArray, $use_folder_names, $command, $to, $message); break; case "bookmark": // Bookmark screen bookmark($directory, $url, $text); break; case "logout": printLoginForm(); break; default: $resultArray['message'] = "Unexpected state string. Exiting."; printErrorMessage($resultArray, "exit", ""); break; }
The login information and state variables are passed from screen to screen via forms.
There is a function to print the login information in an HTML form: printLoginInfo().
Sessions and cookies
For the moment net2ftp doesn't use sessions. This was to avoid session timeouts after 20 or 30 minutes; you can work without worrying about it for as long as you want. In the meanwhile some users have pointed out on the forum how to avoid session timeouts, but I don't know what benefit sessions would bring. There isn't really any information that has to be stored during a session.
Cookies are used to store the last FTP server, username and directory used.
Settings
net2ftp can be configured using the settings.inc.php and settings_authorizations.inc.php files. When a function needs to access a variable, this variable is declared as global in the beginning of the function. These variables are never changed during the execution of the program.
Icons
net2ftp uses 2 icon sets: Nuvola and Noia. Which icon set is used depends on the skin; all the code behind icons is in the /includes/skins.inc.php file. There are 4 kinds of icons within net2ftp:

- Action icons: when you press on them, an action is triggered. There is an onMouseOver effect and onClick event. These icons are 32x32 pixels.
- Mime icons: they indicate which kind of file is shown in the browse view. No onMouseOver effect. These icons are 16x16 pixels.
- Settings icons (not yet in use): they indicate if a setting is on or off -- for example if the FTP transfer mode is ASCII or BINARY. When the mode is ASCII, the ASCII icon is shown with a border, and there is no onMouseOver effect. The BINARY icon is shown without a border and there is an onMouseOver effect. The code for this FTP transfer mode is already written but not yet in use.
- Title icons (not yet in use): they will be placed next to the title on action screens.

In (recent) Mozilla-based browsers, PNG images with a transparent background are shown fine. In Internet Explorer however they are not: the transparent regions are grey. Microsoft has issued a note on how to fix this: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294714
The onMouseOver effect increases the icon size from 32x32 to 34x34 pixels. To avoid that the rest of the content would move, there is margin of 2px when the icon is 32x32, and a margin of 0px when it is 34x34.
Requested features
See the TO DO file.