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)
61 ORDER BY group_artifact_id ASC',
64 $rows = db_numrows($result);
66 if (!$result || $rows < 1) {
67 echo "<br />\n<em>"._('There are no public trackers available').'</em>';
69 echo "\n".'<ul class="tracker" rel="doap:bug-database">'."\n";
70 for ($j = 0; $j < $rows; $j++) {
71 // tracker REST paths are something like : /tracker/cm/project/A_PROJECT/atid/NUMBER to plan compatibility
72 // with OSLC-CM server API
73 $group_artifact_id = db_result($result, $j, 'group_artifact_id');
74 $tracker_stdzd_uri = util_make_url('/tracker/cm/project/'. $project->getUnixName() .'/atid/'. $group_artifact_id);
75 echo "\t".'<li about="'. $tracker_stdzd_uri . '" typeof="sioc:Container">'."\n";
76 print '<span rel="http://www.w3.org/2002/07/owl#sameAs">'."\n";
77 echo util_make_link ('/tracker/?atid='. $group_artifact_id . '&group_id='.$group_id.'&func=browse',db_result($result, $j, 'name')) . ' ' ;
78 echo "</span>\n"; // /owl:sameAs
79 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'));
80 echo '<br />'; //.db_result($result, $j, 'description');
81 print '<span rel="sioc:has_space" resource="" ></span>'."\n";
89 // ################## forums
91 if ($project->usesForum()) {
92 echo '<div class="public-area-box">'."\n";
93 // print '<hr size="1" /><a rel="sioc:container_of" href="'.util_make_url ('/forum/?group_id='.$group_id).'">';
94 $link_content = $HTML->getForumPic('') . ' ' . _('Public Forums');
95 echo util_make_link ( '/forum/?group_id=' . $group_id, $link_content);
97 $messages_count = project_get_public_forum_message_count($group_id);
98 $forums_count = project_get_public_forum_count($group_id);
99 printf(ngettext("<strong>%d</strong> message","<strong>%d</strong> messages",$messages_count),$messages_count);
101 printf(ngettext("<strong>%d</strong> forum","<strong>%d</strong> forums",$forums_count),$forums_count);
106 // ##################### Doc Manager
108 if ($project->usesDocman()) {
109 echo '<div class="public-area-box">'."\n";
110 $link_content = $HTML->getDocmanPic('') . ' ' . _('DocManager: Project Documentation');
111 // <a rel="sioc:container_of" xmlns:sioc="http://rdfs.org/sioc/ns#" href="'.util_make_url ('/docman/?group_id='.$group_id).'">';
112 print util_make_link( '/docman/?group_id='.$group_id, $link_content);
116 // ##################### Mailing lists
118 if ($project->usesMail()) {
119 echo '<div class="public-area-box">'."\n";
120 $link_content = $HTML->getMailPic('') . ' ' . _('Mailing Lists');
121 print util_make_link( '/mail/?group_id='.$group_id, $link_content);
122 $n = project_get_mail_list_count($group_id);
124 printf(ngettext('(<strong>%1$s</strong> public mailing list)', '(<strong>%1$s</strong> public mailing lists)', $n), $n);
128 // ##################### Task Manager
130 if ($project->usesPm()) {
131 echo '<div class="public-area-box">'."\n";
132 $link_content = $HTML->getPmPic('') . ' ' . _('Tasks');
133 print util_make_link( '/pm/?group_id='.$group_id, $link_content);
135 $result = db_query_params ('SELECT * FROM project_group_list WHERE group_id=$1 AND is_public=1',
137 $rows = db_numrows($result);
138 if (!$result || $rows < 1) {
139 echo "<br />\n<em>"._('There are no public subprojects available').'</em>';
141 echo "\n".'<ul class="task-manager">';
142 for ($j = 0; $j < $rows; $j++) {
144 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'));
152 // ######################### Surveys
154 if ($project->usesSurvey()) {
155 echo '<div class="public-area-box">'."\n";
156 $link_content = $HTML->getSurveyPic('') . ' ' . _('Surveys');
157 echo util_make_link( '/survey/?group_id='.$group_id, $link_content);
158 echo ' (<strong>'. project_get_survey_count($group_id) .'</strong> ' . _('surveys').')';
162 // ######################### SCM
164 if ($project->usesSCM()) {
165 echo '<div class="public-area-box">'."\n";
167 $link_content = $HTML->getScmPic('') . ' ' . _('SCM Repository');
168 // print '<hr size="1" /><a rel="doap:repository" href="'.util_make_url ('/scm/?group_id='.$group_id).'">';
169 print util_make_link( '/scm/?group_id='.$group_id, $link_content);
171 $hook_params = array () ;
172 $hook_params['group_id'] = $group_id ;
173 plugin_hook ("scm_stats", $hook_params) ;
177 // ######################### Plugins
179 $hook_params = array ();
180 $hook_params['group_id'] = $group_id;
181 plugin_hook ("project_public_area", $hook_params);
183 // ######################## AnonFTP
185 // CB hide FTP if desired
186 if ($project->usesFTP()) {
187 if ($project->isActive()) {
188 echo '<div class="public-area-box">'."\n";
190 $link_content = $HTML->getFtpPic('') . ' ' . _('Anonymous FTP Space');
191 // print '<a rel="doap:anonymous root" href="ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName() .'/">';
192 if (forge_get_config('use_project_vhost')) {
193 print util_make_link('ftp://' . $project->getUnixName() . '.' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
195 print util_make_link('ftp://' . forge_get_config('web_host') . '/pub/'. $project->getUnixName(), $link_content, false, true);
202 plugin_hook("cal_link_group",$group_id);
204 function canBeUsedByProject(&$project) {
207 function getDescription() {
208 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, ...)');