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 Areas');
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";
99 // ################## forums
101 if ($project->usesForum()) {
102 echo '<div class="public-area-box">'."\n";
103 // print '<hr size="1" /><a rel="sioc:container_of" href="'.util_make_url ('/forum/?group_id='.$group_id).'">';
104 $ff = new ForumFactory($project);
105 $f_arr = $ff->getForums();
106 $forums_count = count($f_arr);
108 foreach ($f_arr as $f) {
109 $messages_count += $f->getMessageCount();
112 $link_content = $HTML->getForumPic('') . ' ' . _('Public Forums');
113 echo util_make_link ( '/forum/?group_id=' . $group_id, $link_content);
115 printf(ngettext("<strong>%d</strong> message","<strong>%d</strong> messages",$messages_count),$messages_count);
117 printf(ngettext("<strong>%d</strong> forum","<strong>%d</strong> forums",$forums_count),$forums_count);
122 // ##################### Doc Manager
124 if ($project->usesDocman()) {
125 echo '<div class="public-area-box">'."\n";
126 $link_content = $HTML->getDocmanPic('') . ' ' . _('DocManager: Project Documentation');
127 // <a rel="sioc:container_of" xmlns:sioc="http://rdfs.org/sioc/ns#" href="'.util_make_url ('/docman/?group_id='.$group_id).'">';
128 print util_make_link( '/docman/?group_id='.$group_id, $link_content);
132 // ##################### Mailing lists
134 if ($project->usesMail()) {
135 echo '<div class="public-area-box">'."\n";
136 $link_content = $HTML->getMailPic('') . ' ' . _('Mailing Lists');
137 print util_make_link( '/mail/?group_id='.$group_id, $link_content);
138 $n = project_get_mail_list_count($group_id);
140 printf(ngettext('(<strong>%1$s</strong> public mailing list)', '(<strong>%1$s</strong> public mailing lists)', $n), $n);
144 // ##################### Task Manager
146 if ($project->usesPm()) {
147 echo '<div class="public-area-box">'."\n";
148 $link_content = $HTML->getPmPic('') . ' ' . _('Tasks');
149 print util_make_link( '/pm/?group_id='.$group_id, $link_content);
151 $pgf = new ProjectGroupFactory ($project);
152 $pgs = $pgf->getProjectGroups();
154 if (count($pgs) < 1) {
155 echo "<br />\n<em>"._('There are no subprojects available').'</em>';
157 echo "\n".'<ul class="task-manager">';
158 foreach ($pgs as $pg) {
160 print util_make_link ('/pm/task.php?group_project_id='.$pg->getID().'&group_id='.$group_id.'&func=browse',$pg->getName());
168 // ######################### Surveys
170 if ($project->usesSurvey()) {
171 echo '<div class="public-area-box">'."\n";
172 $link_content = $HTML->getSurveyPic('') . ' ' . _('Surveys');
173 echo util_make_link( '/survey/?group_id='.$group_id, $link_content);
174 echo ' (<strong>'. project_get_survey_count($group_id) .'</strong> ' . _('surveys').')';
178 // ######################### SCM
180 if ($project->usesSCM()) {
181 echo '<div class="public-area-box">'."\n";
183 $link_content = $HTML->getScmPic('') . ' ' . _('SCM Repository');
184 // print '<hr size="1" /><a rel="doap:repository" href="'.util_make_url ('/scm/?group_id='.$group_id).'">';
185 print util_make_link( '/scm/?group_id='.$group_id, $link_content);
187 $hook_params = array () ;
188 $hook_params['group_id'] = $group_id ;
189 plugin_hook ("scm_stats", $hook_params) ;
193 // ######################### Plugins
195 $hook_params = array ();
196 $hook_params['group_id'] = $group_id;
197 plugin_hook ("project_public_area", $hook_params);
199 // ######################## AnonFTP
201 // CB hide FTP if desired
202 if ($project->usesFTP()) {
203 if ($project->isActive()) {
204 echo '<div class="public-area-box">'."\n";
206 $link_content = $HTML->getFtpPic('') . ' ' . _('Anonymous FTP Space');
207 // print '<a rel="doap:anonymous root" href="ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName() .'/">';
208 if (forge_get_config('use_project_vhost')) {
209 print util_make_link('ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
211 print util_make_link('ftp://' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
218 function canBeUsedByProject(&$project) {
222 function getDescription() {
223 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.<br />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, ...)');