3 * Copyright (c) Xerox Corporation, Codendi Team, 2001-2009. All rights reserved
5 * This file is a part of Codendi.
7 * Codendi is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * Codendi is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Codendi. If not, see <http://www.gnu.org/licenses/>.
21 require_once('Widget.class.php');
24 * Widget_ProjectPublicAreas
26 class Widget_ProjectPublicAreas extends Widget {
27 function Widget_ProjectPublicAreas() {
28 $this->Widget('projectpublicareas');
31 return _('Public Areas');
33 function getContent() {
34 $request =& HTTPRequest::instance();
35 $group_id = $request->get('group_id');
36 $pm = ProjectManager::instance();
37 $project = $pm->getProject($group_id);
38 $HTML = $GLOBALS['HTML'];
39 // ################# Homepage Link
41 echo '<div class="public-area-box" rel="doap:homepage">';
42 if ( util_check_url($project->getHomePage())) {
43 echo util_make_link ($project->getHomePage(), $HTML->getHomePic(_('Home Page')) . ' ' . _('Project Home Page'), false, true);
45 echo util_make_link ('http://' . $project->getHomePage(), $HTML->getHomePic(_('Home Page')) . ' ' . _('Project Home Page'), false, true);
49 // ################## ArtifactTypes
51 if ($project->usesTracker()) {
52 echo '<div class="public-area-box">'."\n";
53 $link_content = $HTML->getFollowPic(_('Tracker')) . ' ' . _('Tracker');
54 echo util_make_link ( '/tracker/?group_id=' . $group_id, $link_content);
56 $result=db_query_params ('SELECT agl.*,aca.count,aca.open_count
57 FROM artifact_group_list agl
58 LEFT JOIN artifact_counts_agg aca USING (group_artifact_id)
60 ORDER BY group_artifact_id ASC',
64 while ($row = db_fetch_array($result)) {
65 if (!forge_check_perm('tracker',$row['group_artifact_id'],'read')) {
71 if (count($rows) < 1) {
72 echo "<br />\n<em>"._('There are no trackers available').'</em>';
74 echo "\n".'<ul class="tracker" rel="doap:bug-database">'."\n";
75 foreach ($rows as $row) {
76 // tracker REST paths are something like : /tracker/cm/project/A_PROJECT/atid/NUMBER to plan compatibility
77 // with OSLC-CM server API
78 $group_artifact_id = $row['group_artifact_id'];
79 $tracker_stdzd_uri = util_make_url('/tracker/cm/project/'. $project->getUnixName() .'/atid/'. $group_artifact_id);
80 echo "\t".'<li about="'. $tracker_stdzd_uri . '" typeof="sioc:Container">'."\n";
81 print '<span rel="http://www.w3.org/2002/07/owl#sameAs">'."\n";
82 echo util_make_link ('/tracker/?atid='. $group_artifact_id . '&group_id='.$group_id.'&func=browse',$row['name']) . ' ' ;
83 echo "</span>\n"; // /owl:sameAs
84 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']);
86 print '<span rel="sioc:has_space" resource="" ></span>'."\n";
96 // ################## forums
98 if ($project->usesForum()) {
99 echo '<div class="public-area-box">'."\n";
100 // print '<hr size="1" /><a rel="sioc:container_of" href="'.util_make_url ('/forum/?group_id='.$group_id).'">';
101 $link_content = $HTML->getForumPic('') . ' ' . _('Public Forums');
102 echo util_make_link ( '/forum/?group_id=' . $group_id, $link_content);
104 $messages_count = project_get_public_forum_message_count($group_id);
105 $forums_count = project_get_public_forum_count($group_id);
106 printf(ngettext("<strong>%d</strong> message","<strong>%d</strong> messages",$messages_count),$messages_count);
108 printf(ngettext("<strong>%d</strong> forum","<strong>%d</strong> forums",$forums_count),$forums_count);
113 // ##################### Doc Manager
115 if ($project->usesDocman()) {
116 echo '<div class="public-area-box">'."\n";
117 $link_content = $HTML->getDocmanPic('') . ' ' . _('DocManager: Project Documentation');
118 // <a rel="sioc:container_of" xmlns:sioc="http://rdfs.org/sioc/ns#" href="'.util_make_url ('/docman/?group_id='.$group_id).'">';
119 print util_make_link( '/docman/?group_id='.$group_id, $link_content);
123 // ##################### Mailing lists
125 if ($project->usesMail()) {
126 echo '<div class="public-area-box">'."\n";
127 $link_content = $HTML->getMailPic('') . ' ' . _('Mailing Lists');
128 print util_make_link( '/mail/?group_id='.$group_id, $link_content);
129 $n = project_get_mail_list_count($group_id);
131 printf(ngettext('(<strong>%1$s</strong> public mailing list)', '(<strong>%1$s</strong> public mailing lists)', $n), $n);
135 // ##################### Task Manager
137 if ($project->usesPm()) {
138 echo '<div class="public-area-box">'."\n";
139 $link_content = $HTML->getPmPic('') . ' ' . _('Tasks');
140 print util_make_link( '/pm/?group_id='.$group_id, $link_content);
142 $result = db_query_params ('SELECT * FROM project_group_list WHERE group_id=$1',
146 while ($row = db_fetch_array($result)) {
147 if (!forge_check_perm('pm',$row['group_project_id'],'read')) {
154 if (count($rows) < 1) {
155 echo "<br />\n<em>"._('There are no subprojects available').'</em>';
157 echo "\n".'<ul class="task-manager">';
158 foreach ($rows as $row) {
160 print util_make_link ('/pm/task.php?group_project_id='.$row['group_project_id'].'&group_id='.$group_id.'&func=browse',$row['project_name']);
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 plugin_hook("cal_link_group",$group_id);
220 function canBeUsedByProject(&$project) {
223 function getDescription() {
224 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, ...)');