4 * Project Registration: Project Information.
6 * This page is used to request data required for project registration:
7 * o Project Public Name
8 * o Project Registartion Purpose
10 * o Project Public Description
12 * All these data are more or less strictly validated.
14 * This is last page in registartion sequence. Its successful subsmission
15 * leads to creation of new group with Pending status, suitable for approval.
17 * Portions Copyright 1999-2001 (c) VA Linux Systems
18 * Portions Copyright 2002-2004 (c) GForge Team
19 * Portions Copyright 2002-2009 (c) Roland Mas
20 * Copyright (C) 2011 Alain Peyrat - Alcatel-Lucent
21 * http://fusionforge.org/
23 * This file is part of FusionForge.
25 * FusionForge is free software; you can redistribute it and/or modify
26 * it under the terms of the GNU General Public License as published by
27 * the Free Software Foundation; either version 2 of the License, or
28 * (at your option) any later version.
30 * FusionForge is distributed in the hope that it will be useful,
31 * but WITHOUT ANY WARRANTY; without even the implied warranty of
32 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 * GNU General Public License for more details.
35 * You should have received a copy of the GNU General Public License
36 * along with FusionForge; if not, write to the Free Software
37 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
41 require_once('../env.inc.php');
42 require_once $gfcommon.'include/pre.php';
43 require_once $gfcommon.'scm/SCMFactory.class.php';
45 // Test if restricted project registration
47 if (forge_get_config('project_registration_restricted')) {
48 session_require_global_perm ('approve_projects', '',
49 sprintf (_('Project registration is restricted on %s, and only administrators can create new projects.'),
50 forge_get_config ('forge_name')));
51 } elseif (!session_loggedin()) {
55 $template_projects = group_get_template_projects() ;
56 sortProjectList ($template_projects) ;
57 $full_name = trim(getStringFromRequest('full_name'));
58 $purpose = trim(getStringFromRequest('purpose'));
59 $description = trim(getStringFromRequest('description'));
60 $unix_name = trim(strtolower(getStringFromRequest('unix_name')));
61 $scm = getStringFromRequest('scm');
62 $is_public = getIntFromRequest('is_public', 1);
63 $built_from_template = getIntFromRequest('built_from_template');
67 if (getStringFromRequest('submit')) {
68 if (!form_key_is_valid(getStringFromRequest('form_key'))) {
69 exit_form_double_submit('my');
76 $template_project = group_get_object ($built_from_template) ;
78 && !$template_project->isError()
79 && $template_project->isTemplate()) {
80 // Valid template selected, nothing to do
81 } elseif (forge_get_config('allow_project_without_template')) {
82 // Empty projects allowed
83 $built_from_template = 0 ;
84 } elseif (count($template_projects) == 0) {
85 // No empty projects allowed, but no template available
86 $built_from_template = 0 ;
88 // No empty projects allowed, picking the first available template
89 $built_from_template = $template_projects[0]->getID() ;
92 if (forge_get_config('use_scm')) {
95 if (forge_get_config('use_scm') && $scm && $scm != 'noscm') {
96 $plugin = plugin_get_object($scm);
98 $scm_host = $plugin->getDefaultServer();
102 if ( !$purpose && forge_get_config ('project_auto_approval') ) {
103 $purpose = 'No purpose given, autoapprove was on';
106 $send_mail = ! forge_get_config ('project_auto_approval') ;
108 $group = new Group();
109 $u = session_get_user();
110 $res = $group->create(
122 if ($res && forge_get_config('use_scm') && $plugin) {
123 $group->setUseSCM (true) ;
124 $res = $group->setPluginUse ($scm, true);
126 $group->setUseSCM (false) ;
130 form_release_key(getStringFromRequest("form_key"));
131 $error_msg .= $group->getErrorMessage();
133 $HTML->header(array('title'=>_('Registration complete')));
135 if ( ! forge_get_config ('project_auto_approval') ) {
136 printf(_('<p>Your project has been submitted to the %1$s administrators. Within 72 hours, you will receive notification of their decision and further instructions.<p/>Thank you for choosing %1$s</p>'), forge_get_config ('forge_name'));
137 } else if ($group->isError()) {
138 printf(_('<div class="error">ERROR: %1$s</div>'), $group->getErrorMessage() );
140 printf(_('Approving Project: %1$s'), $group->getUnixName()).'<br />';
142 if (!$group->approve( user_get_object_by_name ( forge_get_config ('project_auto_approval_user') ) ) ) {
143 printf(_('<div class="error">Approval ERROR: %1$s</div>'), $group->getErrorMessage() );
145 printf(_('<p>Your project has been automatically approved. You should receive an email containing further information shortly.<p/>Thank you for choosing %1$s</p>'), forge_get_config ('forge_name'));
149 $HTML->footer(array());
153 } else if (getStringFromRequest('i_disagree')) {
154 session_redirect("/");
157 site_header(array('title'=>_('Register Project')));
161 <?php echo _('To apply for project registration, you should fill in basic information about it. Please read descriptions below carefully and provide complete and comprehensive data. All fields below are mandatory.') ?>
164 <form action="<?php echo getStringFromServer('PHP_SELF'); ?>" method="post">
165 <input type="hidden" name="form_key" value="<?php echo form_generate_key(); ?>"/>
166 <h2><?php echo $index++.'. '._('Project full name') ?></h2>
168 <?php echo _('You should start with specifying the name of your project. The "Full Name" is descriptive, and has no arbitrary restrictions (except a 40 character limit).') ?>
171 <?php echo _('Full Name:') ?><br/>
172 <input size="40" maxlength="40" type="text" name="full_name" value="<?php echo htmlspecialchars($full_name); ?>"/>
176 // Don't display Project purpose if auto approval is on, because it won't be used.
177 if ( !forge_get_config ('project_auto_approval') ) {
178 echo '<h2>'.$index++.'. '._('Project Purpose And Summarization').'</h2>';
180 printf(_('Please provide detailed, accurate description of your project and what %1$s resources and in which way you plan to use. This description will be the basis for the approval or rejection of your project\'s hosting on %1$s, and later, to ensure that you are using the services in the intended way. This description will not be used as a public description of your project. It must be written in English.'), forge_get_config ('forge_name'));
182 echo '<textarea name="purpose" cols="70" rows="10">';
183 echo htmlspecialchars($purpose);
188 <h2><?php echo $index++.'. '. _('Project Public Description') ?></h2>
190 <?php echo _('This is the description of your project which will be shown on the Project Summary page, in search results, etc. Maximum length is 255 chars.') ?>
193 <textarea name="description" cols="70" rows="5">
194 <?php echo htmlspecialchars($description); ?>
197 <h2><?php echo $index++.'. '._('Project Unix Name') ?></h2>
198 <p><?php echo _('In addition to full project name, you will need to choose short, "Unix" name for your project.') ?></p>
199 <p><?php echo _('The "Unix Name" has several restrictions because it is used in so many places around the site. They are:') ?></p>
201 <li><?php echo _('cannot match the unix name of any other project;') ?></li>
202 <li><?php echo _('must be between 3 and 15 characters in length;') ?></li>
203 <li><?php echo _('must be in lower case (upper case letters will be converted to lower case);') ?></li>
204 <li><?php echo _('can only contain characters, numbers, and dashes;') ?></li>
205 <li><?php echo _('must be a valid Unix username;') ?></li>
206 <li><?php echo _('cannot match one of our reserved domains;') ?></li>
207 <li><?php echo _('Unix name will never change for this project;') ?></li>
209 <p><?php echo _('Your unix name is important, however, because it will be used for many things, including:') ?></p>
211 <li><?php printf(_('a web site at <tt>unixname.%1$s</tt>,'), forge_get_config('web_host')) ?></li>
212 <li><?php echo _('the URL of your source code repository,') ?></li>
213 <?php if (forge_get_config('use_shell')) { ?>
214 <li><?php printf(_('shell access to <tt>unixname.%1$s</tt>,'), forge_get_config('web_host')) ?></li>
216 <li><?php echo _('search engines throughout the site.') ?></li>
219 <?php echo _('Unix Name:') ?>
221 <input type="text" maxlength="15" size="15" name="unix_name" value="<?php echo htmlspecialchars($unix_name); ?>"/>
225 $SCMFactory = new SCMFactory() ;
226 $scm_plugins=$SCMFactory->getSCMs() ;
227 if (forge_get_config('use_scm') && count($scm_plugins) > 0) {
228 echo '<h2>'.$index++.'. '._('Source Code').'</h2>';
229 echo '<p>' . _('You can choose among different SCM for your project, but just one (or none at all). Please select the SCM system you want to use.')."</p>\n";
230 echo '<table><tbody><tr><td><strong>'._('SCM Repository').':</strong></td>';
232 echo '<td><input type="radio" name="scm" value="noscm" checked="checked" />'._('No SCM').'</td>';
234 echo '<td><input type="radio" name="scm" value="noscm" />'._('No SCM').'</td>';
236 foreach($scm_plugins as $plugin) {
237 $myPlugin= plugin_get_object($plugin);
238 echo '<td><input type="radio" name="scm" ';
239 echo 'value="'.$myPlugin->name.'"';
240 if ($scm && strcmp($scm, $myPlugin->name) == 0) {
241 echo ' checked="checked"';
243 echo ' />'.$myPlugin->text.'</td>';
245 echo '</tr></tbody></table>'."\n";
248 echo '<h2>'.$index++.'. '._('Project template'). '</h2>';
250 if (count ($template_projects) > 1) {
251 $tpv_arr = array () ;
252 $tpn_arr = array () ;
254 if (forge_get_config('allow_project_without_template')) {
255 printf(_('You can either start from an empty project, or pick a project that will act as a template for yours. Your project will initially have the same configuration as the template (same roles and permissions, same trackers, same set of enabled plugins, and so on).')) ;
257 $tpn_arr[] = _('Start from empty project') ;
259 printf(_('Please pick a project that will act as a template for yours. Your project will initially have the same configuration as the template (same roles and permissions, same trackers, same set of enabled plugins, and so on).')) ;
262 foreach ($template_projects as $tp) {
263 $tpv_arr[] = $tp->getID() ;
264 $tpn_arr[] = $tp->getPublicName() ;
266 echo html_build_select_box_from_arrays ($tpv_arr, $tpn_arr, 'built_from_template', $template_projects[0]->getID(),
267 false, '', false, '') ;
268 } elseif (count ($template_projects) == 1) {
270 if (forge_get_config('allow_project_without_template')) {
271 printf(_('You can either start from an empty project, or use the %s project as a template for yours. Your project will initially have the same configuration as the template (same roles and permissions, same trackers, same set of enabled plugins, and so on).'),
272 $template_projects[0]->getPublicName()) ;
274 $tpv_arr = array () ;
275 $tpn_arr = array () ;
277 $tpn_arr[] = _('Start from empty project') ;
278 $tpv_arr[] = $template_projects[0]->getID() ;
279 $tpn_arr[] = $template_projects[0]->getPublicName() ;
280 echo html_build_select_box_from_arrays ($tpv_arr, $tpn_arr, 'built_from_template', $template_projects[0]->getID(),
281 false, '', false, '') ;
283 printf(_('Your project will initially have the same configuration as the %s project (same roles and permissions, same trackers, same set of enabled plugins, and so on).'),
284 $template_projects[0]->getPublicName()) ;
285 echo '<input type="hidden" name="built_from_template" value="'.$template_projects[0]->getID().'" />' ;
290 printf(_('Since no template project is available, your project will start empty.')) ;
291 echo '<input type="hidden" name="built_from_template" value="0" />' ;
295 if ($sys_use_private_project) {
296 echo '<h2>'.$index++.'. '._('Visibility'). '</h2>';
297 echo '<p>' . _('If you make your project private, it won\'t be visible in the project list and can\'t be accessed by non members of the project.')."</p>\n";
298 echo '<table><tbody><tr><td><strong>'._('Visibility').':</strong></td>';
299 echo '<td><input type="radio" name="is_public" value="1" ';
300 if (!isset($is_public) || $is_public) {
301 echo 'checked="checked" ';
303 echo '/>'. _('Public').'</td>';
305 echo '<td><input type="radio" name="is_public" value="0" ';
306 if (isset ($is_public) && !$is_public) {
307 echo 'checked="checked"';
309 echo '/>'. _('Private').'</td> ';
310 echo '</tr></tbody></table>'."\n";
314 <p style="text-align: center">
315 <input type="submit" name="submit" value="<?php echo _('Submit') ?>"/>
316 <input type="submit" name="i_disagree" value="<?php echo _('Cancel') ?>"/>
323 site_footer(array());
327 // c-file-style: "bsd"