6 * SourceForge: Breaking Down the Barriers to Open Source Development
7 * Copyright 1999-2001 (c) VA Linux Systems
8 * http://sourceforge.net
12 require_once $gfwww.'news/news_utils.php';
13 require_once $gfwww.'include/trove.php';
14 require_once $gfwww.'include/project_summary.php';
15 require_once $gfcommon.'include/tag_cloud.php';
17 $title = _('Project Info');
19 site_project_header(array('title'=>$title,'group'=>$group_id,'toptab'=>'home'));
22 // ########################################### end top area
26 <div id="forge-project-home" class="lien-soulignement">
27 <table id="project-summary-and-devs" class="my-layout-table" summary="">
30 <h2>'.$project->getPublicName().'</h2>
31 <h3>'._('Project summary').'</h3>';
34 // ########################################## top area, not in box
36 $res_admin = db_query_params ('SELECT users.user_id,users.user_name,users.realname,user_group.admin_flags
38 WHERE user_group.user_id=users.user_id
39 AND user_group.group_id=$1
41 ORDER BY admin_flags DESC,realname',
45 if ($project->getStatus() == 'H') {
46 print "<p>".sprintf(_('NOTE: This project entry is maintained by the %1$s staff. We are not the official site for this product. Additional copyright information may be found on this project\'s homepage.'), $GLOBALS['sys_name'])."</p>\n";
49 $hook_params = array () ;
50 $hook_params['group_id'] = $group_id ;
51 plugin_hook ("project_before_description",$hook_params) ;
53 if ($project->getDescription()) {
54 print "<p>" . nl2br($project->getDescription()) . '</p>';
56 print "<p>" . _('This project has not yet submitted a description.') . '</p>';
62 if ($GLOBALS['sys_use_project_tags']) {
63 $list_tag = list_project_tag($group_id);
65 print '<p>' . _('Tags').': '. $list_tag . '</p>';
68 $project =& group_get_object($group_id);
69 $perm =& $project->getPermission(session_get_user());
70 if ($perm->isAdmin()) {
71 print '<p><a href="/project/admin/editgroupinfo.php?group_id=' . $group_id . '" >' . _('No tag defined for this project') . '</a>.</p>';
74 print '<p>' . _('No tag defined for this project') . '</p>';
79 if($GLOBALS['sys_use_trove']) {
81 print stripslashes(trove_getcatlisting($group_id,0,1,1));
85 print(_('Registered: ') . date(_('Y-m-d H:i'), $project->getStartDate()));
87 // Get the activity percentile
88 // CB hide stats if desired
89 if ($project->usesStats()) {
90 $actv = db_query_params ('SELECT ranking FROM project_weekly_metric WHERE group_id=$1',
92 $actv_res = db_result($actv,0,"ranking");
96 print '<br />'.sprintf (_('Activity Ranking: %d'), $actv_res) ;
97 print '<br />'.sprintf(_('View project <a href="%1$s" >Statistics</a>'),util_make_url ('/project/stats/?group_id='.$group_id));
98 if ( ($project->usesTracker() && $GLOBALS['sys_use_tracker']) || ($project->usesPm() && $GLOBALS['sys_use_pm']) ) {
99 print sprintf(_(' or <a href="%1$s">Activity</a>'),util_make_url ('/project/report/?group_id='.$group_id));
101 print '<br />'.sprintf(_('View list of <a href="%1$s">RSS feeds</a> available for this project.'), util_make_url ('/export/rss_project.php?group_id='.$group_id)). ' ' . html_image('ic/rss.png',16,16,array());
104 if($GLOBALS['sys_use_people']) {
105 $jobs_res = db_query_params ('SELECT name
106 FROM people_job,people_job_category
107 WHERE people_job.category_id=people_job_category.category_id
108 AND people_job.status_id=1
114 $num=db_numrows($jobs_res);
116 print '<br /><br />';
118 ngettext('HELP WANTED: This project is looking for a <a href="%1$s">"%2$s"</a>.',
119 'HELP WANTED: This project is looking for people to fill <a href="%1$s">several different positions</a>.',
121 util_make_url ('/people/?group_id='.$group_id),
122 db_result($jobs_res,0,"name"));
126 $hook_params = array () ;
127 $hook_params['group_id'] = $group_id ;
128 plugin_hook ("project_after_description",$hook_params) ;
132 // ########################### Developers on this project
135 echo $HTML->boxTop(_('Project Members'), 'Project_Members');
137 $iam_member = false ;
139 if (db_numrows($res_admin) > 0) {
141 echo '<span class="develtitle"><?php echo _('Project Admins'); ?>:</span><br />';
142 $started_developers = false;
143 while ($row_admin = db_fetch_array($res_admin)) {
144 if (trim($row_admin['admin_flags']) != 'A' && !$started_developers) {
145 $started_developers=true;
146 echo '<span class="develtitle">'. _('Developers').':</span><br />';
148 echo util_make_link_u ($row_admin['user_name'],$row_admin['user_id'],$row_admin['realname']).'<br />';
149 if ($row_admin['user_id'] == user_getid())
155 $members = $project->getUsers();
157 echo util_make_link ('/project/memberlist.php?group_id='.$group_id,'['.sprintf(_('View the %1$d Member(s)'),count($members)).']'); ?>
161 echo '<p>'.util_make_link ('/project/request.php?group_id='.$group_id,_('Request to join')).'</p>';
163 echo $HTML->boxBottom();
165 echo '</td></tr></table>';
166 $hook_params = array () ;
167 $hook_params['group_id'] = $group_id ;
168 plugin_hook ("project_before_frs",$hook_params) ;
169 echo '<div id="file-releases">';
171 // ############################# File Releases
173 // CB hide FRS if desired
174 if ($project->usesFRS()) {
175 echo $HTML->boxTop(_('Latest File Releases'), 'Latest_File_Releases');
176 $unix_group_name = $project->getUnixName();
179 <table summary="Latest file releases" class="width-100p100">
180 <tr class="table-header">
181 <th class="align-left" scope="col">
202 // Members of projects can see all packages
203 // Non-members can only see public packages
205 $public_required = 1;
206 if (session_loggedin() &&
207 (user_ismember($group_id) || user_ismember(1,'A'))) {
208 $public_required = 0 ;
211 $res_files = db_query_params ('SELECT frs_package.package_id,frs_package.name AS package_name,frs_release.name AS release_name,frs_release.release_id AS release_id,frs_release.release_date AS release_date
212 FROM frs_package,frs_release
213 WHERE frs_package.package_id=frs_release.package_id
214 AND frs_package.group_id=$1
215 AND frs_release.status_id=1
216 AND (frs_package.is_public=1 OR 1 != $2)
217 ORDER BY frs_package.package_id,frs_release.release_date DESC',
220 $rows_files=db_numrows($res_files);
221 if (!$res_files || $rows_files < 1) {
224 echo '<tr><td colspan="6"><strong>'._('This Project Has Not Released Any Files').'</strong></td></tr>';
228 This query actually contains ALL releases of all packages
229 We will test each row and make sure the package has changed before printing the row
231 for ($f=0; $f<$rows_files; $f++) {
232 if (db_result($res_files,$f,'package_id')==db_result($res_files,($f-1),'package_id')) {
233 //same package as last iteration - don't show this release
235 $rel_date = getdate (db_result ($res_files, $f, 'release_date'));
236 $package_name = db_result($res_files, $f, 'package_name');
237 $package_release = db_result($res_files,$f,'release_name');
239 <tr class="align-center">
240 <td class="align-left">
241 <strong>' . $package_name . '</strong>
243 // Releases to display
249 . $rel_date["month"] . ' ' . $rel_date["mday"] . ', ' . $rel_date["year"] .
251 <td class="align-center">';
254 // accessibility: image is a link, so alt must be unique in page => construct a unique alt
255 $tmp_alt = $package_name . " - " . _('Release Notes');
256 $link = '/frs/shownotes.php?group_id=' . $group_id . '&release_id=' . db_result($res_files, $f, 'release_id');
257 $link_content = $HTML->getReleaseNotesPic($tmp_alt, $tmp_alt);
258 echo util_make_link ($link, $link_content);
260 <td class="align-center">';
263 $tmp_alt = $package_name . " - " . _('Monitor this package');
264 $link = '/frs/monitor.php?filemodule_id=' . db_result($res_files,$f,'package_id') . '&group_id='.$group_id.'&start=1';
265 $link_content = $HTML->getMonitorPic($tmp_alt, $tmp_alt);
266 echo util_make_link ($link, $link_content);
268 <td class="align-center">';
271 $tmp_alt = $package_name." ".$package_release." - ". _('Download');
272 $link_content = $HTML->getDownloadPic($tmp_alt, $tmp_alt);
273 $t_link_anchor = $HTML->toSlug($package_name)."-".$HTML->toSlug($package_release)."-title-content";
274 $link = '/frs/?group_id=' . $group_id . '&release_id=' . db_result($res_files, $f, 'release_id')."#".$t_link_anchor;
275 echo util_make_link ($link, $link_content);
283 echo '<div class="lien-soulignement">' . util_make_link ('/frs/?group_id='.$group_id, _('View All Project Files')) . '</div>';
285 echo $HTML->boxBottom();
288 echo '</div><!-- id="file-releases" -->' . "\n";
290 $hook_params = array () ;
291 $hook_params['group_id'] = $group_id ;
292 plugin_hook ("project_after_frs",$hook_params) ;
294 // ############################## PUBLIC AREAS
296 echo '<table id="project-public-areas-and-news" class="my-layout-table" summary="">
299 echo $HTML->boxTop(_('Public Areas'), 'Public_Areas');
301 // ################# Homepage Link
303 echo '<div class="public-area-box">';
304 echo util_make_link ('http://' . $project->getHomePage(), $HTML->getHomePic(_('Home Page')) . ' ' . _('Project Home Page'));
308 // ################## ArtifactTypes
310 if ($project->usesTracker()) {
311 echo '<div class="public-area-box">';
312 $link_content = $HTML->getFollowPic(_('Tracker')) . ' ' . _('Tracker');
313 echo util_make_link ( '/tracker/?group_id=' . $group_id, $link_content);
315 $result=db_query_params ('SELECT agl.*,aca.count,aca.open_count
316 FROM artifact_group_list agl
317 LEFT JOIN artifact_counts_agg aca USING (group_artifact_id)
318 WHERE agl.group_id=$1
320 ORDER BY group_artifact_id ASC',
323 $rows = db_numrows($result);
325 if (!$result || $rows < 1) {
326 echo '<br /><em>'._('There are no public trackers available').'</em>';
328 echo '<ul class="tracker">';
329 for ($j = 0; $j < $rows; $j++) {
331 echo util_make_link ('/tracker/?atid='. db_result($result, $j, 'group_artifact_id') . '&group_id='.$group_id.'&func=browse',db_result($result, $j, 'name')) . ' ' ;
332 printf(ngettext('(<strong>%1$s</strong> open / <strong>%2$s</strong> total)', '(<strong>%1$s</strong> open / <strong>%2$s</strong> total)', (int) db_result($result, $j, 'open_count')), (int) db_result($result, $j, 'open_count'), (int) db_result($result, $j, 'count')) .'<br />'.
333 db_result($result, $j, 'description');
341 // ################## forums
343 if ($project->usesForum()) {
344 echo '<div class="public-area-box">';
345 $link_content = $HTML->getForumPic('') . ' ' . _('Public Forums');
346 echo util_make_link ( '/forum/?group_id=' . $group_id, $link_content);
348 $messages_count = project_get_public_forum_message_count($group_id);
349 $forums_count = project_get_public_forum_count($group_id);
350 printf(ngettext("<strong>%d</strong> message","<strong>%d</strong> messages",$messages_count),$messages_count);
352 printf(ngettext("<strong>%d</strong> forum","<strong>%d</strong> forums",$forums_count),$forums_count);
357 // ##################### Doc Manager
359 if ($project->usesDocman()) {
360 echo '<div class="public-area-box">';
361 $link_content = $HTML->getDocmanPic('') . ' ' . _('DocManager: Project Documentation');
362 print util_make_link( '/docman/?group_id='.$group_id, $link_content);
366 // ##################### Mailing lists
368 if ($project->usesMail()) {
369 echo '<div class="public-area-box">';
370 $link_content = $HTML->getMailPic('') . ' ' . _('Mailing Lists');
371 print util_make_link( '/mail/?group_id='.$group_id, $link_content);
372 $n = project_get_mail_list_count($group_id);
373 printf(ngettext('(<strong>%1$s</strong> public mailing list)', '(<strong>%1$s</strong> public mailing lists)', $n), $n);
377 // ##################### Task Manager
379 if ($project->usesPm()) {
380 echo '<div class="public-area-box">';
381 $link_content = $HTML->getPmPic('') . ' ' . _('Task Manager');
382 print util_make_link( '/pm/?group_id='.$group_id, $link_content);
384 $sql="SELECT * FROM project_group_list WHERE group_id='$group_id' AND is_public=1";
385 $result = db_query ($sql);
386 $rows = db_numrows($result);
387 if (!$result || $rows < 1) {
388 echo '<br /><em>'._('There are no public subprojects available').'</em>';
390 echo '<ul class="task-manager">';
391 for ($j = 0; $j < $rows; $j++) {
393 print util_make_link ('/pm/task.php?group_project_id='.db_result($result, $j, 'group_project_id').'&group_id='.$group_id.'&func=browse',db_result($result, $j, 'project_name'));
401 // ######################### Surveys
403 if ($project->usesSurvey()) {
404 echo '<div class="public-area-box">';
405 print html_image('ic/survey16b.png','20','20',array('alt'=>"")) . " ";
406 print util_make_link( '/survey/?group_id='.$group_id, ' '._('Surveys'));
407 echo ' ( <strong>'. project_get_survey_count($group_id) .'</strong> ' . _('surveys').' )';
411 // ######################### SCM
413 if ($project->usesSCM()) {
414 echo '<div class="public-area-box">';
416 $link_content = $HTML->getScmPic('') . ' ' . _('SCM Repository');
417 print util_make_link( '/scm/?group_id='.$group_id, $link_content);
419 $hook_params = array () ;
420 $hook_params['group_id'] = $group_id ;
421 plugin_hook ("scm_stats", $hook_params) ;
425 // ######################### Plugins
427 $hook_params = array ();
428 $hook_params['group_id'] = $group_id;
429 plugin_hook ("project_public_area", $hook_params);
431 // ######################## AnonFTP
433 // CB hide FTP if desired
434 if ($project->usesFTP()) {
435 if ($project->isActive()) {
436 echo '<div class="public-area-box">';
438 $link_content = $HTML->getFtpPic('') . ' ' . _('Anonymous FTP Space');
439 print util_make_link('ftp://' . $project->getUnixName() . '.' . $GLOBALS['sys_default_domain'] . '/pub/'. $project->getUnixName(), $link_content);
445 plugin_hook("cal_link_group",$group_id);
446 echo $HTML->boxBottom();
453 if ($project->usesNews()) {
454 // ############################# Latest News
455 echo $HTML->boxTop(_('Latest News'), 'Latest_News');
456 echo news_show_latest($group_id,10,false);
457 echo $HTML->boxBottom();
460 //echo $HTML->boxBottom();
465 </div><!-- id="forge-project-home" -->
469 // Linked projects (hierarchy)
472 plugin_hook('project_home_link',$group_id);
474 site_project_footer(array());
478 // c-file-style: "bsd"