Index.html 8.83 KB
Newer Older
1
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
2
<f:layout name="main" />
3
<f:section name="content">
4

5
6
7
    <h1><f:translate key="installedExtensions" /></h1>
    <f:render partial="List/UploadForm" />
    <form class="form-inline">
8
9
10
        <div class="row">
            <div class="col-sm-6">
                <div class="form-group">
11
                    <f:form.textfield name="Tx_Extensionmanager_extensionkey" placeholder="{f:translate(key:'extensionList.search')}" id="Tx_Extensionmanager_extensionkey" value="{search}" class="form-control extension-list-search" />
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
                </div>
            </div>
            <div class="col-sm-6">
                <div class="btn-group pull-right">
                    <f:link.action
                        action="index"
                        controller="List"
                        title="{f:translate(key:'extensionList.filter.showAll')}"
                        arguments="{filter:''}"
                        class="btn btn-default {f:if(condition: '{backendUserFilter} == All', then: 'active')}"
                        style="width: 80px;">
                        <f:translate key="extensionList.filter.showAll" />
                    </f:link.action>
                    <f:link.action
                        action="index"
                        controller="List"
                        arguments="{filter:'System'}"
                        title="{f:translate(key:'extensionList.filter.showSystemExtensions')}"
                        class="btn btn-default {f:if(condition: '{backendUserFilter} == System', then: 'active')}"
                        style="width: 80px;">
                        <f:translate key="extensionList.filter.showSystemExtensions" />
                    </f:link.action>
                    <f:link.action
                        action="index"
                        controller="List"
                        arguments="{filter:'Local'}"
                        title="{f:translate(key:'extensionList.filter.showLocalExtensions')}"
                        class="btn btn-default {f:if(condition: '{backendUserFilter} == Local', then: 'active')}"
                        style="width: 80px;">
                        <f:translate key="extensionList.filter.showLocalExtensions" />
                    </f:link.action>
                </div>
            </div>
45
46
47
48
        </div>
    </form>
    <br>
    <div class="table-fit">
49
50
51
        <table id="typo3-extension-list" class="table table-striped table-hover extension-list">
            <thead>
                <tr>
52
53
                    <th title="{f:translate(key:'extensionList.header.title.update')}"><f:translate key="extensionList.header.update"/></th>
                    <th title="{f:translate(key:'extensionList.header.title.activate')}"><f:translate key="extensionList.header.activate"/></th>
54
55
56
57
                    <th data-filterable><f:translate key="extensionList.header.extensionName"/></th>
                    <th data-filterable data-sort-default><f:translate key="extensionList.header.extensionKey"/></th>
                    <th data-sort-method="dotsep"><f:translate key="extensionList.header.extensionVersion"/></th>
                    <th data-sort-method="none"><f:translate key="extensionList.header.extensionState"/></th>
58
                    <th><f:translate key="extensionList.header.extensionType"/></th>
59
                    <th data-sort-method="none"><f:translate key="extensionList.header.extensionActions"/></th>
60
61
62
63
                </tr>
            </thead>
            <tbody>
                <f:for each="{extensions}" as="extension" key="extensionKey">
64
65
66
67
                    <f:variable name="updateIsBlocked" value="{f:if(condition: '{isComposerMode} || {settings.offlineMode} || {extension.state} == \'excludeFromUpdates\'', then: '1', else: '0')}" />
                    <f:variable name="sortUpdate" value="0" />
                    <f:variable name="sortUpdate" value="{f:if(condition: '{extension.updateAvailable} && {updateIsBlocked}', then: '1')}" />
                    <f:variable name="sortUpdate" value="{f:if(condition: '{extension.updateAvailable} && !{updateIsBlocked}', then: '2')}" />
68
69
                    <f:if condition="{extension.terObject}">
                        <f:then>
70
                            <tr role="row" id="{extensionKey}" class="{f:if(condition:'{extension.terObject.reviewState} == -1', then:'insecure')}{f:if(condition:'{extension.terObject.reviewState} == -2', then:'outdated')} {f:if(condition:'{extension.installed}', then: '', else: 'inactive')}">
71
72
                        </f:then>
                        <f:else>
73
                            <tr role="row" id="{extensionKey}" class="{f:if(condition:'{extension.installed}', then: '', else: 'inactive')}">
74
75
                        </f:else>
                    </f:if>
76
                    <td data-sort="{sortUpdate}">
77
                        <f:if condition="{extension.updateAvailable}">
78
                            <f:if condition="{updateIsBlocked}">
79
80
81
82
83
84
                                <f:then>
                                    <span class="btn btn-default disabled" title="{f:translate(key:'extensionList.updateDisabled')}">
                                        <core:icon identifier="actions-system-extension-update" />
                                    </span>
                                </f:then>
                                <f:else>
85
86
87
88
89
                                    <f:link.action action="updateCommentForUpdatableVersions"
                                        class="btn btn-default"
                                        additionalAttributes="{data-action:'update-extension'}"
                                        format="json" controller="Download"
                                        arguments="{extension:extension.key, integerVersionStart: extension.terObject.integerVersion, integerVersionStop: extension.updateToVersion.integerVersion}"
90
                                        title="{f:translate(key:'extensionList.updateToVersion', arguments:'{0:extension.updateToVersion.version}')}"
91
92
93
                                    >
                                        <core:icon identifier="actions-system-extension-update" />
                                    </f:link.action>
94
95
                                </f:else>
                            </f:if>
96
97
                        </f:if>
                    </td>
98
                    <td data-sort="{f:if(condition: extension.installed, then: 'active', else: 'inactive')}">
99
100
101
102
                        <em:toggleExtensionInstallationState extension="{extension}" />
                    </td>
                    <td>
                        <f:if condition="{extension.icon}">
103
                            <img class="extension-icon" src="{extension.icon}" alt="" />
104
105
106
107
108
109
110
111
112
113
                        </f:if>
                        <span title="{extension.description}">{extension.title}</span>
                    </td>
                    <td>{extensionKey}</td>
                    <td>{extension.version}</td>
                    <td><span class="label label-{extension.state}">{extension.state}</span></td>
                    <td>{extension.type}</td>
                    <td>
                        <div class="btn-group">
                            <em:processAvailableActions extension="{extension}">
114
115
116
                                <f:if condition="!{isComposerMode}">
                                    <em:removeExtension class="btn btn-default" extension="{extension}" />
                                </f:if>
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
                                <f:link.action action="downloadExtensionZip" controller="Action" arguments="{extension:extension.key}" title="{f:translate(key:'extensionList.downloadzip')}" class="btn btn-default">
                                    <core:icon identifier="actions-system-extension-download" />
                                </f:link.action>
                                <em:reloadSqlData class="btn btn-default" extension="{extension}" />
                                <f:if condition="{extension.terObject.documentationLink}">
                                    <f:then>
                                        <a href="{extension.terObject.documentationLink}" target="_blank" rel="noopener noreferrer" class="btn btn-default">
                                            <core:icon identifier="actions-system-extension-documentation" size="small" />
                                        </a>
                                    </f:then>
                                    <f:else>
                                        <span class="btn btn-default disabled"><core:icon identifier="empty-empty" size="small" /></span>
                                    </f:else>
                                </f:if>
                            </em:processAvailableActions>
                        </div>
                    </td>
                    </tr>
                </f:for>
            </tbody>
        </table>
138
    </div>
139

140
</f:section>