Fixed issue 4, with fine control over the tabs access.

For each tab, at the exception of the project home and the
administration area, it possible to control the access rights if the
user is anonymous, signed in, member or owner.
This commit is contained in:
Loic d'Anterroches 2008-08-07 15:35:03 +02:00
parent 1831716b07
commit 7383e18dff
20 changed files with 475 additions and 70 deletions

57
src/IDF/Form/TabsConf.php Normal file
View File

@ -0,0 +1,57 @@
<?php
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
# ***** BEGIN LICENSE BLOCK *****
# This file is part of InDefero, an open source project management application.
# Copyright (C) 2008 Céondo Ltd and contributors.
#
# InDefero is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# InDefero is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# ***** END LICENSE BLOCK ***** */
/**
* Configuration of the tabs access.
*/
class IDF_Form_TabsConf extends Pluf_Form
{
public $conf = null;
public function initFields($extra=array())
{
$this->conf = $extra['conf'];
$ak = array('downloads_access_rights' => __('Downloads'),
'source_access_rights' => __('Source'),
'issues_access_rights' => __('Issues'),);
foreach ($ak as $key=>$label) {
$this->fields[$key] = new Pluf_Form_Field_Varchar(
array('required' => true,
'label' => $label,
'initial' => $this->conf->getVal($key, 'all'),
'widget_attrs' => array('choices' =>
array(
__('Open to all') => 'all',
__('Signed in users') => 'login',
__('Project members') => 'members',
__('Project owners') => 'owners',
__('Closed') => 'none',
)
),
'widget' => 'Pluf_Form_Widget_SelectInput',
));
}
}
}

View File

@ -24,6 +24,7 @@
/** /**
* Project middleware. * Project middleware.
* *
* It must be after the session middleware.
*/ */
class IDF_Middleware class IDF_Middleware
{ {
@ -49,6 +50,15 @@ class IDF_Middleware
} catch (Pluf_HTTP_Error404 $e) { } catch (Pluf_HTTP_Error404 $e) {
return new Pluf_HTTP_Response_NotFound(sprintf(__('The page <em>%s</em> was not found on the server.'), htmlspecialchars($request->query))); return new Pluf_HTTP_Response_NotFound(sprintf(__('The page <em>%s</em> was not found on the server.'), htmlspecialchars($request->query)));
} }
$request->conf = new IDF_Conf();
$request->conf->setProject($request->project);
$ak = array('downloads_access_rights' => 'hasDownloadsAccess',
'source_access_rights' => 'hasSourceAccess',
'issues_access_rights' => 'hasIssuesAccess');
$request->rights = array();
foreach ($ak as $key=>$val) {
$request->rights[$val] = (true === IDF_Precondition::accessTabGeneric($request, $key));
}
} }
return false; return false;
} }
@ -58,12 +68,14 @@ class IDF_Middleware
function IDF_Middleware_ContextPreProcessor($request) function IDF_Middleware_ContextPreProcessor($request)
{ {
$c = array(); $c = array();
$c['request'] = $request;
if (isset($request->project)) { if (isset($request->project)) {
$c['project'] = $request->project; $c['project'] = $request->project;
$c['isOwner'] = $request->user->hasPerm('IDF.project-owner', $c['isOwner'] = $request->user->hasPerm('IDF.project-owner',
$request->project); $request->project);
$c['isMember'] = $request->user->hasPerm('IDF.project-member', $c['isMember'] = $request->user->hasPerm('IDF.project-member',
$request->project); $request->project);
$c = array_merge($c, $request->rights);
} }
return $c; return $c;
} }

View File

@ -61,4 +61,53 @@ class IDF_Precondition
} }
return new Pluf_HTTP_Response_Forbidden($request); return new Pluf_HTTP_Response_Forbidden($request);
} }
/**
* Check if the user can access a given element.
*
* The rights are:
* - 'all' (default)
* - 'none'
* - 'login'
* - 'members'
* - 'owners'
*
* The order of the rights is such that a 'owner' is also a
* 'member' and of course a logged in person.
*
* @param Pluf_HTTP_Request
* @param string Control key
* @return mixed
*/
static public function accessTabGeneric($request, $key)
{
switch ($request->conf->getVal($key, 'all')) {
case 'none':
return new Pluf_HTTP_Response_Forbidden($request);
case 'login':
return Pluf_Precondition::loginRequired($request);
case 'members':
return self::projectMemberOrOwner($request);
case 'owners':
return self::projectOwner($request);
case 'all':
default:
return true;
}
}
static public function accessSource($request)
{
return self::accessTabGeneric($request, 'source_access_rights');
}
static public function accessIssues($request)
{
return self::accessTabGeneric($request, 'issues_access_rights');
}
static public function accessDownloads($request)
{
return self::accessTabGeneric($request, 'downloads_access_rights');
}
} }

View File

