InDefero

Sign in or create your account | Project List | Help

InDefero Commit Details

Date:2008-08-07 15:35:03 (10 months 26 days ago)
Author:Loïc d'Anterroches
Commit:7383e18dff19e7e6a1e56d55cdfbfa109e91bfb3
Message: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.
Files: src/IDF/Form/TabsConf.php (1 diff)
src/IDF/Middleware.php (3 diffs)
src/IDF/Precondition.php (1 diff)
src/IDF/Template/IssueComment.php (1 diff)
src/IDF/Views/Download.php (5 diffs)
src/IDF/Views/Issue.php (6 diffs)
src/IDF/Views/Project.php (2 diffs)
src/IDF/Views/Source.php (5 diffs)
src/IDF/conf/idf.php-dist (1 diff)
src/IDF/conf/views.php (1 diff)
src/IDF/locale/fr/idf.po (18 diffs)
src/IDF/locale/idf.pot (8 diffs)
src/IDF/templates/admin/base.html (1 diff)
src/IDF/templates/admin/tabs.html (1 diff)
src/IDF/templates/base.html (1 diff)
src/IDF/templates/issues/view.html (1 diff)
src/IDF/templates/js-hotkeys.html (1 diff)
src/IDF/templates/project-home.html (1 diff)
src/IDF/templates/source/changelog.html (1 diff)
src/IDF/templates/source/commit.html (1 diff)

Change Details

