Show.html 14.4 KB
Newer Older
1
<html xmlns:terfe2="http://typo3.org/ns/T3o/TerFe2/ViewHelpers" xmlns:tl="http://typo3.org/ns/T3o/T3olayout/ViewHelpers" xmlns:f="http://www.w3.org/1999/html">
2

3
<f:layout name="Default" />
4
5

<f:section name="main">
6

7
8
9
10
11
12
13
14
15
16
    <f:if condition="{extension}">
        <f:then>
            <f:security.ifHasRole role="{settings.reviewerGroupUid}">
                <div class="alert alert-info mb-3" role="alert">
                    <div class="media">
                        <f:format.raw>
                            <tl:gravatar emailAddress="{owner.email}" size="125" />
                        </f:format.raw>
                        <div class="media-body ml-5">
                            <h4>Owner of this extension</h4>
17
18
19
20
21
22
23
24
25
26
27
28
29
                            <f:if condition="{owner}">
                                <f:then>
                                    <p>
                                        <strong>Name:</strong> {owner.name}<br>
                                        <strong>Email:</strong>
                                        <f:link.email email="{owner.email}">{owner.email}</f:link.email>
                                        <br>
                                        <strong>Username:</strong> {owner.username}
                                    </p>
                                </f:then>
                                <f:else>
                                    <p>
                                        <strong>Username:</strong> {extension.frontendUser}
Thomas Löffler's avatar
Thomas Löffler committed
30
                                        <small>User did not log in on typo3.org at least once.</small>
31
32
33
                                    </p>
                                </f:else>
                            </f:if>
34
35
36
37
38
39
40
41
                        </div>
                    </div>
                </div>
            </f:security.ifHasRole>
            <f:if condition="{extension.lastVersion.reviewState} == -2">
                <div class="alert alert-warning mt-3 mb-3" role="alert">
                    <h4 class="alert-header">
                        <span class="ter-ext-state-beta"><i class="fa fa-exclamation-triangle"></i></span>
42
                        Outdated extension<br>
43
44
45
46
                        <small class="text-muted">This extension supports none of the currently supported TYPO3 core version</small>
                    </h4>
                </div>
            </f:if>
47
48
49
50
            <f:if condition="{owner.username} == 'abandoned_extensions'">
                <div class="alert alert-danger mt-3 mb-3" role="alert">
                    <h4 class="alert-header">
                        <span class="ter-ext-state-beta"><i class="fa fa-exclamation-triangle"></i></span>
51
                        Abandoned extension<br>
52
                        <small class="text-muted">This extension has no maintainer at the moment. If you like to become the maintainer of this extension, fill out our <f:link.page pageUid="{settings.pages.abandonedExtensionFormPid}">registration form</f:link.page>.</small>
53
54
55
                    </h4>
                </div>
            </f:if>
56
57
58
59
60
            <f:if condition="{extension.securityTeamNotice}">
                <div class="alert alert-warning mt-3 mb-3" role="alert">
                    {extension.securityTeamNotice}
                </div>
            </f:if>
61

62
            <div itemscope itemtype="http://schema.org/SoftwareApplication">
63
64
65
                <div hidden itemprop="applicationCategory">TYPO3 Extension</div>
                <div hidden itemprop="applicationSuite">TYPO3</div>
                <div hidden itemprop="downloadUrl">
66
                    <f:uri.action action="download" absolute="1" controller="Extension" arguments="{extension : extension, versionString : extension.lastVersion.versionString, format : 'zip'}" />
67
68
69
70
                </div>
                <div hidden itemprop="fileFormat">application/zip</div>
                <div hidden itemprop="operatingSystem">Windows,Linux,MacOS</div>

71
72
73
74
                <div class="row mt-3 align-items-center">
                    <div class="col-md-9">
                        <header>
                            <h1>
75
                                <terfe2:extensionIcon version="{extension.lastVersion}" alt="{extension.lastVersion.title}" class="ter-ext-icon" />
Thomas Löffler's avatar
Thomas Löffler committed
76
77
78
                                <span title="Extension title: {extension.lastVersion.title}" itemprop="alternateName">{extension.lastVersion.title}</span>
                            </h1>
                            <h2>
79
                                <small class="text-muted">
Thomas Löffler's avatar
Thomas Löffler committed
80
81
                                    <span itemprop="name" title="Extension key: {extension.extKey}">{extension.extKey}</span> /
                                    <span title="Stability: {extension.lastVersion.state}" class="ter-ext-state-{extension.lastVersion.state}">{extension.lastVersion.state}</span>
82
                                </small>