@ -29,21 +29,27 @@ Pluf::loadFunction('Pluf_HTTP_URL_urlForView');
class IDF_Template_IssueComment extends Pluf_Template_Tag class IDF_Template_IssueComment extends Pluf_Template_Tag
{ {
private $project = null; private $project = null;
private $request = null;
private $git = null; private $git = null;
function start($text, $project) function start($text, $request)
{ {
$this->project = $project; $this->project = $request->project;
$this->request = $request;
$this->git = new IDF_Git($this->project->getGitRepository()); $this->git = new IDF_Git($this->project->getGitRepository());
$text = wordwrap($text, 69, "\n", true); $text = wordwrap($text, 69, "\n", true);
$text = Pluf_esc($text); $text = Pluf_esc($text);
$text = ereg_replace('[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]', $text = ereg_replace('[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]',
'<a href="\\0" rel="nofollow">\\0</a>', '<a href="\\0" rel="nofollow">\\0</a>',
$text); $text);
if ($request->rights['hasIssuesAccess']) {
$text = preg_replace_callback('#(issues?|bugs?|tickets?)\s+(\d+)((\s+and|\s+or|,)\s+(\d+)){0,}#im', $text = preg_replace_callback('#(issues?|bugs?|tickets?)\s+(\d+)((\s+and|\s+or|,)\s+(\d+)){0,}#im',
array($this, 'callbackIssues'), $text); array($this, 'callbackIssues'), $text);
}
if ($request->rights['hasSourceAccess']) {
$text = preg_replace_callback('#(commit\s+)([0-9a-f]{5,40})#im', $text = preg_replace_callback('#(commit\s+)([0-9a-f]{5,40})#im',
array($this, 'callbackCommit'), $text); array($this, 'callbackCommit'), $text);
}
echo $text; echo $text;
} }

View File

@ -38,6 +38,7 @@ class IDF_Views_Download
/** /**
* List the files available for download. * List the files available for download.
*/ */
public $index_precond = array('IDF_Precondition::accessDownloads');
public function index($request, $match) public function index($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -75,6 +76,7 @@ class IDF_Views_Download
/** /**
* View details of a file. * View details of a file.
*/ */
public $view_precond = array('IDF_Precondition::accessDownloads');
public function view($request, $match) public function view($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -123,6 +125,7 @@ class IDF_Views_Download
/** /**
* Download a file. * Download a file.
*/ */
public $download_precond = array('IDF_Precondition::accessDownloads');
public function download($request, $match) public function download($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -136,7 +139,8 @@ class IDF_Views_Download
/** /**
* Submit a new file for download. * Submit a new file for download.
*/ */
public $submit_precond = array('IDF_Precondition::projectMemberOrOwner'); public $submit_precond = array('IDF_Precondition::accessDownloads',
'IDF_Precondition::projectMemberOrOwner');
public function submit($request, $match) public function submit($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -197,6 +201,7 @@ class IDF_Views_Download
/** /**
* View list of downloads with a given label. * View list of downloads with a given label.
*/ */
public $listLabel_precond = array('IDF_Precondition::accessDownloads');
public function listLabel($request, $match) public function listLabel($request, $match)
{ {
$prj = $request->project; $prj = $request->project;

View File

@ -34,6 +34,7 @@ class IDF_Views_Issue
/** /**
* View list of issues for a given project. * View list of issues for a given project.
*/ */
public $index_precond = array('IDF_Precondition::accessIssues');
public function index($request, $match) public function index($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -77,7 +78,8 @@ class IDF_Views_Issue
* *
* Only open issues are shown. * Only open issues are shown.
*/ */
public $myIssues_precond = array('Pluf_Precondition::loginRequired'); public $myIssues_precond = array('IDF_Precondition::accessIssues',
'Pluf_Precondition::loginRequired');
public function myIssues($request, $match) public function myIssues($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -124,7 +126,8 @@ class IDF_Views_Issue
$request); $request);
} }
public $create_precond = array('Pluf_Precondition::loginRequired'); public $create_precond = array('IDF_Precondition::accessIssues',
'Pluf_Precondition::loginRequired');
public function create($request, $match) public function create($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -157,6 +160,7 @@ class IDF_Views_Issue
$request); $request);
} }
public $view_precond = array('IDF_Precondition::accessIssues');
public function view($request, $match) public function view($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -204,6 +208,7 @@ class IDF_Views_Issue
/** /**
* View list of issues for a given project with a given status. * View list of issues for a given project with a given status.
*/ */
public $listStatus_precond = array('IDF_Precondition::accessIssues');
public function listStatus($request, $match) public function listStatus($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
@ -246,6 +251,7 @@ class IDF_Views_Issue
/** /**
* View list of issues for a given project with a given label. * View list of issues for a given project with a given label.
*/ */
public $listLabel_precond = array('IDF_Precondition::accessIssues');
public function listLabel($request, $match) public function listLabel($request, $match)
{ {
$prj = $request->project; $prj = $request->project;

View File

@ -39,9 +39,12 @@ class IDF_Views_Project
$prj = $request->project; $prj = $request->project;
$team = $prj->getMembershipData(); $team = $prj->getMembershipData();
$title = (string) $prj; $title = (string) $prj;
$downloads = array();
if ($request->rights['hasDownloadsAccess']) {
$tags = IDF_Views_Download::getDownloadTags($prj); $tags = IDF_Views_Download::getDownloadTags($prj);
// the first tag is the featured, the last is the deprecated. // the first tag is the featured, the last is the deprecated.
$downloads = $tags[0]->get_idf_upload_list(); $downloads = $tags[0]->get_idf_upload_list();
}
return Pluf_Shortcuts_RenderToResponse('project-home.html', return Pluf_Shortcuts_RenderToResponse('project-home.html',
array( array(
'page_title' => $title, 'page_title' => $title,
@ -201,4 +204,49 @@ class IDF_Views_Project
), ),
$request); $request);
} }
/**
* Administrate the access rights to the tabs.
*/
public $adminTabs_precond = array('IDF_Precondition::projectOwner');
public function adminTabs($request, $match)
{
$prj = $request->project;
$title = sprintf(__('%s Tabs Access Rights'), (string) $prj);
$extra = array(
'conf' => $request->conf,
);
if ($request->method == 'POST') {
$form = new IDF_Form_TabsConf($request->POST, $extra);
if ($form->isValid()) {
foreach ($form->cleaned_data as $key=>$val) {
$request->conf->setVal($key, $val);
}
$request->user->setMessage(__('The project tabs access rights have been saved.'));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::adminTabs',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
}
} else {
$params = array();
$keys = array('downloads_access_rights', 'source_access_rights',
'issues_access_rights');
foreach ($keys as $key) {
$_val = $request->conf->getVal($key, false);
if ($_val !== false) {
$params[$key] = $_val;
}
}
if (count($params) == 0) {
$params = null; //Nothing in the db, so new form.
}
$form = new IDF_Form_TabsConf($params, $extra);
}
return Pluf_Shortcuts_RenderToResponse('admin/tabs.html',
array(
'page_title' => $title,
'form' => $form,
),
$request);
}
} }

View File

@ -31,6 +31,7 @@ Pluf::loadFunction('Pluf_Shortcuts_GetFormForModel');
*/ */
class IDF_Views_Source class IDF_Views_Source
{ {
public $changeLog_precond = array('IDF_Precondition::accessSource');
public function changeLog($request, $match) public function changeLog($request, $match)
{ {
$title = sprintf(__('%s Git Change Log'), (string) $request->project); $title = sprintf(__('%s Git Change Log'), (string) $request->project);
@ -49,6 +50,7 @@ class IDF_Views_Source
$request); $request);
} }
public $treeBase_precond = array('IDF_Precondition::accessSource');
public function treeBase($request, $match) public function treeBase($request, $match)
{ {
$title = sprintf(__('%s Git Source Tree'), (string) $request->project); $title = sprintf(__('%s Git Source Tree'), (string) $request->project);
@ -78,6 +80,7 @@ class IDF_Views_Source
$request); $request);
} }
public $tree_precond = array('IDF_Precondition::accessSource');
public function tree($request, $match) public function tree($request, $match)
{ {
$title = sprintf(__('%s Git Source Tree'), (string) $request->project); $title = sprintf(__('%s Git Source Tree'), (string) $request->project);
@ -149,6 +152,7 @@ class IDF_Views_Source
return '<span class="breadcrumb">'.implode('<span class="sep">'.$sep.'</span>', $out).'</span>'; return '<span class="breadcrumb">'.implode('<span class="sep">'.$sep.'</span>', $out).'</span>';
} }
public $commit_precond = array('IDF_Precondition::accessSource');
public function commit($request, $match) public function commit($request, $match)
{ {
$git = new IDF_Git($request->project->getGitRepository()); $git = new IDF_Git($request->project->getGitRepository());
@ -182,6 +186,7 @@ class IDF_Views_Source
* Get a zip archive of the current commit. * Get a zip archive of the current commit.
* *
*/ */
public $download_precond = array('IDF_Precondition::accessSource');
public function download($request, $match) public function download($request, $match)
{ {
$commit = trim($match[2]); $commit = trim($match[2]);

View File

@ -103,8 +103,8 @@ $cfg['db_database'] = 'website';
$cfg['installed_apps'] = array('Pluf', 'IDF'); $cfg['installed_apps'] = array('Pluf', 'IDF');
$cfg['pluf_use_rowpermission'] = true; $cfg['pluf_use_rowpermission'] = true;
$cfg['middleware_classes'] = array( $cfg['middleware_classes'] = array(
'IDF_Middleware',
'Pluf_Middleware_Session', 'Pluf_Middleware_Session',
'IDF_Middleware',
'Pluf_Middleware_Translation', 'Pluf_Middleware_Translation',
); );
$cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor'); $cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor');

View File

@ -206,4 +206,10 @@ $ctl[] = array('regex' => '#^/p/(\w+)/admin/members/$#',
'model' => 'IDF_Views_Project', 'model' => 'IDF_Views_Project',
'method' => 'adminMembers'); 'method' => 'adminMembers');
$ctl[] = array('regex' => '#^/p/(\w+)/admin/tabs/$#',
'base' => $base,
'priority' => 4,
'model' => 'IDF_Views_Project',
'method' => 'adminTabs');
return $ctl; return $ctl;

View File

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: InDefero\n" "Project-Id-Version: InDefero\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-08-06 22:28+0200\n" "POT-Creation-Date: 2008-08-07 15:31+0200\n"
"PO-Revision-Date: 2008-08-06 22:30+0100\n" "PO-Revision-Date: 2008-08-07 15:34+0100\n"
"Last-Translator: Loïc d'Anterroches <titoo@users.sourceforge.net>\n" "Last-Translator: Loïc d'Anterroches <titoo@users.sourceforge.net>\n"
"Language-Team: Translation team <titoo@users.sourceforge.net>\n" "Language-Team: Translation team <titoo@users.sourceforge.net>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -101,6 +101,7 @@ msgid "modification date"
msgstr "date de modification" msgstr "date de modification"
#: IDF/Middleware.php:50 #: IDF/Middleware.php:50
#: IDF/Middleware.php:51
#, php-format #, php-format
msgid "The page <em>%s</em> was not found on the server." msgid "The page <em>%s</em> was not found on the server."
msgstr "Cette page <em>%s</em> n'a pas été trouvée sur le serveur." msgstr "Cette page <em>%s</em> n'a pas été trouvée sur le serveur."
@ -186,48 +187,58 @@ msgid "Here to Help You!"
msgstr "Ici pour vous aider !" msgstr "Ici pour vous aider !"
#: IDF/Views/Project.php:62 #: IDF/Views/Project.php:62
#: IDF/Views/Project.php:65
#, php-format #, php-format
msgid "%s Project Summary" msgid "%s Project Summary"
msgstr "Résumé du projet %s" msgstr "Résumé du projet %s"
#: IDF/Views/Project.php:69 #: IDF/Views/Project.php:69
#: IDF/Views/Project.php:72
msgid "The project has been updated." msgid "The project has been updated."
msgstr "Le projet a été mis à jour." msgstr "Le projet a été mis à jour."
#: IDF/Views/Project.php:93 #: IDF/Views/Project.php:93
#: IDF/Views/Project.php:96
#, php-format #, php-format
msgid "%s Issue Tracking Configuration" msgid "%s Issue Tracking Configuration"
msgstr "Configuration du gestionnaire de tickets de %s" msgstr "Configuration du gestionnaire de tickets de %s"
#: IDF/Views/Project.php:102 #: IDF/Views/Project.php:102
#: IDF/Views/Project.php:105
msgid "The issue tracking configuration has been saved." msgid "The issue tracking configuration has been saved."
msgstr "La configuration du gestionnaire de tickets a été sauvegardée." msgstr "La configuration du gestionnaire de tickets a été sauvegardée."
#: IDF/Views/Project.php:137 #: IDF/Views/Project.php:137
#: IDF/Views/Project.php:140
#, php-format #, php-format
msgid "%s Downloads Configuration" msgid "%s Downloads Configuration"
msgstr "Configuration des Téléchargements de %s" msgstr "Configuration des Téléchargements de %s"
#: IDF/Views/Project.php:146 #: IDF/Views/Project.php:146
#: IDF/Views/Project.php:149
msgid "The downloads configuration has been saved." msgid "The downloads configuration has been saved."
msgstr "La configuration des téléchargements a été sauvegardée." msgstr "La configuration des téléchargements a été sauvegardée."
#: IDF/Views/Project.php:180 #: IDF/Views/Project.php:180
#: IDF/Views/Project.php:183
#, php-format #, php-format
msgid "%s Project Members" msgid "%s Project Members"
msgstr "Membres du projet %s" msgstr "Membres du projet %s"
#: IDF/Views/Project.php:189 #: IDF/Views/Project.php:189
#: IDF/Views/Project.php:192
msgid "The project membership has been saved." msgid "The project membership has been saved."
msgstr "Les membres du projet ont été sauvegardés." msgstr "Les membres du projet ont été sauvegardés."
#: IDF/Views/Download.php:44 #: IDF/Views/Download.php:44
#: IDF/Views/Download.php:45
#, php-format #, php-format
msgid "%s Downloads" msgid "%s Downloads"
msgstr "Téléchargements de %s" msgstr "Téléchargements de %s"
#: IDF/Views/Download.php:50 #: IDF/Views/Download.php:50
#: IDF/Views/Download.php:52 #: IDF/Views/Download.php:52
#: IDF/Views/Download.php:51
msgid "This table shows the files to download." msgid "This table shows the files to download."
msgstr "Ce tableau présente la liste des fichiers en téléchargement." msgstr "Ce tableau présente la liste des fichiers en téléchargement."
@ -237,6 +248,8 @@ msgstr "Ce tableau présente la liste des fichiers en téléchargement."
#: IDF/Views/Download.php:56 #: IDF/Views/Download.php:56
#: IDF/Views/Download.php:212 #: IDF/Views/Download.php:212
#: IDF/Views/Download.php:218 #: IDF/Views/Download.php:218
#: IDF/Views/Download.php:55
#: IDF/Views/Download.php:223
msgid "File" msgid "File"
msgstr "Fichier" msgstr "Fichier"
@ -252,6 +265,12 @@ msgstr "Fichier"
#: IDF/Views/Download.php:57 #: IDF/Views/Download.php:57
#: IDF/Views/Download.php:213 #: IDF/Views/Download.php:213
#: IDF/Views/Download.php:219 #: IDF/Views/Download.php:219
#: IDF/Views/Download.php:56
#: IDF/Views/Download.php:224
#: IDF/Views/Issue.php:58
#: IDF/Views/Issue.php:111
#: IDF/Views/Issue.php:233
#: IDF/Views/Issue.php:287
msgid "Summary" msgid "Summary"
msgstr "Résumé" msgstr "Résumé"
@ -260,6 +279,8 @@ msgstr "Résumé"
#: IDF/Views/Download.php:58 #: IDF/Views/Download.php:58
#: IDF/Views/Download.php:214 #: IDF/Views/Download.php:214
#: IDF/Views/Download.php:220 #: IDF/Views/Download.php:220
#: IDF/Views/Download.php:57
#: IDF/Views/Download.php:225
msgid "Size" msgid "Size"
msgstr "Taille" msgstr "Taille"
@ -267,6 +288,8 @@ msgstr "Taille"
#: IDF/Views/Download.php:59 #: IDF/Views/Download.php:59
#: IDF/Views/Download.php:215 #: IDF/Views/Download.php:215
#: IDF/Views/Download.php:221 #: IDF/Views/Download.php:221
#: IDF/Views/Download.php:58
#: IDF/Views/Download.php:226
msgid "Uploaded" msgid "Uploaded"
msgstr "Mis en ligne" msgstr "Mis en ligne"
@ -274,11 +297,14 @@ msgstr "Mis en ligne"
#: IDF/Views/Download.php:63 #: IDF/Views/Download.php:63
#: IDF/Views/Download.php:219 #: IDF/Views/Download.php:219
#: IDF/Views/Download.php:225 #: IDF/Views/Download.php:225
#: IDF/Views/Download.php:62
#: IDF/Views/Download.php:230
msgid "No downloads were found." msgid "No downloads were found."
msgstr "Aucun fichier n'a été trouvé." msgstr "Aucun fichier n'a été trouvé."
#: IDF/Views/Download.php:81 #: IDF/Views/Download.php:81
#: IDF/Views/Download.php:83 #: IDF/Views/Download.php:83
#: IDF/Views/Download.php:85
#, php-format #, php-format
msgid "Download %s" msgid "Download %s"
msgstr "Télécharger %s" msgstr "Télécharger %s"
@ -286,6 +312,7 @@ msgstr "Télécharger %s"
#: IDF/Views/Download.php:94 #: IDF/Views/Download.php:94
#: IDF/Views/Download.php:96 #: IDF/Views/Download.php:96
#: IDF/Views/Download.php:100 #: IDF/Views/Download.php:100
#: IDF/Views/Download.php:102
#, php-format #, php-format
msgid "The file <a href=\"%1$s\">%2$s</a> has been updated." msgid "The file <a href=\"%1$s\">%2$s</a> has been updated."
msgstr "Le fichier <a href=\"%1$s\">%2$s</a> a été mis à jour." msgstr "Le fichier <a href=\"%1$s\">%2$s</a> a été mis à jour."
@ -295,23 +322,28 @@ msgstr "Le fichier <a href=\"%1$s\">%2$s</a> a été mis à jour."
#: IDF/gettexttemplates/downloads/index.html.php:3 #: IDF/gettexttemplates/downloads/index.html.php:3
#: IDF/Views/Download.php:137 #: IDF/Views/Download.php:137
#: IDF/Views/Download.php:143 #: IDF/Views/Download.php:143
#: IDF/Views/Download.php:147
msgid "New Download" msgid "New Download"
msgstr "Nouveau téléchargement" msgstr "Nouveau téléchargement"
#: IDF/Views/Download.php:144 #: IDF/Views/Download.php:144
#: IDF/Views/Download.php:146 #: IDF/Views/Download.php:146
#: IDF/Views/Download.php:152 #: IDF/Views/Download.php:152
#: IDF/Views/Download.php:156
#, php-format #, php-format
msgid "The <a href=\"%s\">file</a> has been uploaded." msgid "The <a href=\"%s\">file</a> has been uploaded."
msgstr "Le <a href=\"%s\">fichier</a> a été mis en ligne." msgstr "Le <a href=\"%s\">fichier</a> a été mis en ligne."
#: IDF/Views/Issue.php:40 #: IDF/Views/Issue.php:40
#: IDF/Views/Issue.php:41
#, php-format #, php-format
msgid "%s Recent Issues" msgid "%s Recent Issues"
msgstr "Tickets récents de %s" msgstr "Tickets récents de %s"
#: IDF/Views/Issue.php:49 #: IDF/Views/Issue.php:49
#: IDF/Views/Issue.php:103 #: IDF/Views/Issue.php:103
#: IDF/Views/Issue.php:50
#: IDF/Views/Issue.php:105
msgid "This table shows the open recent issues." msgid "This table shows the open recent issues."
msgstr "Ce tableau montre les tickets récents." msgstr "Ce tableau montre les tickets récents."
@ -319,6 +351,10 @@ msgstr "Ce tableau montre les tickets récents."
#: IDF/Views/Issue.php:108 #: IDF/Views/Issue.php:108
#: IDF/Views/Issue.php:227 #: IDF/Views/Issue.php:227
#: IDF/Views/Issue.php:280 #: IDF/Views/Issue.php:280
#: IDF/Views/Issue.php:57
#: IDF/Views/Issue.php:110
#: IDF/Views/Issue.php:232
#: IDF/Views/Issue.php:286
msgid "Id" msgid "Id"
msgstr "Id" msgstr "Id"
@ -328,6 +364,10 @@ msgstr "Id"
#: IDF/Views/Issue.php:282 #: IDF/Views/Issue.php:282
#: IDF/Form/IssueCreate.php:70 #: IDF/Form/IssueCreate.php:70
#: IDF/Form/IssueUpdate.php:66 #: IDF/Form/IssueUpdate.php:66
#: IDF/Views/Issue.php:59
#: IDF/Views/Issue.php:112
#: IDF/Views/Issue.php:234
#: IDF/Views/Issue.php:288
msgid "Status" msgid "Status"
msgstr "Statut" msgstr "Statut"
@ -335,6 +375,10 @@ msgstr "Statut"
#: IDF/Views/Issue.php:111 #: IDF/Views/Issue.php:111
#: IDF/Views/Issue.php:230 #: IDF/Views/Issue.php:230
#: IDF/Views/Issue.php:283 #: IDF/Views/Issue.php:283
#: IDF/Views/Issue.php:60
#: IDF/Views/Issue.php:113
#: IDF/Views/Issue.php:235
#: IDF/Views/Issue.php:289
msgid "Last Updated" msgid "Last Updated"
msgstr "Dernière mise à jour" msgstr "Dernière mise à jour"
@ -342,58 +386,73 @@ msgstr "Dernière mise à jour"
#: IDF/Views/Issue.php:115 #: IDF/Views/Issue.php:115
#: IDF/Views/Issue.php:234 #: IDF/Views/Issue.php:234
#: IDF/Views/Issue.php:287 #: IDF/Views/Issue.php:287
#: IDF/Views/Issue.php:64
#: IDF/Views/Issue.php:117
#: IDF/Views/Issue.php:239
#: IDF/Views/Issue.php:293
msgid "No issues were found." msgid "No issues were found."
msgstr "Aucun ticket n'a été trouvé." msgstr "Aucun ticket n'a été trouvé."
#: IDF/Views/Issue.php:87 #: IDF/Views/Issue.php:87
#: IDF/Views/Issue.php:89
#, php-format #, php-format
msgid "My Submitted %s Issues" msgid "My Submitted %s Issues"
msgstr "Mes tickets soumis pour %s" msgstr "Mes tickets soumis pour %s"
#: IDF/Views/Issue.php:90 #: IDF/Views/Issue.php:90
#: IDF/Views/Issue.php:92
#, php-format #, php-format
msgid "My Working %s Issues" msgid "My Working %s Issues"
msgstr "Mes tickets en cours pour %s" msgstr "Mes tickets en cours pour %s"
#: IDF/Views/Issue.php:131 #: IDF/Views/Issue.php:131
#: IDF/Views/Issue.php:134
msgid "Submit a new issue" msgid "Submit a new issue"
msgstr "Soumettre un nouveau ticket" msgstr "Soumettre un nouveau ticket"
#: IDF/Views/Issue.php:143 #: IDF/Views/Issue.php:143
#: IDF/Views/Issue.php:146
#, php-format #, php-format
msgid "<a href=\"%s\">Issue %d</a> has been created." msgid "<a href=\"%s\">Issue %d</a> has been created."
msgstr "Le <a href=\"%s\">ticket %d</a> a été créé." msgstr "Le <a href=\"%s\">ticket %d</a> a été créé."
#: IDF/Views/Issue.php:168 #: IDF/Views/Issue.php:168
#: IDF/Views/Issue.php:172
#, php-format #, php-format
msgid "Issue <a href=\"%s\">%d</a>: %s" msgid "Issue <a href=\"%s\">%d</a>: %s"
msgstr "Ticket <a href=\"%s\">%d</a> : %s" msgstr "Ticket <a href=\"%s\">%d</a> : %s"
#: IDF/Views/Issue.php:184 #: IDF/Views/Issue.php:184
#: IDF/Views/Issue.php:188
#, php-format #, php-format
msgid "<a href=\"%s\">Issue %d</a> has been updated." msgid "<a href=\"%s\">Issue %d</a> has been updated."
msgstr "Le <a href=\"%s\">ticket %d</a> a été mise à jour." msgstr "Le <a href=\"%s\">ticket %d</a> a été mise à jour."
#: IDF/Views/Issue.php:211 #: IDF/Views/Issue.php:211
#: IDF/Views/Issue.php:216
#, php-format #, php-format
msgid "%s Closed Issues" msgid "%s Closed Issues"
msgstr "Tickets fermés de %s" msgstr "Tickets fermés de %s"
#: IDF/Views/Issue.php:220 #: IDF/Views/Issue.php:220
#: IDF/Views/Issue.php:225
msgid "This table shows the closed issues." msgid "This table shows the closed issues."
msgstr "Ce tableau montre les tickets fermés." msgstr "Ce tableau montre les tickets fermés."
#: IDF/Views/Issue.php:258 #: IDF/Views/Issue.php:258
#: IDF/Views/Issue.php:264
#, php-format #, php-format
msgid "%1$s Issues with Label %2$s" msgid "%1$s Issues with Label %2$s"
msgstr "%1$s tickets avec l'étiquette %2$s" msgstr "%1$s tickets avec l'étiquette %2$s"
#: IDF/Views/Issue.php:261 #: IDF/Views/Issue.php:261
#: IDF/Views/Issue.php:267
#, php-format #, php-format
msgid "%1$s Closed Issues with Label %2$s" msgid "%1$s Closed Issues with Label %2$s"
msgstr "Tickets fermés de %1$s avec l'étiquette %2$s" msgstr "Tickets fermés de %1$s avec l'étiquette %2$s"
#: IDF/Views/Issue.php:273 #: IDF/Views/Issue.php:273
#: IDF/Views/Issue.php:279
#, php-format #, php-format
msgid "This table shows the issues with label %s." msgid "This table shows the issues with label %s."
msgstr "Ce tableau montre les tickets avec l'étiquette %s." msgstr "Ce tableau montre les tickets avec l'étiquette %s."
@ -429,16 +488,19 @@ msgid "Project Home"
msgstr "Page d'Accueil" msgstr "Page d'Accueil"
#: IDF/gettexttemplates/base.html.php:9 #: IDF/gettexttemplates/base.html.php:9
#: IDF/Form/TabsConf.php:36
msgid "Issues" msgid "Issues"
msgstr "Tickets" msgstr "Tickets"
#: IDF/gettexttemplates/base.html.php:10 #: IDF/gettexttemplates/base.html.php:10
#: IDF/gettexttemplates/downloads/base.html.php:3 #: IDF/gettexttemplates/downloads/base.html.php:3
#: IDF/gettexttemplates/admin/base.html.php:6 #: IDF/gettexttemplates/admin/base.html.php:6
#: IDF/Form/TabsConf.php:34
msgid "Downloads" msgid "Downloads"
msgstr "Téléchargements" msgstr "Téléchargements"
#: IDF/gettexttemplates/base.html.php:11 #: IDF/gettexttemplates/base.html.php:11
#: IDF/Form/TabsConf.php:35
msgid "Source" msgid "Source"
msgstr "Source" msgstr "Source"
@ -636,6 +698,7 @@ msgstr ""
#: IDF/gettexttemplates/admin/issue-tracking.html.php:8 #: IDF/gettexttemplates/admin/issue-tracking.html.php:8
#: IDF/gettexttemplates/admin/members.html.php:13 #: IDF/gettexttemplates/admin/members.html.php:13
#: IDF/gettexttemplates/admin/summary.html.php:8 #: IDF/gettexttemplates/admin/summary.html.php:8
#: IDF/gettexttemplates/admin/tabs.html.php:5
msgid "Save Changes" msgid "Save Changes"
msgstr "Enregistrer les changements" msgstr "Enregistrer les changements"
@ -1214,42 +1277,51 @@ msgid "No changes were entered."
msgstr "Aucun changement n'a été entré." msgstr "Aucun changement n'a été entré."
#: IDF/Form/MembersConf.php:46 #: IDF/Form/MembersConf.php:46
#: IDF/Form/TabsConf.php:47
msgid "Project owners" msgid "Project owners"
msgstr "Propriétaires du projet" msgstr "Propriétaires du projet"
#: IDF/Form/MembersConf.php:54 #: IDF/Form/MembersConf.php:54
#: IDF/Form/TabsConf.php:46
msgid "Project members" msgid "Project members"
msgstr "Membres du projet" msgstr "Membres du projet"
#: IDF/Views/Source.php:36 #: IDF/Views/Source.php:36
#: IDF/Views/Source.php:37
#, php-format #, php-format
msgid "%s Git Change Log" msgid "%s Git Change Log"
msgstr "Changements Git de %s" msgstr "Changements Git de %s"
#: IDF/Views/Source.php:54 #: IDF/Views/Source.php:54
#: IDF/Views/Source.php:83 #: IDF/Views/Source.php:83
#: IDF/Views/Source.php:56
#: IDF/Views/Source.php:86
#, php-format #, php-format
msgid "%s Git Source Tree" msgid "%s Git Source Tree"
msgstr "Arbre des sources Git de %s" msgstr "Arbre des sources Git de %s"
#: IDF/Views/Source.php:164 #: IDF/Views/Source.php:164
#: IDF/Views/Source.php:168
#, php-format #, php-format
msgid "%s Commit Details" msgid "%s Commit Details"
msgstr "Détails d'un commit de %s" msgstr "Détails d'un commit de %s"
#: IDF/Views/Source.php:165 #: IDF/Views/Source.php:165
#: IDF/Views/Source.php:169
#, php-format #, php-format
msgid "%s Commit Details - %s" msgid "%s Commit Details - %s"
msgstr "Détails d'un commit de %s - %s" msgstr "Détails d'un commit de %s - %s"
#: IDF/Views/Download.php:199 #: IDF/Views/Download.php:199
#: IDF/Views/Download.php:205 #: IDF/Views/Download.php:205
#: IDF/Views/Download.php:210
#, php-format #, php-format
msgid "%1$s Downloads with Label %2$s" msgid "%1$s Downloads with Label %2$s"
msgstr "Téléchargements avec l'étiquette %2$s de %1$s" msgstr "Téléchargements avec l'étiquette %2$s de %1$s"
#: IDF/Views/Download.php:207 #: IDF/Views/Download.php:207
#: IDF/Views/Download.php:213 #: IDF/Views/Download.php:213
#: IDF/Views/Download.php:218
#, php-format #, php-format
msgid "This table shows the downloads with label %s." msgid "This table shows the downloads with label %s."
msgstr "Ce tableau montre les téléchargements avec l'étiquette %s." msgstr "Ce tableau montre les téléchargements avec l'étiquette %s."
@ -1258,3 +1330,40 @@ msgstr "Ce tableau montre les téléchargements avec l'étiquette %s."
msgid "<strong>Attention!</strong> This file is marked as deprecated, download it only if you are sure you need this specific version." msgid "<strong>Attention!</strong> This file is marked as deprecated, download it only if you are sure you need this specific version."
msgstr "<strong>Attention !</strong> Ce fichier est marqué comme obsolète, téléchargez ce fichier uniquement si vous avez besoin de cette version." msgstr "<strong>Attention !</strong> Ce fichier est marqué comme obsolète, téléchargez ce fichier uniquement si vous avez besoin de cette version."
#: IDF/Views/Project.php:215
#, php-format
msgid "%s Tabs Access Rights"
msgstr "Accès aux onglets de %s"
#: IDF/Views/Project.php:225
msgid "The project tabs access rights have been saved."
msgstr "Les droits d'accès aux onglets du projet ont été sauvegardés."
#: IDF/gettexttemplates/admin/base.html.php:7
msgid "Tabs Access"
msgstr "Accès aux onglets"
#: IDF/gettexttemplates/admin/tabs.html.php:3
msgid "You can configure here the project tabs access rights."
msgstr "Vous pouvez configurer ici les droits d'accès aux onglets."
#: IDF/gettexttemplates/admin/tabs.html.php:4
msgid "The form contains some errors. Please correct them to update the access rights."
msgstr "Le formulaire contient des erreurs. Merci de les corriger pour mettre à jour les droits d'accès."
#: IDF/gettexttemplates/admin/tabs.html.php:6
msgid "Instructions:"
msgstr "Instructions :"
#: IDF/Form/TabsConf.php:44
msgid "Open to all"
msgstr "Ouvert à tous"
#: IDF/Form/TabsConf.php:45
msgid "Signed in users"
msgstr "Utilisateurs authentifiés"
#: IDF/Form/TabsConf.php:48
msgid "Closed"
msgstr "Fermé"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-08-06 22:28+0200\n" "POT-Creation-Date: 2008-08-07 15:31+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -92,7 +92,7 @@ msgstr ""
msgid "modification date" msgid "modification date"
msgstr "" msgstr ""
#: IDF/Middleware.php:50 #: IDF/Middleware.php:50 IDF/Middleware.php:51
#, php-format #, php-format
msgid "The page <em>%s</em> was not found on the server." msgid "The page <em>%s</em> was not found on the server."
msgstr "" msgstr ""
@ -176,54 +176,56 @@ msgstr ""
msgid "Here to Help You!" msgid "Here to Help You!"
msgstr "" msgstr ""
#: IDF/Views/Project.php:62 #: IDF/Views/Project.php:62 IDF/Views/Project.php:65
#, php-format #, php-format
msgid "%s Project Summary" msgid "%s Project Summary"
msgstr "" msgstr ""
#: IDF/Views/Project.php:69 #: IDF/Views/Project.php:69 IDF/Views/Project.php:72
msgid "The project has been updated." msgid "The project has been updated."
msgstr "" msgstr ""
#: IDF/Views/Project.php:93 #: IDF/Views/Project.php:93 IDF/Views/Project.php:96
#, php-format #, php-format
msgid "%s Issue Tracking Configuration" msgid "%s Issue Tracking Configuration"
msgstr "" msgstr ""
#: IDF/Views/Project.php:102 #: IDF/Views/Project.php:102 IDF/Views/Project.php:105
msgid "The issue tracking configuration has been saved." msgid "The issue tracking configuration has been saved."
msgstr "" msgstr ""
#: IDF/Views/Project.php:137 #: IDF/Views/Project.php:137 IDF/Views/Project.php:140
#, php-format #, php-format
msgid "%s Downloads Configuration" msgid "%s Downloads Configuration"
msgstr "" msgstr ""
#: IDF/Views/Project.php:146 #: IDF/Views/Project.php:146 IDF/Views/Project.php:149
msgid "The downloads configuration has been saved." msgid "The downloads configuration has been saved."
msgstr "" msgstr ""
#: IDF/Views/Project.php:180 #: IDF/Views/Project.php:180 IDF/Views/Project.php:183
#, php-format #, php-format
msgid "%s Project Members" msgid "%s Project Members"
msgstr "" msgstr ""
#: IDF/Views/Project.php:189 #: IDF/Views/Project.php:189 IDF/Views/Project.php:192
msgid "The project membership has been saved." msgid "The project membership has been saved."
msgstr "" msgstr ""
#: IDF/Views/Download.php:44 #: IDF/Views/Download.php:44 IDF/Views/Download.php:45
#, php-format #, php-format
msgid "%s Downloads" msgid "%s Downloads"
msgstr "" msgstr ""
#: IDF/Views/Download.php:50 IDF/Views/Download.php:52 #: IDF/Views/Download.php:50 IDF/Views/Download.php:52
#: IDF/Views/Download.php:51
msgid "This table shows the files to download." msgid "This table shows the files to download."
msgstr "" msgstr ""
#: IDF/Views/Download.php:54 IDF/gettexttemplates/source/tree.html.php:6 #: IDF/Views/Download.php:54 IDF/gettexttemplates/source/tree.html.php:6
#: IDF/Form/Upload.php:49 IDF/Views/Download.php:56 IDF/Views/Download.php:212 #: IDF/Form/Upload.php:49 IDF/Views/Download.php:56 IDF/Views/Download.php:212
#: IDF/Views/Download.php:218 #: IDF/Views/Download.php:218 IDF/Views/Download.php:55
#: IDF/Views/Download.php:223
msgid "File" msgid "File"
msgstr "" msgstr ""
@ -232,127 +234,138 @@ msgstr ""
#: IDF/Form/IssueCreate.php:50 IDF/Form/UpdateUpload.php:42 #: IDF/Form/IssueCreate.php:50 IDF/Form/UpdateUpload.php:42
#: IDF/Form/IssueUpdate.php:45 IDF/Views/Download.php:57 #: IDF/Form/IssueUpdate.php:45 IDF/Views/Download.php:57
#: IDF/Views/Download.php:213 IDF/Views/Download.php:219 #: IDF/Views/Download.php:213 IDF/Views/Download.php:219
#: IDF/Views/Download.php:56 IDF/Views/Download.php:224 IDF/Views/Issue.php:58
#: IDF/Views/Issue.php:111 IDF/Views/Issue.php:233 IDF/Views/Issue.php:287
msgid "Summary" msgid "Summary"
msgstr "" msgstr ""
#: IDF/Views/Download.php:56 IDF/gettexttemplates/source/tree.html.php:9 #: IDF/Views/Download.php:56 IDF/gettexttemplates/source/tree.html.php:9
#: IDF/Views/Download.php:58 IDF/Views/Download.php:214 #: IDF/Views/Download.php:58 IDF/Views/Download.php:214
#: IDF/Views/Download.php:220 #: IDF/Views/Download.php:220 IDF/Views/Download.php:57
#: IDF/Views/Download.php:225
msgid "Size" msgid "Size"
msgstr "" msgstr ""
#: IDF/Views/Download.php:57 IDF/Views/Download.php:59 #: IDF/Views/Download.php:57 IDF/Views/Download.php:59
#: IDF/Views/Download.php:215 IDF/Views/Download.php:221 #: IDF/Views/Download.php:215 IDF/Views/Download.php:221
#: IDF/Views/Download.php:58 IDF/Views/Download.php:226
msgid "Uploaded" msgid "Uploaded"
msgstr "" msgstr ""
#: IDF/Views/Download.php:61 IDF/Views/Download.php:63 #: IDF/Views/Download.php:61 IDF/Views/Download.php:63
#: IDF/Views/Download.php:219 IDF/Views/Download.php:225 #: IDF/Views/Download.php:219 IDF/Views/Download.php:225
#: IDF/Views/Download.php:62 IDF/Views/Download.php:230
msgid "No downloads were found." msgid "No downloads were found."
msgstr "" msgstr ""
#: IDF/Views/Download.php:81 IDF/Views/Download.php:83 #: IDF/Views/Download.php:81 IDF/Views/Download.php:83
#: IDF/Views/Download.php:85
#, php-format #, php-format
msgid "Download %s" msgid "Download %s"
msgstr "" msgstr ""
#: IDF/Views/Download.php:94 IDF/Views/Download.php:96 #: IDF/Views/Download.php:94 IDF/Views/Download.php:96
#: IDF/Views/Download.php:100 #: IDF/Views/Download.php:100 IDF/Views/Download.php:102
#, php-format #, php-format
msgid "The file <a href=\"%1$s\">%2$s</a> has been updated." msgid "The file <a href=\"%1$s\">%2$s</a> has been updated."
msgstr "" msgstr ""
#: IDF/Views/Download.php:135 IDF/gettexttemplates/downloads/base.html.php:4 #: IDF/Views/Download.php:135 IDF/gettexttemplates/downloads/base.html.php:4
#: IDF/gettexttemplates/downloads/index.html.php:3 IDF/Views/Download.php:137 #: IDF/gettexttemplates/downloads/index.html.php:3 IDF/Views/Download.php:137
#: IDF/Views/Download.php:143 #: IDF/Views/Download.php:143 IDF/Views/Download.php:147
msgid "New Download" msgid "New Download"
msgstr "" msgstr ""
#: IDF/Views/Download.php:144 IDF/Views/Download.php:146 #: IDF/Views/Download.php:144 IDF/Views/Download.php:146
#: IDF/Views/Download.php:152 #: IDF/Views/Download.php:152 IDF/Views/Download.php:156
#, php-format #, php-format
msgid "The <a href=\"%s\">file</a> has been uploaded." msgid "The <a href=\"%s\">file</a> has been uploaded."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:40 #: IDF/Views/Issue.php:40 IDF/Views/Issue.php:41
#, php-format #, php-format
msgid "%s Recent Issues" msgid "%s Recent Issues"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:49 IDF/Views/Issue.php:103 #: IDF/Views/Issue.php:49 IDF/Views/Issue.php:103 IDF/Views/Issue.php:50
#: IDF/Views/Issue.php:105
msgid "This table shows the open recent issues." msgid "This table shows the open recent issues."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:56 IDF/Views/Issue.php:108 IDF/Views/Issue.php:227 #: IDF/Views/Issue.php:56 IDF/Views/Issue.php:108 IDF/Views/Issue.php:227
#: IDF/Views/Issue.php:280 #: IDF/Views/Issue.php:280 IDF/Views/Issue.php:57 IDF/Views/Issue.php:110
#: IDF/Views/Issue.php:232 IDF/Views/Issue.php:286
msgid "Id" msgid "Id"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:58 IDF/Views/Issue.php:110 IDF/Views/Issue.php:229 #: IDF/Views/Issue.php:58 IDF/Views/Issue.php:110 IDF/Views/Issue.php:229
#: IDF/Views/Issue.php:282 IDF/Form/IssueCreate.php:70 #: IDF/Views/Issue.php:282 IDF/Form/IssueCreate.php:70
#: IDF/Form/IssueUpdate.php:66 #: IDF/Form/IssueUpdate.php:66 IDF/Views/Issue.php:59 IDF/Views/Issue.php:112
#: IDF/Views/Issue.php:234 IDF/Views/Issue.php:288
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:59 IDF/Views/Issue.php:111 IDF/Views/Issue.php:230 #: IDF/Views/Issue.php:59 IDF/Views/Issue.php:111 IDF/Views/Issue.php:230
#: IDF/Views/Issue.php:283 #: IDF/Views/Issue.php:283 IDF/Views/Issue.php:60 IDF/Views/Issue.php:113
#: IDF/Views/Issue.php:235 IDF/Views/Issue.php:289
msgid "Last Updated" msgid "Last Updated"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:63 IDF/Views/Issue.php:115 IDF/Views/Issue.php:234 #: IDF/Views/Issue.php:63 IDF/Views/Issue.php:115 IDF/Views/Issue.php:234
#: IDF/Views/Issue.php:287 #: IDF/Views/Issue.php:287 IDF/Views/Issue.php:64 IDF/Views/Issue.php:117
#: IDF/Views/Issue.php:239 IDF/Views/Issue.php:293
msgid "No issues were found." msgid "No issues were found."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:87 #: IDF/Views/Issue.php:87 IDF/Views/Issue.php:89
#, php-format #, php-format
msgid "My Submitted %s Issues" msgid "My Submitted %s Issues"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:90 #: IDF/Views/Issue.php:90 IDF/Views/Issue.php:92
#, php-format #, php-format
msgid "My Working %s Issues" msgid "My Working %s Issues"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:131 #: IDF/Views/Issue.php:131 IDF/Views/Issue.php:134
msgid "Submit a new issue" msgid "Submit a new issue"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:143 #: IDF/Views/Issue.php:143 IDF/Views/Issue.php:146
#, php-format #, php-format
msgid "<a href=\"%s\">Issue %d</a> has been created." msgid "<a href=\"%s\">Issue %d</a> has been created."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:168 #: IDF/Views/Issue.php:168 IDF/Views/Issue.php:172
#, php-format #, php-format
msgid "Issue <a href=\"%s\">%d</a>: %s" msgid "Issue <a href=\"%s\">%d</a>: %s"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:184 #: IDF/Views/Issue.php:184 IDF/Views/Issue.php:188
#, php-format #, php-format
msgid "<a href=\"%s\">Issue %d</a> has been updated." msgid "<a href=\"%s\">Issue %d</a> has been updated."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:211 #: IDF/Views/Issue.php:211 IDF/Views/Issue.php:216
#, php-format #, php-format
msgid "%s Closed Issues" msgid "%s Closed Issues"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:220 #: IDF/Views/Issue.php:220 IDF/Views/Issue.php:225
msgid "This table shows the closed issues." msgid "This table shows the closed issues."
msgstr "" msgstr ""
#: IDF/Views/Issue.php:258 #: IDF/Views/Issue.php:258 IDF/Views/Issue.php:264
#, php-format #, php-format
msgid "%1$s Issues with Label %2$s" msgid "%1$s Issues with Label %2$s"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:261 #: IDF/Views/Issue.php:261 IDF/Views/Issue.php:267
#, php-format #, php-format
msgid "%1$s Closed Issues with Label %2$s" msgid "%1$s Closed Issues with Label %2$s"
msgstr "" msgstr ""
#: IDF/Views/Issue.php:273 #: IDF/Views/Issue.php:273 IDF/Views/Issue.php:279
#, php-format #, php-format
msgid "This table shows the issues with label %s." msgid "This table shows the issues with label %s."
msgstr "" msgstr ""
@ -389,17 +402,17 @@ msgstr ""
msgid "Project Home" msgid "Project Home"
msgstr "" msgstr ""
#: IDF/gettexttemplates/base.html.php:9 #: IDF/gettexttemplates/base.html.php:9 IDF/Form/TabsConf.php:36
msgid "Issues" msgid "Issues"
msgstr "" msgstr ""
#: IDF/gettexttemplates/base.html.php:10 #: IDF/gettexttemplates/base.html.php:10
#: IDF/gettexttemplates/downloads/base.html.php:3 #: IDF/gettexttemplates/downloads/base.html.php:3
#: IDF/gettexttemplates/admin/base.html.php:6 #: IDF/gettexttemplates/admin/base.html.php:6 IDF/Form/TabsConf.php:34
msgid "Downloads" msgid "Downloads"
msgstr "" msgstr ""
#: IDF/gettexttemplates/base.html.php:11 #: IDF/gettexttemplates/base.html.php:11 IDF/Form/TabsConf.php:35
msgid "Source" msgid "Source"
msgstr "" msgstr ""
@ -587,6 +600,7 @@ msgstr ""
#: IDF/gettexttemplates/admin/issue-tracking.html.php:8 #: IDF/gettexttemplates/admin/issue-tracking.html.php:8
#: IDF/gettexttemplates/admin/members.html.php:13 #: IDF/gettexttemplates/admin/members.html.php:13
#: IDF/gettexttemplates/admin/summary.html.php:8 #: IDF/gettexttemplates/admin/summary.html.php:8
#: IDF/gettexttemplates/admin/tabs.html.php:5
msgid "Save Changes" msgid "Save Changes"
msgstr "" msgstr ""
@ -1143,40 +1157,43 @@ msgstr ""
msgid "No changes were entered." msgid "No changes were entered."
msgstr "" msgstr ""
#: IDF/Form/MembersConf.php:46 #: IDF/Form/MembersConf.php:46 IDF/Form/TabsConf.php:47
msgid "Project owners" msgid "Project owners"
msgstr "" msgstr ""
#: IDF/Form/MembersConf.php:54 #: IDF/Form/MembersConf.php:54 IDF/Form/TabsConf.php:46
msgid "Project members" msgid "Project members"
msgstr "" msgstr ""
#: IDF/Views/Source.php:36 #: IDF/Views/Source.php:36 IDF/Views/Source.php:37
#, php-format #, php-format
msgid "%s Git Change Log" msgid "%s Git Change Log"
msgstr "" msgstr ""
#: IDF/Views/Source.php:54 IDF/Views/Source.php:83 #: IDF/Views/Source.php:54 IDF/Views/Source.php:83 IDF/Views/Source.php:56
#: IDF/Views/Source.php:86
#, php-format #, php-format
msgid "%s Git Source Tree" msgid "%s Git Source Tree"
msgstr "" msgstr ""
#: IDF/Views/Source.php:164 #: IDF/Views/Source.php:164 IDF/Views/Source.php:168
#, php-format #, php-format
msgid "%s Commit Details" msgid "%s Commit Details"
msgstr "" msgstr ""
#: IDF/Views/Source.php:165 #: IDF/Views/Source.php:165 IDF/Views/Source.php:169
#, php-format #, php-format
msgid "%s Commit Details - %s" msgid "%s Commit Details - %s"
msgstr "" msgstr ""
#: IDF/Views/Download.php:199 IDF/Views/Download.php:205 #: IDF/Views/Download.php:199 IDF/Views/Download.php:205
#: IDF/Views/Download.php:210
#, php-format #, php-format
msgid "%1$s Downloads with Label %2$s" msgid "%1$s Downloads with Label %2$s"
msgstr "" msgstr ""
#: IDF/Views/Download.php:207 IDF/Views/Download.php:213 #: IDF/Views/Download.php:207 IDF/Views/Download.php:213
#: IDF/Views/Download.php:218
#, php-format #, php-format
msgid "This table shows the downloads with label %s." msgid "This table shows the downloads with label %s."
msgstr "" msgstr ""
@ -1186,3 +1203,42 @@ msgid ""
"<strong>Attention!</strong> This file is marked as deprecated, download it " "<strong>Attention!</strong> This file is marked as deprecated, download it "
"only if you are sure you need this specific version." "only if you are sure you need this specific version."
msgstr "" msgstr ""
#: IDF/Views/Project.php:215
#, php-format
msgid "%s Tabs Access Rights"
msgstr ""
#: IDF/Views/Project.php:225
msgid "The project tabs access rights have been saved."
msgstr ""
#: IDF/gettexttemplates/admin/base.html.php:7
msgid "Tabs Access"
msgstr ""
#: IDF/gettexttemplates/admin/tabs.html.php:3
msgid "You can configure here the project tabs access rights."
msgstr ""
#: IDF/gettexttemplates/admin/tabs.html.php:4
msgid ""
"The form contains some errors. Please correct them to update the access "
"rights."
msgstr ""
#: IDF/gettexttemplates/admin/tabs.html.php:6
msgid "Instructions:"
msgstr ""
#: IDF/Form/TabsConf.php:44
msgid "Open to all"
msgstr ""
#: IDF/Form/TabsConf.php:45
msgid "Signed in users"
msgstr ""
#: IDF/Form/TabsConf.php:48
msgid "Closed"
msgstr ""

View File

@ -5,6 +5,7 @@
<a {if $inSummary}class="active" {/if}href="{url 'IDF_Views_Project::admin', array($project.shortname)}">{trans 'Project Summary'}</a> | <a {if $inSummary}class="active" {/if}href="{url 'IDF_Views_Project::admin', array($project.shortname)}">{trans 'Project Summary'}</a> |
<a {if $inMembers}class="active" {/if}href="{url 'IDF_Views_Project::adminMembers', array($project.shortname)}">{trans 'Project Members'}</a> | <a {if $inMembers}class="active" {/if}href="{url 'IDF_Views_Project::adminMembers', array($project.shortname)}">{trans 'Project Members'}</a> |
<a {if $inIssueTracking}class="active" {/if}href="{url 'IDF_Views_Project::adminIssues', array($project.shortname)}">{trans 'Issue Tracking'}</a> | <a {if $inIssueTracking}class="active" {/if}href="{url 'IDF_Views_Project::adminIssues', array($project.shortname)}">{trans 'Issue Tracking'}</a> |
<a {if $inDownloads}class="active" {/if}href="{url 'IDF_Views_Project::adminDownloads', array($project.shortname)}">{trans 'Downloads'}</a> <a {if $inDownloads}class="active" {/if}href="{url 'IDF_Views_Project::adminDownloads', array($project.shortname)}">{trans 'Downloads'}</a> |
<a {if $inTabs}class="active" {/if}href="{url 'IDF_Views_Project::adminTabs', array($project.shortname)}">{trans 'Tabs Access'}</a>
</div> </div>
{/block} {/block}

View File

@ -0,0 +1,45 @@
{extends "admin/base.html"}
{block docclass}yui-t1{assign $inTabs = true}{/block}
{block body}
{if $form.errors}
<div class="px-message-error">
<p>{trans 'The form contains some errors. Please correct them to update the access rights.'}</p>
{if $form.get_top_errors}
{$form.render_top_errors|unsafe}
{/if}
</div>
{/if}
<form method="post" action=".">
<table class="form" summary="">
<tr>
<th><strong>{$form.f.downloads_access_rights.labelTag}:</strong></th>
<td>{if $form.f.downloads_access_rights.errors}{$form.f.downloads_access_rights.fieldErrors}{/if}
{$form.f.downloads_access_rights|unsafe}
</td>
</tr>
<tr>
<th><strong>{$form.f.issues_access_rights.labelTag}:</strong></th>
<td>{if $form.f.issues_access_rights.errors}{$form.f.issues_access_rights.fieldErrors}{/if}
{$form.f.issues_access_rights|unsafe}
</td>
</tr>
<tr>
<th><strong>{$form.f.source_access_rights.labelTag}:</strong></th>
<td>{if $form.f.source_access_rights.errors}{$form.f.source_access_rights.fieldErrors}{/if}
{$form.f.source_access_rights|unsafe}
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{trans 'Save Changes'}" name="submit" />
</td>
</tr>
</table>
</form>
{/block}
{block context}
<div class="issue-submit-info">
<p><strong>{trans 'Instructions:'}</strong></p>
<p>{blocktrans}You can configure here the project tabs access rights.{/blocktrans}</p>
</div>
{/block}

View File

@ -42,9 +42,9 @@
<div id="main-tabs"> <div id="main-tabs">
{if $project} {if $project}
<a href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a> <a href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a>
<a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a> {if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if}
<a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a> {if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if}
<a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}"{block tabsource}{/block}>{trans 'Source'}</a> {if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}"{block tabsource}{/block}>{trans 'Source'}</a>{/if}
{if $isOwner} {if $isOwner}
<a href="{url 'IDF_Views_Project::admin', array($project.shortname)}"{block tabadmin}{/block}>{trans 'Administer'}</a>{/if}{/if} <a href="{url 'IDF_Views_Project::admin', array($project.shortname)}"{block tabadmin}{/block}>{trans 'Administer'}</a>{/if}{/if}
</div> </div>

View File

@ -13,7 +13,7 @@
<p>{blocktrans}Comment <a href="{$url}">{$i}</a> by {$who}, {$c.creation_dtime|date}{/blocktrans}</p> <p>{blocktrans}Comment <a href="{$url}">{$i}</a> by {$who}, {$c.creation_dtime|date}{/blocktrans}</p>
{/if} {/if}
<pre class="issue-comment-text">{if strlen($c.content) > 0}{issuetext $c.content, $project}{else}<i>{trans '(No comments were given for this change.)'}</i>{/if}</pre> <pre class="issue-comment-text">{if strlen($c.content) > 0}{issuetext $c.content, $request}{else}<i>{trans '(No comments were given for this change.)'}</i>{/if}</pre>
{if $i> 0 and $c.changedIssue()} {if $i> 0 and $c.changedIssue()}
<div class="issue-changes"> <div class="issue-changes">

View File

@ -3,11 +3,11 @@
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
// <!-- // <!--
{hotkey 'Shift+h', 'IDF_Views_Project::home', array($project.shortname)} {hotkey 'Shift+h', 'IDF_Views_Project::home', array($project.shortname)}
{hotkey 'Shift+a', 'IDF_Views_Issue::create', array($project.shortname)} {if $hasIssuesAccess}{hotkey 'Shift+a', 'IDF_Views_Issue::create', array($project.shortname)}
{hotkey 'Shift+i', 'IDF_Views_Issue::index', array($project.shortname)} {hotkey 'Shift+i', 'IDF_Views_Issue::index', array($project.shortname)}{/if}
{hotkey 'Shift+d', 'IDF_Views_Download::index', array($project.shortname)} {if $hasDownloadsAccess}{hotkey 'Shift+d', 'IDF_Views_Download::index', array($project.shortname)}{/if}
{hotkey 'Shift+s', 'IDF_Views_Source::treeBase', array($project.shortname, 'master')} {if $hasSourceAccess}{hotkey 'Shift+s', 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}{/if}
{if !$user.isAnonymous()} {if $hasIssuesAccess and !$user.isAnonymous()}
{hotkey 'Shift+m', 'IDF_Views_Issue::myIssues', array($project.shortname, 'submit')} {hotkey 'Shift+m', 'IDF_Views_Issue::myIssues', array($project.shortname, 'submit')}
{hotkey 'Shift+w', 'IDF_Views_Issue::myIssues', array($project.shortname, 'owner')} {hotkey 'Shift+w', 'IDF_Views_Issue::myIssues', array($project.shortname, 'owner')}
{/if} //--> {/if} //-->

View File

@ -10,7 +10,7 @@
{$project.description|markdown} {$project.description|markdown}
{/block} {/block}
{block context} {block context}
{if $downloads.count() > 0} {if count($downloads) > 0}
<p><strong>{trans 'Featured Downloads'}</strong><br /> <p><strong>{trans 'Featured Downloads'}</strong><br />
{foreach $downloads as $download} {foreach $downloads as $download}
<span class="label"><a href="{url 'IDF_Views_Download::view', array($project.shortname, $download.id)}" title="{$download.summary}">{$download}</a></span><br /> <span class="label"><a href="{url 'IDF_Views_Download::view', array($project.shortname, $download.id)}" title="{$download.summary}">{$download}</a></span><br />

View File

@ -14,7 +14,7 @@
{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $change.commit)} {aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $change.commit)}
<tr class="log"> <tr class="log">
<td><a href="{$url}">{$change.date|dateago:"wihtout"}</a></td> <td><a href="{$url}">{$change.date|dateago:"wihtout"}</a></td>
<td>{issuetext $change.title, $project}{if $change.full_message}<br /><br />{issuetext $change.full_message, $project}{/if}</td> <td>{issuetext $change.title, $request}{if $change.full_message}<br /><br />{issuetext $change.full_message, $request}{/if}</td>
</tr> </tr>
<tr class="extra"> <tr class="extra">
<td colspan="2"> <td colspan="2">

View File

@ -15,7 +15,7 @@
<th><strong>{trans 'Tree:'}</strong></th><td class="mono"><a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $commit)}" title="{trans 'View corresponding source tree'}">{$cobject.tree}</a><br /><br /></td> <th><strong>{trans 'Tree:'}</strong></th><td class="mono"><a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $commit)}" title="{trans 'View corresponding source tree'}">{$cobject.tree}</a><br /><br /></td>
</tr> </tr>
<tr> <tr>
<th><strong>{trans 'Message:'}</strong></th><td>{issuetext $cobject.title, $project}{if isset($cobject.full_message)}<br /><br />{issuetext $cobject.full_message, $project}{/if}</td> <th><strong>{trans 'Message:'}</strong></th><td>{issuetext $cobject.title, $request}{if isset($cobject.full_message)}<br /><br />{issuetext $cobject.full_message, $request}{/if}</td>
</tr> </tr>
{if count($diff.files)} {if count($diff.files)}
<tr> <tr>