3 * Copyright (c) Xerox Corporation, Codendi Team, 2001-2009. All rights reserved
4 * Copyright 2012, Franck Villaume - TrivialDev
5 * http://fusionforge.org
7 * This file is a part of Fusionforge.
9 * Fusionforge is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * Fusionforge is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with Fusionforge. If not, see <http://www.gnu.org/licenses/>.
23 require_once 'Widget.class.php';
26 * Widget_ProjectPublicAreas
29 class Widget_ProjectPublicAreas extends Widget {
30 function __construct() {
31 $this->Widget('projectpublicareas');
35 return _('Public Tools');
38 function getContent() {
39 $request =& HTTPRequest::instance();
40 $group_id = $request->get('group_id');
41 $pm = ProjectManager::instance();
42 $project = $pm->getProject($group_id);
43 $HTML = $GLOBALS['HTML'];
44 // ################# Homepage Link
46 echo '<div class="public-area-box" rel="doap:homepage">';
47 echo util_make_link($project->getHomePage(),
48 $HTML->getHomePic(_('Home Page')) . ' ' .
49 _('Project Home Page'), false, true);
52 // ################## ArtifactTypes
54 if ($project->usesTracker()) {
55 echo '<div class="public-area-box">'."\n";
56 $link_content = $HTML->getFollowPic(_('Tracker')) . ' ' . _('Tracker');
57 echo util_make_link ( '/tracker/?group_id=' . $group_id, $link_content);
59 $result=db_query_params ('SELECT agl.*,aca.count,aca.open_count
60 FROM artifact_group_list agl
61 LEFT JOIN artifact_counts_agg aca USING (group_artifact_id)
63 ORDER BY group_artifact_id ASC',
67 while ($row = db_fetch_array($result)) {
68 if (!forge_check_perm('tracker',$row['group_artifact_id'],'read')) {
74 if (count($rows) < 1) {
75 echo "<br />\n<em>"._('There are no trackers available').'</em>';
77 echo "\n".'<ul class="tracker" rel="doap:bug-database">'."\n";
78 foreach ($rows as $row) {
79 // tracker REST paths are something like : /tracker/cm/project/A_PROJECT/atid/NUMBER to plan compatibility
80 // with OSLC-CM server API
81 $group_artifact_id = $row['group_artifact_id'];
82 $tracker_stdzd_uri = util_make_url('/tracker/cm/project/'. $project->getUnixName() .'/atid/'. $group_artifact_id);
83 echo "\t".'<li about="'. $tracker_stdzd_uri . '" typeof="sioc:Container">'."\n";
84 print '<span rel="http://www.w3.org/2002/07/owl#sameAs">'."\n";
85 echo util_make_link ('/tracker/?atid='. $group_artifact_id . '&group_id='.$group_id.'&func=browse',$row['name']) . ' ' ;
86 echo "</span>\n"; // /owl:sameAs
87 printf(ngettext('(<strong>%1$s</strong> open / <strong>%2$s</strong> total)', '(<strong>%1$s</strong> open / <strong>%2$s</strong> total)', $row['open_count']), $row['open_count'], $row['count']);
89 print '<span rel="sioc:has_space" resource="" ></span>'."\n";
98 // ################## forums
100 if ($project->usesForum()) {
101 echo '<div class="public-area-box">'."\n";
102 // print '<hr size="1" /><a rel="sioc:container_of" href="'.util_make_url ('/forum/?group_id='.$group_id).'">';
103 $ff = new ForumFactory($project);
104 $f_arr = $ff->getForums();
105 $forums_count = count($f_arr);
107 foreach ($f_arr as $f) {
108 $messages_count += $f->getMessageCount();
111 $link_content = $HTML->getForumPic('') . ' ' . _('Public Forums');
112 echo util_make_link ( '/forum/?group_id=' . $group_id, $link_content);
114 printf(ngettext("<strong>%d</strong> message","<strong>%d</strong> messages",$messages_count),$messages_count);
115 print ' ' . _('in') . ' ';
116 printf(ngettext("<strong>%d</strong> forum","<strong>%d</strong> forums",$forums_count),$forums_count);
121 // ##################### Doc Manager
123 if ($project->usesDocman()) {
124 echo '<div class="public-area-box">';
125 $link_content = $HTML->getDocmanPic('') . ' ' . _('DocManager: Project Documentation');
126 // <a rel="sioc:container_of" xmlns:sioc="http://rdfs.org/sioc/ns#" href="'.util_make_url ('/docman/?group_id='.$group_id).'">';
127 print util_make_link( '/docman/?group_id='.$group_id, $link_content);
131 // ##################### Mailing lists
133 if ($project->usesMail()) {
134 echo '<div class="public-area-box">';
135 $link_content = $HTML->getMailPic('') . ' ' . _('Mailing Lists');
136 print util_make_link( '/mail/?group_id='.$group_id, $link_content);
137 $n = project_get_mail_list_count($group_id);
139 printf(ngettext('(<strong>%s</strong> public mailing list)', '(<strong>%s</strong> public mailing lists)', $n), $n);
143 // ##################### Task Manager
145 if ($project->usesPm()) {
146 echo '<div class="public-area-box">';
147 $link_content = $HTML->getPmPic('') . ' ' . _('Tasks');
148 print util_make_link( '/pm/?group_id='.$group_id, $link_content);
150 $pgf = new ProjectGroupFactory ($project);
151 $pgs = $pgf->getProjectGroups();
153 if (count($pgs) < 1) {
154 echo "<br />\n<em>"._('There are no subprojects available').'</em>';
156 echo "\n".'<ul class="task-manager">';
157 foreach ($pgs as $pg) {
159 print util_make_link ('/pm/task.php?group_project_id='.$pg->getID().'&group_id='.$group_id.'&func=browse',$pg->getName());
167 // ######################### Surveys
169 if ($project->usesSurvey()) {
170 echo '<div class="public-area-box">'."\n";
171 $link_content = $HTML->getSurveyPic('') . ' ' . _('Surveys');
172 echo util_make_link( '/survey/?group_id='.$group_id, $link_content);
173 echo ' (<strong>'. project_get_survey_count($group_id) .'</strong> ' . _('surveys').')';
177 // ######################### SCM
179 if ($project->usesSCM()) {
180 echo '<div class="public-area-box">'."\n";
182 $link_content = $HTML->getScmPic('') . ' ' . _('SCM Repository');
183 // print '<hr size="1" /><a rel="doap:repository" href="'.util_make_url ('/scm/?group_id='.$group_id).'">';
184 print util_make_link( '/scm/?group_id='.$group_id, $link_content);
186 $hook_params = array () ;
187 $hook_params['group_id'] = $group_id ;
188 plugin_hook ("scm_stats", $hook_params) ;
192 // ######################### Plugins
194 $hook_params = array ();
195 $hook_params['group_id'] = $group_id;
196 plugin_hook ("project_public_area", $hook_params);
198 // ######################## AnonFTP
200 // CB hide FTP if desired
201 if ($project->usesFTP()) {
202 if ($project->isActive()) {
203 echo '<div class="public-area-box">'."\n";
205 $link_content = $HTML->getFtpPic('') . ' ' . _('Anonymous FTP Space');
206 // print '<a rel="doap:anonymous root" href="ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName() .'/">';
207 if (forge_get_config('use_project_vhost')) {
208 print util_make_link('ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
210 print util_make_link('ftp://' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
217 function canBeUsedByProject(&$project) {
221 function getDescription() {
222 return _('List all available services for this project along with some information next to it. Click on any of this item to access a service.')
224 . _('The role of this area is pretty much equivalent to the Project Main Menu at the top of the screen except that it shows additional information about each of the service (e.g. total number of open bugs, tasks, ...)');