Thomas Löffler's avatar
Thomas Löffler committed
83
84
                                <f:render partial="Like" arguments="{hasLiked: hasLiked, extension: extension}" />
                            </h2>
85
86
87
                        </header>
                    </div>
                    <div class="col-md-3">
Thomas Löffler's avatar
Thomas Löffler committed
88

89
                    </div>
90
                </div>
91

92
93
94
                <div class="row mb-3">
                    <div class="col-md-8">
                        <p itemprop="description">{extension.lastVersion.description}</p>
95
                        <f:render partial="VersionSupportForTypo3" arguments="{version: extension.lastVersion, additionalVersions: extension.additionalSupportVersions}" />
96
                        <f:if condition="{extension.composerName}">
Thomas Löffler's avatar
Thomas Löffler committed
97
                            <p class="mb-3">
98
                            <h4>Composer support</h4>
99
                            <f:render partial="ComposerNameWithClipboard" arguments="{composerName: extension.composerName}" />
Thomas Löffler's avatar
Thomas Löffler committed
100
                            </p>
101
                        </f:if>
102
                        <f:if condition="{extension.tags}">
103
                            <h4>Tags</h4>
104
105
                            <p class="tags">
                                <f:for each="{extension.tags}" as="tag">
Thomas Löffler's avatar
Thomas Löffler committed
106
                                    <f:link.page class="btn btn-outline-info mb-1" pageUid="{settings.pages.searchResultsPid}" additionalParams="{tx_solr: {filter: {0: 'tags:{tag.title}'}}}">
107
108
109
110
                                        <strong>#{tag.title}</strong>
                                    </f:link.page>
                                </f:for>
                            </p>
Thomas Löffler's avatar
Thomas Löffler committed
111
112
113
114
115
116
117
                            <div hidden itemprop="keywords">
                                <f:for each="{extension.tags}" as="tag" iteration="it">{tag.title}
                                    <f:if condition="{it.isLast}">
                                        <f:else>,</f:else>
                                    </f:if>
                                </f:for>
                            </div>
118
                        </f:if>
119
                        <h4>
120
                            <f:translate key="last_upload_comment" />
121
                        </h4>
122
123
124
125
                        <p itemprop="releaseNotes">
                            <f:format.nl2br>{extension.lastVersion.uploadComment}</f:format.nl2br>
                        </p>
                        <f:if condition="{versionHistory->f:count()} >= 1}">
126
                            <h4>
127
                                <f:translate key="downloads_by_version" />
128
                            </h4>
129
130
131
                            <p>
                                Downloads since <f:format.date format="%d. %b %Y">{extension.dateOfFirstUpload}</f:format.date> including version {extension.lastVersion.versionString}: <f:format.number decimals="0" thousandsSeparator="," decimalSeparator=".">{extension.downloads}</f:format.number>
                            </p>
132
                            <script type="text/javascript">
133
                                var versionChartData = {extension.downloadsByTimeIntervalAsJson -> f:format.raw()};
134
135
                            </script>
                            <div id="versionChart">
136

137
138
139
140
                            </div>
                        </f:if>
                    </div>
                    <div class="col-md-4">
Thomas Löffler's avatar
Thomas Löffler committed
141
                        <f:if condition="{extension.lastVersion.reviewState} != -1">
142
                            <f:link.action rel="nofollow" class="btn btn-primary btn-block btn-lg" controller="Extension" action="download" arguments="{extension : extension, versionString : extension.lastVersion.versionString, format : 'zip'}">
Thomas Löffler's avatar
Thomas Löffler committed
143
144
145
146
147
148
                                <strong>Download
                                    <span itemprop="softwareVersion">{extension.lastVersion.versionString}</span></strong>
                            </f:link.action>
                        </f:if>
                        <f:if condition="{extension.externalManual}">
                            <f:then>
149
                                <f:render partial="ExternalButtonLink" arguments="{externalLink: extension.externalManual, icon: 'fa-book', label: 'External Manual', btnStyle: 'btn-info'}"/>
Thomas Löffler's avatar
Thomas Löffler committed
150
151
                            </f:then>
                            <f:else>
152
                                <f:render partial="ExternalButtonLink" arguments="{externalLink: documentationLink, icon: 'fa-book', label: 'Extension Manual', btnStyle: 'btn-info'}"/>
Thomas Löffler's avatar
Thomas Löffler committed
153
154
                            </f:else>
                        </f:if>