src/IDF/Form/TabsConf.php
1<?php
2/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3/*
4# ***** BEGIN LICENSE BLOCK *****
5# This file is part of InDefero, an open source project management application.
6# Copyright (C) 2008 Céondo Ltd and contributors.
7#
8# InDefero is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# InDefero is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21#
22# ***** END LICENSE BLOCK ***** */
23
24
25/**
26 * Configuration of the tabs access.
27 */
28class IDF_Form_TabsConf extends Pluf_Form
29{
30    public $conf = null;
31    public function initFields($extra=array())
32    {
33        $this->conf = $extra['conf'];
34        $ak = array('downloads_access_rights' => __('Downloads'),
35                    'source_access_rights' => __('Source'),
36                    'issues_access_rights' => __('Issues'),);
37        foreach ($ak as $key=>$label) {
38            $this->fields[$key] = new Pluf_Form_Field_Varchar(
39                                      array('required' => true,
40                                            'label' => $label,
41                                            'initial' => $this->conf->getVal($key, 'all'),
42                                            'widget_attrs' => array('choices' =>
43                                          array(
44                                                __('Open to all') => 'all',
45                                                __('Signed in users') => 'login',
46                                                __('Project members') => 'members',
47                                                __('Project owners') => 'owners',
48                                                __('Closed') => 'none',
49                                                )
50                                                                    ),
51                                            'widget' => 'Pluf_Form_Widget_SelectInput',
52                                            ));
53        }
54    }
55}
56
57
src/IDF/Middleware.php
2424/**
2525 * Project middleware.
2626 *
27 * It must be after the session middleware.
2728 */
2829class IDF_Middleware
2930{
...... 
4950            } catch (Pluf_HTTP_Error404 $e) {
5051                return new Pluf_HTTP_Response_NotFound(sprintf(__('The page <em>%s</em> was not found on the server.'), htmlspecialchars($request->query)));
5152            }
53            $request->conf = new IDF_Conf();
54            $request->conf->setProject($request->project);
55            $ak = array('downloads_access_rights' => 'hasDownloadsAccess',
56                        'source_access_rights' => 'hasSourceAccess',
57                        'issues_access_rights' => 'hasIssuesAccess');
58            $request->rights = array();
59            foreach ($ak as $key=>$val) {
60                $request->rights[$val] = (true === IDF_Precondition::accessTabGeneric($request, $key));
61            }
5262        }
5363        return false;
5464    }
...... 
5868function IDF_Middleware_ContextPreProcessor($request)
5969{
6070    $c = array();
71    $c['request'] = $request;
6172    if (isset($request->project)) {
6273        $c['project'] = $request->project;
6374        $c['isOwner'] = $request->user->hasPerm('IDF.project-owner',
6475                                                $request->project);
6576        $c['isMember'] = $request->user->hasPerm('IDF.project-member',
6677                                                 $request->project);
78        $c = array_merge($c, $request->rights);
6779    }
6880    return $c;
6981}
src/IDF/Precondition.php
6161        }
6262        return new Pluf_HTTP_Response_Forbidden($request);
6363    }
64
65    /**
66     * Check if the user can access a given element.
67     *
68     * The rights are:
69     * - 'all' (default)
70     * - 'none'
71     * - 'login'
72     * - 'members'
73     * - 'owners'
74     *
75     * The order of the rights is such that a 'owner' is also a
76     * 'member' and of course a logged in person.
77     *
78     * @param Pluf_HTTP_Request
79     * @param string Control key
80     * @return mixed
81     */
82    static public function accessTabGeneric($request, $key)
83    {
84        switch ($request->conf->getVal($key, 'all')) {
85        case 'none':
86            return new Pluf_HTTP_Response_Forbidden($request);
87        case 'login':
88            return Pluf_Precondition::loginRequired($request);
89        case 'members':
90            return self::projectMemberOrOwner($request);
91        case 'owners':
92            return self::projectOwner($request);
93        case 'all':
94        default:
95            return true;
96        }
97    }
98
99    static public function accessSource($request)
100    {
101        return self::accessTabGeneric($request, 'source_access_rights');
102    }
103
104    static public function accessIssues($request)
105    {
106        return self::accessTabGeneric($request, 'issues_access_rights');
107    }
108
109    static public function accessDownloads($request)
110    {
111        return self::accessTabGeneric($request, 'downloads_access_rights');
112    }
64113}
src/IDF/Template/IssueComment.php
2929class IDF_Template_IssueComment extends Pluf_Template_Tag
3030{
3131    private $project = null;
32    private $request = null;
3233    private $git = null;
3334
34    function start($text, $project)
35    function start($text, $request)
3536    {
36        $this->project = $project;
37        $this->project = $request->project;
38        $this->request = $request;
3739        $this->git = new IDF_Git($this->project->getGitRepository());
3840        $text = wordwrap($text, 69, "\n", true);
3941        $text = Pluf_esc($text);
4042        $text = ereg_replace('[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]',
4143                             '<a href="\\0" rel="nofollow">\\0</a>',
4244                             $text);
43        $text = preg_replace_callback('#(issues?|bugs?|tickets?)\s+(\d+)((\s+and|\s+or|,)\s+(\d+)){0,}#im',
44                                      array($this, 'callbackIssues'), $text);
45        $text = preg_replace_callback('#(commit\s+)([0-9a-f]{5,40})#im',
46                                      array($this, 'callbackCommit'), $text);
45        if ($request->rights['hasIssuesAccess']) {
46            $text = preg_replace_callback('#(issues?|bugs?|tickets?)\s+(\d+)((\s+and|\s+or|,)\s+(\d+)){0,}#im',
47                                          array($this, 'callbackIssues'), $text);
48        }
49        if ($request->rights['hasSourceAccess']) {
50            $text = preg_replace_callback('#(commit\s+)([0-9a-f]{5,40})#im',
51                                          array($this, 'callbackCommit'), $text);
52        }
4753        echo $text;
4854    }
4955
src/IDF/Views/Download.php
3838    /**
3939     * List the files available for download.
4040     */
41    public $index_precond = array('IDF_Precondition::accessDownloads');
4142    public function index($request, $match)
4243    {
4344        $prj = $request->project;
...... 
7576    /**
7677     * View details of a file.
7778     */
79    public $view_precond = array('IDF_Precondition::accessDownloads');
7880    public function view($request, $match)
7981    {
8082        $prj = $request->project;
...... 
123125    /**
124126     * Download a file.
125127     */
128    public $download_precond = array('IDF_Precondition::accessDownloads');
126129    public function download($request, $match)
127130    {
128131        $prj = $request->project;
...... 
136139    /**
137140     * Submit a new file for download.
138141     */
139    public $submit_precond = array('IDF_Precondition::projectMemberOrOwner');
142    public $submit_precond = array('IDF_Precondition::accessDownloads',
143                                   'IDF_Precondition::projectMemberOrOwner');
140144    public function submit($request, $match)
141145    {
142146        $prj = $request->project;
...... 
197201    /**
198202     * View list of downloads with a given label.
199203     */
204    public $listLabel_precond = array('IDF_Precondition::accessDownloads');
200205    public function listLabel($request, $match)
201206    {
202207        $prj = $request->project;
src/IDF/Views/Issue.php
3434    /**
3535     * View list of issues for a given project.
3636     */
37    public $index_precond = array('IDF_Precondition::accessIssues');
3738    public function index($request, $match)
3839    {
3940        $prj = $request->project;
...... 
7778     *
7879     * Only open issues are shown.
7980     */
80    public $myIssues_precond = array('Pluf_Precondition::loginRequired');
81    public $myIssues_precond = array('IDF_Precondition::accessIssues',
82                                     'Pluf_Precondition::loginRequired');
8183    public function myIssues($request, $match)
8284    {
8385        $prj = $request->project;
...... 
124126                                               $request);
125127    }
126128
127    public $create_precond = array('Pluf_Precondition::loginRequired');
129    public $create_precond = array('IDF_Precondition::accessIssues',
130                                   'Pluf_Precondition::loginRequired');
128131    public function create($request, $match)
129132    {
130133        $prj = $request->project;
...... 
157160                                               $request);
158161    }
159162
163    public $view_precond = array('IDF_Precondition::accessIssues');
160164    public function view($request, $match)
161165    {
162166        $prj = $request->project;
...... 
204208    /**
205209     * View list of issues for a given project with a given status.
206210     */
211    public $listStatus_precond = array('IDF_Precondition::accessIssues');
207212    public function listStatus($request, $match)
208213    {
209214        $prj = $request->project;
...... 
246251    /**
247252     * View list of issues for a given project with a given label.
248253     */
254    public $listLabel_precond = array('IDF_Precondition::accessIssues');
249255    public function listLabel($request, $match)
250256    {
251257        $prj = $request->project;
src/IDF/Views/Project.php
3939        $prj = $request->project;
4040        $team = $prj->getMembershipData();
4141        $title = (string) $prj;
42        $tags = IDF_Views_Download::getDownloadTags($prj);
43        // the first tag is the featured, the last is the deprecated.
44        $downloads = $tags[0]->get_idf_upload_list();
42        $downloads = array();
43        if ($request->rights['hasDownloadsAccess']) {
44            $tags = IDF_Views_Download::getDownloadTags($prj);
45            // the first tag is the featured, the last is the deprecated.
46            $downloads = $tags[0]->get_idf_upload_list();
47        }
4548        return Pluf_Shortcuts_RenderToResponse('project-home.html',
4649                                               array(
4750                                                     'page_title' => $title,
...... 
201204                                                     ),
202205                                               $request);
203206    }
207
208    /**
209     * Administrate the access rights to the tabs.
210     */
211    public $adminTabs_precond = array('IDF_Precondition::projectOwner');
212    public function adminTabs($request, $match)
213    {
214        $prj = $request->project;
215        $title = sprintf(__('%s Tabs Access Rights'), (string) $prj);
216        $extra = array(
217                       'conf' => $request->conf,
218                       );
219        if ($request->method == 'POST') {
220            $form = new IDF_Form_TabsConf($request->POST, $extra);
221            if ($form->isValid()) {
222                foreach ($form->cleaned_data as $key=>$val) {
223                    $request->conf->setVal($key, $val);
224                }
225                $request->user->setMessage(__('The project tabs access rights have been saved.'));
226                $url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::adminTabs',
227                                                array($prj->shortname));
228                return new Pluf_HTTP_Response_Redirect($url);
229            }
230        } else {
231            $params = array();
232            $keys = array('downloads_access_rights', 'source_access_rights',
233                          'issues_access_rights');
234            foreach ($keys as $key) {
235                $_val = $request->conf->getVal($key, false);
236                if ($_val !== false) {
237                    $params[$key] = $_val;
238                }
239            }
240            if (count($params) == 0) {
241                $params = null; //Nothing in the db, so new form.
242            }
243            $form = new IDF_Form_TabsConf($params, $extra);
244        }
245        return Pluf_Shortcuts_RenderToResponse('admin/tabs.html',
246                                               array(
247                                                     'page_title' => $title,
248                                                     'form' => $form,
249                                                     ),
250                                               $request);
251    }
204252}
src/IDF/Views/Source.php
3131 */
3232class IDF_Views_Source
3333{
34    public $changeLog_precond = array('IDF_Precondition::accessSource');
3435    public function changeLog($request, $match)
3536    {
3637        $title = sprintf(__('%s Git Change Log'), (string) $request->project);
...... 
4950                                               $request);
5051    }
5152
53    public $treeBase_precond = array('IDF_Precondition::accessSource');
5254    public function treeBase($request, $match)
5355    {
5456        $title = sprintf(__('%s Git Source Tree'), (string) $request->project);
...... 
7880                                               $request);
7981    }
8082
83    public $tree_precond = array('IDF_Precondition::accessSource');
8184    public function tree($request, $match)
8285    {
8386        $title = sprintf(__('%s Git Source Tree'), (string) $request->project);
...... 
149152        return '<span class="breadcrumb">'.implode('<span class="sep">'.$sep.'</span>', $out).'</span>';
150153    }
151154
155    public $commit_precond = array('IDF_Precondition::accessSource');
152156    public function commit($request, $match)
153157    {
154158        $git = new IDF_Git($request->project->getGitRepository());
...... 
182186     * Get a zip archive of the current commit.
183187     *
184188     */
189    public $download_precond = array('IDF_Precondition::accessSource');
185190    public function download($request, $match)
186191    {
187192        $commit = trim($match[2]);
src/IDF/conf/idf.php-dist
103103$cfg['installed_apps'] = array('Pluf', 'IDF');
104104$cfg['pluf_use_rowpermission'] = true;
105105$cfg['middleware_classes'] = array(
106         'IDF_Middleware',
107106         'Pluf_Middleware_Session',
107         'IDF_Middleware',
108108         'Pluf_Middleware_Translation',
109109         );
110110$cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor');
src/IDF/conf/views.php
206206               'model' => 'IDF_Views_Project',
207207               'method' => 'adminMembers');
208208
209$ctl[] = array('regex' => '#^/p/(\w+)/admin/tabs/$#',
210               'base' => $base,
211               'priority' => 4,
212               'model' => 'IDF_Views_Project',
213               'method' => 'adminTabs');
214
209215return $ctl;
src/IDF/locale/fr/idf.po
22msgstr ""
33"Project-Id-Version: InDefero\n"
44"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2008-08-06 22:28+0200\n"
6"PO-Revision-Date: 2008-08-06 22:30+0100\n"
5"POT-Creation-Date: 2008-08-07 15:31+0200\n"
6"PO-Revision-Date: 2008-08-07 15:34+0100\n"
77"Last-Translator: Loïc d'Anterroches <titoo@users.sourceforge.net>\n"
88"Language-Team: Translation team <titoo@users.sourceforge.net>\n"
99"MIME-Version: 1.0\n"
...... 
101101msgstr "date de modification"
102102
103103#: IDF/Middleware.php:50
104#: IDF/Middleware.php:51
104105#, php-format
105106msgid "The page <em>%s</em> was not found on the server."
106107msgstr "Cette page <em>%s</em> n'a pas été trouvée sur le serveur."
...... 
186187msgstr "Ici pour vous aider !"
187188
188189#: IDF/Views/Project.php:62
190#: IDF/Views/Project.php:65
189191#, php-format
190192msgid "%s Project Summary"
191193msgstr "Résumé du projet %s"
192194
193195#: IDF/Views/Project.php:69
196#: IDF/Views/Project.php:72
194197msgid "The project has been updated."
195198msgstr "Le projet a été mis à jour."
196199
197200#: IDF/Views/Project.php:93
201#: IDF/Views/Project.php:96
198202#, php-format
199203msgid "%s Issue Tracking Configuration"
200204msgstr "Configuration du gestionnaire de tickets de %s"
201205
202206#: IDF/Views/Project.php:102
207#: IDF/Views/Project.php:105
203208msgid "The issue tracking configuration has been saved."
204209msgstr "La configuration du gestionnaire de tickets a été sauvegardée."
205210
206211#: IDF/Views/Project.php:137
212#: IDF/Views/Project.php:140
207213#, php-format
208214msgid "%s Downloads Configuration"
209215msgstr "Configuration des Téléchargements de %s"
210216
211217#: IDF/Views/Project.php:146
218#: IDF/Views/Project.php:149
212219msgid "The downloads configuration has been saved."
213220msgstr "La configuration des téléchargements a été sauvegardée."
214221
215222#: IDF/Views/Project.php:180
223#: IDF/Views/Project.php:183
216224#, php-format
217225msgid "%s Project Members"
218226msgstr "Membres du projet %s"
219227
220228#: IDF/Views/Project.php:189
229#: IDF/Views/Project.php:192
221230msgid "The project membership has been saved."
222231msgstr "Les membres du projet ont été sauvegardés."
223232
224233#: IDF/Views/Download.php:44
234#: IDF/Views/Download.php:45
225235#, php-format
226236msgid "%s Downloads"
227237msgstr "Téléchargements de %s"
228238
229239#: IDF/Views/Download.php:50
230240#: IDF/Views/Download.php:52
241#: IDF/Views/Download.php:51
231242msgid "This table shows the files to download."
232243msgstr "Ce tableau présente la liste des fichiers en téléchargement."
233244
...... 
237248#: IDF/Views/Download.php:56
238249#: IDF/Views/Download.php:212
239250#: IDF/Views/Download.php:218
251#: IDF/Views/Download.php:55
252#: IDF/Views/Download.php:223
240253msgid "File"
241254msgstr "Fichier"
242255
...... 
252265#: IDF/Views/Download.php:57
253266#: IDF/Views/Download.php:213
254267#: IDF/Views/Download.php:219
268#: IDF/Views/Download.php:56
269#: IDF/Views/Download.php:224
270#: IDF/Views/Issue.php:58
271#: IDF/Views/Issue.php:111
272#: IDF/Views/Issue.php:233
273#: IDF/Views/Issue.php:287
255274msgid "Summary"
256275msgstr "Résumé"
257276
...... 
260279#: IDF/Views/Download.php:58
261280#: IDF/Views/Download.php:214
262281#: IDF/Views/Download.php:220
282#: IDF/Views/Download.php:57
283#: IDF/Views/Download.php:225
263284msgid "Size"
264285msgstr "Taille"
265286
...... 
267288#: IDF/Views/Download.php:59
268289#: IDF/Views/Download.php:215
269290#: IDF/Views/Download.php:221
291#: IDF/Views/Download.php:58
292#: IDF/Views/Download.php:226
270293msgid "Uploaded"
271294msgstr "Mis en ligne"
272295
...... 
274297#: IDF/Views/Download.php:63
275298#: IDF/Views/Download.php:219
276299#: IDF/Views/Download.php:225
300#: IDF/Views/Download.php:62
301#: IDF/Views/Download.php:230
277302msgid "No downloads were found."
278303msgstr "Aucun fichier n'a été trouvé."
279304
280305#: IDF/Views/Download.php:81
281306#: IDF/Views/Download.php:83
307#: IDF/Views/Download.php:85
282308#, php-format
283309msgid "Download %s"
284310msgstr "Télécharger %s"
...... 
286312#: IDF/Views/Download.php:94
287313#: IDF/Views/Download.php:96
288314#: IDF/Views/Download.php:100
315#: IDF/Views/Download.php:102
289316#, php-format
290317msgid "The file <a href=\"%1$s\">%2$s</a> has been updated."
291318msgstr "Le fichier <a href=\"%1$s\">%2$s</a> a été mis à jour."
...... 
295322#: IDF/gettexttemplates/downloads/index.html.php:3
296323#: IDF/Views/Download.php:137
297324#: IDF/Views/Download.php:143
325#: IDF/Views/Download.php:147
298326msgid "New Download"
299327msgstr "Nouveau téléchargement"
300328
301329#: IDF/Views/Download.php:144
302330#: IDF/Views/Download.php:146
303331#: IDF/Views/Download.php:152
332#: IDF/Views/Download.php:156
304333#, php-format
305334msgid "The <a href=\"%s\">file</a> has been uploaded."
306335msgstr "Le <a href=\"%s\">fichier</a> a été mis en ligne."
307336
308337#: IDF/Views/Issue.php:40
338#: IDF/Views/Issue.php:41
309339#, php-format
310340msgid "%s Recent Issues"
311341msgstr "Tickets récents de %s"
312342
313343#: IDF/Views/Issue.php:49
314344#: IDF/Views/Issue.php:103
345#: IDF/Views/Issue.php:50
346#: IDF/Views/Issue.php:105
315347msgid "This table shows the open recent issues."
316348msgstr "Ce tableau montre les tickets récents."
317349
...... 
319351#: IDF/Views/Issue.php:108
320352#: IDF/Views/Issue.php:227
321353#: IDF/Views/Issue.php:280
354#: IDF/Views/Issue.php:57
355#: IDF/Views/Issue.php:110
356#: IDF/Views/Issue.php:232
357#: IDF/Views/Issue.php:286
322358msgid "Id"
323359msgstr "Id"
324360
...... 
328364#: IDF/Views/Issue.php:282
329365#: IDF/Form/IssueCreate.php:70
330366#: IDF/Form/IssueUpdate.php:66
367#: IDF/Views/Issue.php:59
368#: IDF/Views/Issue.php:112
369#: IDF/Views/Issue.php:234
370#: IDF/Views/Issue.php:288
331371msgid "Status"
332372msgstr "Statut"
333373
...... 
335375#: IDF/Views/Issue.php:111
336376#: IDF/Views/Issue.php:230
337377#: IDF/Views/Issue.php:283
378#: IDF/Views/Issue.php:60
379#: IDF/Views/Issue.php:113
380#: IDF/Views/Issue.php:235
381#: IDF/Views/Issue.php:289
338382msgid "Last Updated"
339383msgstr "Dernière mise à jour"
340384
...... 
342386#: IDF/Views/Issue.php:115
343387#: IDF/Views/Issue.php:234
344388#: IDF/Views/Issue.php:287
389#: IDF/Views/Issue.php:64
390#: IDF/Views/Issue.php:117
391#: IDF/Views/Issue.php:239
392#: IDF/Views/Issue.php:293
345393msgid "No issues were found."
346394msgstr "Aucun ticket n'a été trouvé."
347395
348396#: IDF/Views/Issue.php:87
397#: IDF/Views/Issue.php:89
349398#, php-format
350399msgid "My Submitted %s Issues"
351400msgstr "Mes tickets soumis pour %s"
352401
353402#: IDF/Views/Issue.php:90
403#: IDF/Views/Issue.php:92
354404#, php-format
355405msgid "My Working %s Issues"
356406msgstr "Mes tickets en cours pour %s"
357407
358408#: IDF/Views/Issue.php:131
409#: IDF/Views/Issue.php:134
359410msgid "Submit a new issue"
360411msgstr "Soumettre un nouveau ticket"
361412
362413#: IDF/Views/Issue.php:143
414#: IDF/Views/Issue.php:146
363415#, php-format
364416msgid "<a href=\"%s\">Issue %d</a> has been created."
365417msgstr "Le <a href=\"%s\">ticket %d</a> a été créé."
366418
367419#: IDF/Views/Issue.php:168
420#: IDF/Views/Issue.php:172
368421#, php-format
369422msgid "Issue <a href=\"%s\">%d</a>: %s"
370423msgstr "Ticket <a href=\"%s\">%d</a> : %s"
371424
372425#: IDF/Views/Issue.php:184
426#: IDF/Views/Issue.php:188
373427#, php-format
374428msgid "<a href=\"%s\">Issue %d</a> has been updated."
375429msgstr "Le <a href=\"%s\">ticket %d</a> a été mise à jour."
376430
377431#: IDF/Views/Issue.php:211
432#: IDF/Views/Issue.php:216
378433#, php-format
379434msgid "%s Closed Issues"
380435msgstr "Tickets fermés de %s"
381436
382437#: IDF/Views/Issue.php:220
438#: IDF/Views/Issue.php:225
383439msgid "This table shows the closed issues."
384440msgstr "Ce tableau montre les tickets fermés."
385441
386442#: IDF/Views/Issue.php:258
443#: IDF/Views/Issue.php:264
387444#, php-format
388445msgid "%1$s Issues with Label %2$s"
389446msgstr "%1$s tickets avec l'étiquette %2$s"
390447
391448#: IDF/Views/Issue.php:261
449#: IDF/Views/Issue.php:267
392450#, php-format
393451msgid "%1$s Closed Issues with Label %2$s"
394452msgstr "Tickets fermés de %1$s avec l'étiquette %2$s"
395453
396454#: IDF/Views/Issue.php:273
455#: IDF/Views/Issue.php:279
397456#, php-format
398457msgid "This table shows the issues with label %s."
399458msgstr "Ce tableau montre les tickets avec l'étiquette %s."
...... 
429488msgstr "Page d'Accueil"
430489
431490#: IDF/gettexttemplates/base.html.php:9
491#: IDF/Form/TabsConf.php:36
432492msgid "Issues"
433493msgstr "Tickets"
434494
435495#: IDF/gettexttemplates/base.html.php:10
436496#: IDF/gettexttemplates/downloads/base.html.php:3
437497#: IDF/gettexttemplates/admin/base.html.php:6
498#: IDF/Form/TabsConf.php:34
438499msgid "Downloads"
439500msgstr "Téléchargements"
440501
441502#: IDF/gettexttemplates/base.html.php:11
503#: IDF/Form/TabsConf.php:35
442504msgid "Source"
443505msgstr "Source"
444506
...... 
636698#: IDF/gettexttemplates/admin/issue-tracking.html.php:8
637699#: IDF/gettexttemplates/admin/members.html.php:13
638700#: IDF/gettexttemplates/admin/summary.html.php:8
701#: IDF/gettexttemplates/admin/tabs.html.php:5
639702msgid "Save Changes"
640703msgstr "Enregistrer les changements"
641704
...... 
12141277msgstr "Aucun changement n'a été entré."
12151278
12161279#: IDF/Form/MembersConf.php:46
1280#: IDF/Form/TabsConf.php:47
12171281msgid "Project owners"
12181282msgstr "Propriétaires du projet"
12191283
12201284#: IDF/Form/MembersConf.php:54
1285#: IDF/Form/TabsConf.php:46
12211286msgid "Project members"
12221287msgstr "Membres du projet"
12231288
12241289#: IDF/Views/Source.php:36
1290#: IDF/Views/Source.php:37
12251291#, php-format
12261292msgid "%s Git Change Log"
12271293msgstr "Changements Git de %s"
12281294
12291295#: IDF/Views/Source.php:54
12301296#: IDF/Views/Source.php:83
1297#: IDF/Views/Source.php:56
1298#: IDF/Views/Source.php:86
12311299#, php-format
12321300msgid "%s Git Source Tree"
12331301msgstr "Arbre des sources Git de %s"
12341302
12351303#: IDF/Views/Source.php:164
1304#: IDF/Views/Source.php:168
12361305#, php-format
12371306msgid "%s Commit Details"
12381307msgstr "Détails d'un commit de %s"
12391308
12401309#: IDF/Views/Source.php:165
1310#: IDF/Views/Source.php:169
12411311#, php-format
12421312msgid "%s Commit Details - %s"
12431313msgstr "Détails d'un commit de %s - %s"
12441314
12451315#: IDF/Views/Download.php:199
12461316#: IDF/Views/Download.php:205
1317#: IDF/Views/Download.php:210
12471318#, php-format
12481319msgid "%1$s Downloads with Label %2$s"
12491320msgstr "Téléchargements avec l'étiquette %2$s de %1$s"
12501321
12511322#: IDF/Views/Download.php:207
12521323#: IDF/Views/Download.php:213
1324#: IDF/Views/Download.php:218
12531325#, php-format
12541326msgid "This table shows the downloads with label %s."
12551327msgstr "Ce tableau montre les téléchargements avec l'étiquette %s."
...... 
12581330msgid "<strong>Attention!</strong> This file is marked as deprecated, download it only if you are sure you need this specific version."
12591331msgstr "<strong>Attention !</strong> Ce fichier est marqué comme obsolète, téléchargez ce fichier uniquement si vous avez besoin de cette version."
12601332
1333#: IDF/Views/Project.php:215
1334#, php-format
1335msgid "%s Tabs Access Rights"
1336msgstr "Accès aux onglets de %s"
1337
1338#: IDF/Views/Project.php:225
1339msgid "The project tabs access rights have been saved."
1340msgstr "Les droits d'accès aux onglets du projet ont été sauvegardés."
1341
1342#: IDF/gettexttemplates/admin/base.html.php:7
1343msgid "Tabs Access"
1344msgstr "Accès aux onglets"
1345
1346#: IDF/gettexttemplates/admin/tabs.html.php:3
1347msgid "You can configure here the project tabs access rights."
1348msgstr "Vous pouvez configurer ici les droits d'accès aux onglets."
1349
1350#: IDF/gettexttemplates/admin/tabs.html.php:4
1351msgid "The form contains some errors. Please correct them to update the access rights."
1352msgstr "Le formulaire contient des erreurs. Merci de les corriger pour mettre à jour les droits d'accès."
1353
1354#: IDF/gettexttemplates/admin/tabs.html.php:6
1355msgid "Instructions:"
1356msgstr "Instructions :"
1357
1358#: IDF/Form/TabsConf.php:44
1359msgid "Open to all"
1360msgstr "Ouvert à tous"
1361
1362#: IDF/Form/TabsConf.php:45
1363msgid "Signed in users"
1364msgstr "Utilisateurs authentifiés"
1365
1366#: IDF/Form/TabsConf.php:48
1367msgid "Closed"
1368msgstr "Fermé"
1369
src/IDF/locale/idf.pot
88msgstr ""
99"Project-Id-Version: PACKAGE VERSION\n"
1010"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2008-08-06 22:28+0200\n"
11"POT-Creation-Date: 2008-08-07 15:31+0200\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
...... 
9292msgid "modification date"
9393msgstr ""
9494
95#: IDF/Middleware.php:50
95#: IDF/Middleware.php:50 IDF/Middleware.php:51
9696#, php-format
9797msgid "The page <em>%s</em> was not found on the server."
9898msgstr ""
...... 
176176msgid "Here to Help You!"
177177msgstr ""
178178
179#: IDF/Views/Project.php:62
179#: IDF/Views/Project.php:62 IDF/Views/Project.php:65
180180#, php-format
181181msgid "%s Project Summary"
182182msgstr ""
183183
184#: IDF/Views/Project.php:69
184#: IDF/Views/Project.php:69 IDF/Views/Project.php:72
185185msgid "The project has been updated."
186186msgstr ""
187187
188#: IDF/Views/Project.php:93
188#: IDF/Views/Project.php:93 IDF/Views/Project.php:96
189189#, php-format
190190msgid "%s Issue Tracking Configuration"
191191msgstr ""
192192
193#: IDF/Views/Project.php:102
193#: IDF/Views/Project.php:102 IDF/Views/Project.php:105
194194msgid "The issue tracking configuration has been saved."
195195msgstr ""
196196
197#: IDF/Views/Project.php:137
197#: IDF/Views/Project.php:137 IDF/Views/Project.php:140
198198#, php-format
199199msgid "%s Downloads Configuration"
200200msgstr ""
201201
202#: IDF/Views/Project.php:146
202#: IDF/Views/Project.php:146 IDF/Views/Project.php:149
203203msgid "The downloads configuration has been saved."
204204msgstr ""
205205
206#: IDF/Views/Project.php:180
206#: IDF/Views/Project.php:180 IDF/Views/Project.php:183
207207#, php-format
208208msgid "%s Project Members"
209209msgstr ""
210210
211#: IDF/Views/Project.php:189
211#: IDF/Views/Project.php:189 IDF/Views/Project.php:192
212212msgid "The project membership has been saved."
213213msgstr ""
214214
215#: IDF/Views/Download.php:44
215#: IDF/Views/Download.php:44 IDF/Views/Download.php:45
216216#, php-format
217217msgid "%s Downloads"
218218msgstr ""
219219
220220#: IDF/Views/Download.php:50 IDF/Views/Download.php:52
221#: IDF/Views/Download.php:51
221222msgid "This table shows the files to download."
222223msgstr ""
223224
224225#: IDF/Views/Download.php:54 IDF/gettexttemplates/source/tree.html.php:6
225226#: IDF/Form/Upload.php:49 IDF/Views/Download.php:56 IDF/Views/Download.php:212
226#: IDF/Views/Download.php:218
227#: IDF/Views/Download.php:218 IDF/Views/Download.php:55
228#: IDF/Views/Download.php:223
227229msgid "File"
228230msgstr ""
229231
...... 
232234#: IDF/Form/IssueCreate.php:50 IDF/Form/UpdateUpload.php:42
233235#: IDF/Form/IssueUpdate.php:45 IDF/Views/Download.php:57
234236#: IDF/Views/Download.php:213 IDF/Views/Download.php:219
237#: IDF/Views/Download.php:56 IDF/Views/Download.php:224 IDF/Views/Issue.php:58
238#: IDF/Views/Issue.php:111 IDF/Views/Issue.php:233 IDF/Views/Issue.php:287
235239msgid "Summary"
236240msgstr ""
237241
238242#: IDF/Views/Download.php:56 IDF/gettexttemplates/source/tree.html.php:9
239243#: IDF/Views/Download.php:58 IDF/Views/Download.php:214
240#: IDF/Views/Download.php:220
244#: IDF/Views/Download.php:220 IDF/Views/Download.php:57
245#: IDF/Views/Download.php:225
241246msgid "Size"
242247msgstr ""
243248
244249#: IDF/Views/Download.php:57 IDF/Views/Download.php:59
245250#: IDF/Views/Download.php:215 IDF/Views/Download.php:221
251#: IDF/Views/Download.php:58 IDF/Views/Download.php:226
246252msgid "Uploaded"
247253msgstr ""
248254
249255#: IDF/Views/Download.php:61 IDF/Views/Download.php:63
250256#: IDF/Views/Download.php:219 IDF/Views/Download.php:225
257#: IDF/Views/Download.php:62 IDF/Views/Download.php:230
251258msgid "No downloads were found."
252259msgstr ""
253260
254261#: IDF/Views/Download.php:81 IDF/Views/Download.php:83
262#: IDF/Views/Download.php:85
255263#, php-format
256264msgid "Download %s"
257265msgstr ""
258266
259267#: IDF/Views/Download.php:94 IDF/Views/Download.php:96
260#: IDF/Views/Download.php:100
268#: IDF/Views/Download.php:100 IDF/Views/Download.php:102
261269#, php-format
262270msgid "The file <a href=\"%1$s\">%2$s</a> has been updated."
263271msgstr ""
264272
265273#: IDF/Views/Download.php:135 IDF/gettexttemplates/downloads/base.html.php:4
266274#: IDF/gettexttemplates/downloads/index.html.php:3 IDF/Views/Download.php:137
267#: IDF/Views/Download.php:143
275#: IDF/Views/Download.php:143 IDF/Views/Download.php:147
268276msgid "New Download"
269277msgstr ""
270278
271279#: IDF/Views/Download.php:144 IDF/Views/Download.php:146
272#: IDF/Views/Download.php:152
280#: IDF/Views/Download.php:152 IDF/Views/Download.php:156
273281#, php-format
274282msgid "The <a href=\"%s\">file</a> has been uploaded."
275283msgstr ""
276284
277#: IDF/Views/Issue.php:40
285#: IDF/Views/Issue.php:40 IDF/Views/Issue.php:41
278286#, php-format
279287msgid "%s Recent Issues"
280288msgstr ""
281289
282#: IDF/Views/Issue.php:49 IDF/Views/Issue.php:103
290#: IDF/Views/Issue.php:49 IDF/Views/Issue.php:103 IDF/Views/Issue.php:50
291#: IDF/Views/Issue.php:105
283292msgid "This table shows the open recent issues."
284293msgstr ""
285294
286295#: IDF/Views/Issue.php:56 IDF/Views/Issue.php:108 IDF/Views/Issue.php:227
287#: IDF/Views/Issue.php:280
296#: IDF/Views/Issue.php:280 IDF/Views/Issue.php:57 IDF/Views/Issue.php:110
297#: IDF/Views/Issue.php:232 IDF/Views/Issue.php:286
288298msgid "Id"
289299msgstr ""
290300
291301#: IDF/Views/Issue.php:58 IDF/Views/Issue.php:110 IDF/Views/Issue.php:229
292302#: IDF/Views/Issue.php:282 IDF/Form/IssueCreate.php:70
293#: IDF/Form/IssueUpdate.php:66
303#: IDF/Form/IssueUpdate.php:66 IDF/Views/Issue.php:59 IDF/Views/Issue.php:112
304#: IDF/Views/Issue.php:234 IDF/Views/Issue.php:288
294305msgid "Status"
295306msgstr ""
296307
297308#: IDF/Views/Issue.php:59 IDF/Views/Issue.php:111 IDF/Views/Issue.php:230
298#: IDF/Views/Issue.php:283
309#: IDF/Views/Issue.php:283 IDF/Views/Issue.php:60 IDF/Views/Issue.php:113
310#: IDF/Views/Issue.php:235 IDF/Views/Issue.php:289
299311msgid "Last Updated"
300312msgstr ""
301313
302314#: IDF/Views/Issue.php:63 IDF/Views/Issue.php:115 IDF/Views/Issue.php:234
303#: IDF/Views/Issue.php:287
315#: IDF/Views/Issue.php:287 IDF/Views/Issue.php:64 IDF/Views/Issue.php:117
316#: IDF/Views/Issue.php:239 IDF/Views/Issue.php:293
304317msgid "No issues were found."
305318msgstr ""
306319
307#: IDF/Views/Issue.php:87
320#: IDF/Views/Issue.php:87 IDF/Views/Issue.php:89
308321#, php-format
309322msgid "My Submitted %s Issues"
310323msgstr ""
311324
312#: IDF/Views/Issue.php:90
325#: IDF/Views/Issue.php:90 IDF/Views/Issue.php:92
313326#, php-format
314327msgid "My Working %s Issues"
315328msgstr ""
316329
317#: IDF/Views/Issue.php:131
330#: IDF/Views/Issue.php:131 IDF/Views/Issue.php:134
318331msgid "Submit a new issue"
319332msgstr ""
320333
321#: IDF/Views/Issue.php:143
334#: IDF/Views/Issue.php:143 IDF/Views/Issue.php:146
322335#, php-format
323336msgid "<a href=\"%s\">Issue %d</a> has been created."
324337msgstr ""
325338
326#: IDF/Views/Issue.php:168
339#: IDF/Views/Issue.php:168 IDF/Views/Issue.php:172
327340#, php-format
328341msgid "Issue <a href=\"%s\">%d</a>: %s"
329342msgstr ""
330343
331#: IDF/Views/Issue.php:184
344#: IDF/Views/Issue.php:184 IDF/Views/Issue.php:188
332345#, php-format
333346msgid "<a href=\"%s\">Issue %d</a> has been updated."
334347msgstr ""
335348
336#: IDF/Views/Issue.php:211
349#: IDF/Views/Issue.php:211 IDF/Views/Issue.php:216
337350#, php-format
338351msgid "%s Closed Issues"
339352msgstr ""
340353
341#: IDF/Views/Issue.php:220
354#: IDF/Views/Issue.php:220 IDF/Views/Issue.php:225
342355msgid "This table shows the closed issues."
343356msgstr ""
344357
345#: IDF/Views/Issue.php:258
358#: IDF/Views/Issue.php:258 IDF/Views/Issue.php:264
346359#, php-format
347360msgid "%1$s Issues with Label %2$s"
348361msgstr ""
349362
350#: IDF/Views/Issue.php:261
363#: IDF/Views/Issue.php:261 IDF/Views/Issue.php:267
351364#, php-format
352365msgid "%1$s Closed Issues with Label %2$s"
353366msgstr ""
354367
355#: IDF/Views/Issue.php:273
368#: IDF/Views/Issue.php:273 IDF/Views/Issue.php:279
356369#, php-format
357370msgid "This table shows the issues with label %s."
358371msgstr ""
...... 
389402msgid "Project Home"
390403msgstr ""
391404
392#: IDF/gettexttemplates/base.html.php:9
405#: IDF/gettexttemplates/base.html.php:9 IDF/Form/TabsConf.php:36
393406msgid "Issues"
394407msgstr ""
395408
396409#: IDF/gettexttemplates/base.html.php:10
397410#: IDF/gettexttemplates/downloads/base.html.php:3
398#: IDF/gettexttemplates/admin/base.html.php:6
411#: IDF/gettexttemplates/admin/base.html.php:6 IDF/Form/TabsConf.php:34
399412msgid "Downloads"
400413msgstr ""
401414
402#: IDF/gettexttemplates/base.html.php:11
415#: IDF/gettexttemplates/base.html.php:11 IDF/Form/TabsConf.php:35
403416msgid "Source"
404417msgstr ""
405418
...... 
587600#: IDF/gettexttemplates/admin/issue-tracking.html.php:8
588601#: IDF/gettexttemplates/admin/members.html.php:13
589602#: IDF/gettexttemplates/admin/summary.html.php:8
603#: IDF/gettexttemplates/admin/tabs.html.php:5
590604msgid "Save Changes"
591605msgstr ""
592606
...... 
11431157msgid "No changes were entered."
11441158msgstr ""
11451159
1146#: IDF/Form/MembersConf.php:46
1160#: IDF/Form/MembersConf.php:46 IDF/Form/TabsConf.php:47
11471161msgid "Project owners"
11481162msgstr ""
11491163
1150#: IDF/Form/MembersConf.php:54
1164#: IDF/Form/MembersConf.php:54 IDF/Form/TabsConf.php:46
11511165msgid "Project members"
11521166msgstr ""
11531167
1154#: IDF/Views/Source.php:36
1168#: IDF/Views/Source.php:36 IDF/Views/Source.php:37
11551169#, php-format
11561170msgid "%s Git Change Log"
11571171msgstr ""
11581172
1159#: IDF/Views/Source.php:54 IDF/Views/Source.php:83
1173#: IDF/Views/Source.php:54 IDF/Views/Source.php:83 IDF/Views/Source.php:56
1174#: IDF/Views/Source.php:86
11601175#, php-format
11611176msgid "%s Git Source Tree"
11621177msgstr ""
11631178
1164#: IDF/Views/Source.php:164
1179#: IDF/Views/Source.php:164 IDF/Views/Source.php:168
11651180#, php-format
11661181msgid "%s Commit Details"
11671182msgstr ""
11681183
1169#: IDF/Views/Source.php:165
1184#: IDF/Views/Source.php:165 IDF/Views/Source.php:169
11701185#, php-format
11711186msgid "%s Commit Details - %s"
11721187msgstr ""
11731188
11741189#: IDF/Views/Download.php:199 IDF/Views/Download.php:205
1190#: IDF/Views/Download.php:210
11751191#, php-format
11761192msgid "%1$s Downloads with Label %2$s"
11771193msgstr ""
11781194
11791195#: IDF/Views/Download.php:207 IDF/Views/Download.php:213
1196#: IDF/Views/Download.php:218
11801197#, php-format
11811198msgid "This table shows the downloads with label %s."
11821199msgstr ""
...... 
11861203"<strong>Attention!</strong> This file is marked as deprecated, download it "
11871204"only if you are sure you need this specific version."
11881205msgstr ""
1206
1207#: IDF/Views/Project.php:215
1208#, php-format
1209msgid "%s Tabs Access Rights"
1210msgstr ""
1211
1212#: IDF/Views/Project.php:225
1213msgid "The project tabs access rights have been saved."
1214msgstr ""
1215
1216#: IDF/gettexttemplates/admin/base.html.php:7
1217msgid "Tabs Access"
1218msgstr ""
1219
1220#: IDF/gettexttemplates/admin/tabs.html.php:3
1221msgid "You can configure here the project tabs access rights."
1222msgstr ""
1223
1224#: IDF/gettexttemplates/admin/tabs.html.php:4
1225msgid ""
1226"The form contains some errors. Please correct them to update the access "
1227"rights."
1228msgstr ""
1229
1230#: IDF/gettexttemplates/admin/tabs.html.php:6
1231msgid "Instructions:"
1232msgstr ""
1233
1234#: IDF/Form/TabsConf.php:44
1235msgid "Open to all"
1236msgstr ""
1237
1238#: IDF/Form/TabsConf.php:45
1239msgid "Signed in users"
1240msgstr ""
1241
1242#: IDF/Form/TabsConf.php:48
1243msgid "Closed"
1244msgstr ""
src/IDF/templates/admin/base.html
55<a {if $inSummary}class="active" {/if}href="{url 'IDF_Views_Project::admin', array($project.shortname)}">{trans 'Project Summary'}</a> |
66<a {if $inMembers}class="active" {/if}href="{url 'IDF_Views_Project::adminMembers', array($project.shortname)}">{trans 'Project Members'}</a> |
77<a {if $inIssueTracking}class="active" {/if}href="{url 'IDF_Views_Project::adminIssues', array($project.shortname)}">{trans 'Issue Tracking'}</a> |
8<a {if $inDownloads}class="active" {/if}href="{url 'IDF_Views_Project::adminDownloads', array($project.shortname)}">{trans 'Downloads'}</a>
8<a {if $inDownloads}class="active" {/if}href="{url 'IDF_Views_Project::adminDownloads', array($project.shortname)}">{trans 'Downloads'}</a> |
9<a {if $inTabs}class="active" {/if}href="{url 'IDF_Views_Project::adminTabs', array($project.shortname)}">{trans 'Tabs Access'}</a>
910</div>
1011{/block}
src/IDF/templates/admin/tabs.html
1{extends "admin/base.html"}
2{block docclass}yui-t1{assign $inTabs = true}{/block}
3{block body}
4{if $form.errors}
5<div class="px-message-error">
6<p>{trans 'The form contains some errors. Please correct them to update the access rights.'}</p>
7{if $form.get_top_errors}
8{$form.render_top_errors|unsafe}
9{/if}
10</div>
11{/if}
12<form method="post" action=".">
13<table class="form" summary="">
14<tr>
15<th><strong>{$form.f.downloads_access_rights.labelTag}:</strong></th>
16<td>{if $form.f.downloads_access_rights.errors}{$form.f.downloads_access_rights.fieldErrors}{/if}
17{$form.f.downloads_access_rights|unsafe}
18</td>
19</tr>
20<tr>
21<th><strong>{$form.f.issues_access_rights.labelTag}:</strong></th>
22<td>{if $form.f.issues_access_rights.errors}{$form.f.issues_access_rights.fieldErrors}{/if}
23{$form.f.issues_access_rights|unsafe}
24</td>
25</tr>
26<tr>
27<th><strong>{$form.f.source_access_rights.labelTag}:</strong></th>
28<td>{if $form.f.source_access_rights.errors}{$form.f.source_access_rights.fieldErrors}{/if}
29{$form.f.source_access_rights|unsafe}
30</td>
31</tr>
32<tr>
33<td colspan="2">
34<input type="submit" value="{trans 'Save Changes'}" name="submit" />
35</td>
36</tr>
37</table>
38</form>
39{/block}
40{block context}
41<div class="issue-submit-info">
42<p><strong>{trans 'Instructions:'}</strong></p>
43<p>{blocktrans}You can configure here the project tabs access rights.{/blocktrans}</p>
44</div>
45{/block}
src/IDF/templates/base.html
4242<div id="main-tabs">
4343{if $project}
4444  <a href="{url 'IDF_Views_Project::home', array($project.shortname)}"{block tabhome}{/block}>{trans 'Project Home'}</a>
45  <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>
46  <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>
47  <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}"{block tabsource}{/block}>{trans 'Source'}</a>
45{if $hasIssuesAccess} <a href="{url 'IDF_Views_Issue::index', array($project.shortname)}"{block tabissues}{/block}>{trans 'Issues'}</a>{/if}
46{if $hasDownloadsAccess} <a href="{url 'IDF_Views_Download::index', array($project.shortname)}"{block tabdownloads}{/block}>{trans 'Downloads'}</a>{/if}
47{if $hasSourceAccess} <a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}"{block tabsource}{/block}>{trans 'Source'}</a>{/if}
4848{if $isOwner}
4949  <a href="{url 'IDF_Views_Project::admin', array($project.shortname)}"{block tabadmin}{/block}>{trans 'Administer'}</a>{/if}{/if}
5050</div>
src/IDF/templates/issues/view.html
1313<p>{blocktrans}Comment <a href="{$url}">{$i}</a> by {$who}, {$c.creation_dtime|date}{/blocktrans}</p>
1414{/if}
1515
16<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>
16<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>
1717
1818{if $i> 0 and $c.changedIssue()}
1919<div class="issue-changes">
src/IDF/templates/js-hotkeys.html
33<script type="text/javascript" charset="utf-8">
44// <!--
55{hotkey 'Shift+h', 'IDF_Views_Project::home', array($project.shortname)}
6{hotkey 'Shift+a', 'IDF_Views_Issue::create', array($project.shortname)}
7{hotkey 'Shift+i', 'IDF_Views_Issue::index', array($project.shortname)}
8{hotkey 'Shift+d', 'IDF_Views_Download::index', array($project.shortname)}
9{hotkey 'Shift+s', 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}
10{if !$user.isAnonymous()}
6{if $hasIssuesAccess}{hotkey 'Shift+a', 'IDF_Views_Issue::create', array($project.shortname)}
7{hotkey 'Shift+i', 'IDF_Views_Issue::index', array($project.shortname)}{/if}
8{if $hasDownloadsAccess}{hotkey 'Shift+d', 'IDF_Views_Download::index', array($project.shortname)}{/if}
9{if $hasSourceAccess}{hotkey 'Shift+s', 'IDF_Views_Source::treeBase', array($project.shortname, 'master')}{/if}
10{if $hasIssuesAccess and !$user.isAnonymous()}
1111{hotkey 'Shift+m', 'IDF_Views_Issue::myIssues', array($project.shortname, 'submit')}
1212{hotkey 'Shift+w', 'IDF_Views_Issue::myIssues', array($project.shortname, 'owner')}
1313{/if} //-->
src/IDF/templates/project-home.html
1010{$project.description|markdown}
1111{/block}
1212{block context}
13{if $downloads.count() > 0}
13{if count($downloads) > 0}
1414<p><strong>{trans 'Featured Downloads'}</strong><br />
1515{foreach $downloads as $download}
1616<span class="label"><a href="{url 'IDF_Views_Download::view', array($project.shortname, $download.id)}" title="{$download.summary}">{$download}</a></span><br />
src/IDF/templates/source/changelog.html
1414{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $change.commit)}
1515<tr class="log">
1616<td><a href="{$url}">{$change.date|dateago:"wihtout"}</a></td>
17<td>{issuetext $change.title, $project}{if $change.full_message}<br /><br />{issuetext $change.full_message, $project}{/if}</td>
17<td>{issuetext $change.title, $request}{if $change.full_message}<br /><br />{issuetext $change.full_message, $request}{/if}</td>
1818</tr>
1919<tr class="extra">
2020<td colspan="2">
src/IDF/templates/source/commit.html
1515<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>
1616</tr>
1717<tr>
18<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>
18<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>
1919</tr>
2020{if count($diff.files)}
2121<tr>

Archive Download the corresponding diff file

Branches:
dev
master
newdiff
svn