155
156
157
158
159
160
161
162
163
164
165
166
167
168
                        <f:security.ifAuthenticated>
                            <f:if condition="{notification}">
                                <f:then>
                                    <button class="btn btn-success btn-block" data-rating-type="deactivateNotification" data-rating-extension="{extension.uid}" title="Do not notify me anymore of new extension releases">
                                        <strong><i class="fa fa-bell"></i> Notify me via email on new releases</strong>
                                    </button>
                                </f:then>
                                <f:else>
                                    <button class="btn btn-danger btn-block" data-rating-type="activateNotification" data-rating-extension="{extension.uid}" title="Notify me on new extension releases">
                                        <strong><i class="fa fa-bell-slash"></i> Notify me via email on new releases</strong>
                                    </button>
                                </f:else>
                            </f:if>
                        </f:security.ifAuthenticated>
169
170
171
172
                        <f:render partial="ExternalButtonLink" arguments="{externalLink: extension.forgeLink, icon: 'fa-hand-o-right', label: 'Found an Issue?'}"/>
                        <f:render partial="ExternalButtonLink" arguments="{externalLink: extension.repositoryUrl, icon: 'fa-code-fork', label: 'Code Insights'}"/>
                        <f:render partial="ExternalButtonLink" arguments="{externalLink: extension.packagistPage, icon: 'fa-cube', label: 'Packagist.org'}"/>
                        <f:render partial="ExternalButtonLink" arguments="{externalLink: extension.paypalUrl, icon: 'fa-thumbs-o-up', label: 'Donate and Give Kudos'}"/>
173
                        <f:render partial="ExternalButtonLink" arguments="{externalLink: 'https://crowdin.com/project/{extension.crowdinKey}/invite', icon: 'fa-globe', label: 'Crowdin translations'}"/>
Thomas Löffler's avatar
Thomas Löffler committed
174

175
                        <div class="alert alert-secondary">
176
                            <f:render partial="ExtensionSingleInfo" arguments="{extension:extension, settings:settings, owner:owner, flattrUrl:flattrUrl, documentationLink:documentationLink, qualityLinkNotBroken:qualityLinkNotBroken, urlToQualityServer:urlToQualityServer, extensionDownloads:extensionDownloads}" />
177
178
179
                        </div>
                    </div>
                </div>
180
181
182
183
184
185
186
187
188
189
190
191
192
193
              <f:if condition="{extension.localizationStatus}">
                  <div class="mb-3" id="accordion" role="tablist" aria-multiselectable="true">
                      <div class="card bgWhite">
                          <div class="card-header" role="tab" id="headingLocalization">
                              <h4 class="mb-0">
                                  <a data-toggle="collapse" data-parent="#accordion" href="#localization" aria-expanded="false" aria-controls="collapseOne">
                                      Localization Status
                                  </a>
                              </h4>
                          </div>
                          <div id="localization" class="collapse" role="tabpanel" aria-labelledby="headingLocalization">
                              <div class="card-body">
                                  <div class="row">
                                      <f:for each="{extension.localizationStatus}" as="localization">
Thomas Löffler's avatar
Thomas Löffler committed
194
                                          <div class="col-4">
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
                                              <h6 class="mb-0">
                                                  <a href="https://crowdin.com/project/{extension.crowdinKey}/{localization.iso}" target="_blank" rel="noopener noreferrer">
                                                      {localization.name}: {localization.percentage}%
                                                  </a>
                                              </h6>
                                          <div class="progress mb-3">
                                              <div class="progress-bar" role="progressbar" style="width: {localization.percentage}%;" aria-valuenow="{localization.percentage}" aria-valuemin="0" aria-valuemax="100">{localization.percentage}%</div>
                                          </div>
                                        </div>
                                    </f:for>
                                </div>
                            </div>
                        </div>
                      </div>
                  </div>

              </f:if>

213

Thomas Löffler's avatar
Thomas Löffler committed
214
              <f:render partial="InstallationHowTo" arguments="{_all}" />
215

Thomas Löffler's avatar
Thomas Löffler committed
216
217
218
219
220
221
                <h3 id="version-history">
                    <f:translate key="version_history" />
                </h3>
                <div class="ter-ext-single-versionhistory ter-toggle-hide">
                    <f:render partial="ExtensionUploadHistoryList" arguments="{versionHistory: extension.reverseVersionsByVersionNumber, extension: extension}" />
                </div>
sventb's avatar
sventb committed
222

223
224
                <div class="socialshareprivacy"></div>
            </div>
225
226
227
        </f:then>
        <f:else>
            <div class="alert alert-warning">
228
                No public version of this extension available.
229
230
231
            </div>
        </f:else>
    </f:if>
232
</f:section>
233
234

</html>