]> git.immae.eu Git - github/wallabag/wallabag.git/blob - src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
Merge pull request #1478 from K-Phoen/rule-based-tags
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Resources / views / themes / material / Config / index.html.twig
1 {% extends "WallabagCoreBundle::layout.html.twig" %}
2
3 {% block title %}{% trans %}config{% endtrans %}{% endblock %}
4
5 {% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel settings">
10
11 <div class="row">
12 <div class="div_tabs col s12">
13 <ul class="tabs">
14 <li class="tab col s3"><a class="active" href="#set1">{% trans %}Settings{% endtrans %}</a></li>
15 <li class="tab col s3"><a href="#set2">{% trans %}RSS{% endtrans %}</a></li>
16 <li class="tab col s3"><a href="#set3">{% trans %}User information{% endtrans %}</a></li>
17 <li class="tab col s3"><a href="#set4">{% trans %}Password{% endtrans %}</a></li>
18 <li class="tab col s3"><a href="#set5">{% trans %}Tagging rules{% endtrans %}</a></li>
19 {% if is_granted('ROLE_SUPER_ADMIN') %}
20 <li class="tab col s3"><a href="#set6">{% trans %}Add a user{% endtrans %}</a></li>
21 {% endif %}
22 </ul>
23 </div>
24
25 <div id="set1" class="col s12">
26 {{ form_start(form.config) }}
27 {{ form_errors(form.config) }}
28
29 <div class="row">
30 <div class="input-field col s12">
31 {{ form_errors(form.config.theme) }}
32 {{ form_widget(form.config.theme) }}
33 <label class="required">{% trans %}Theme{% endtrans %}</label>
34 </div>
35 </div>
36
37 <div class="row">
38 <div class="input-field col s12">
39 {{ form_label(form.config.items_per_page) }}
40 {{ form_errors(form.config.items_per_page) }}
41 {{ form_widget(form.config.items_per_page) }}
42 </div>
43 </div>
44
45 <div class="row">
46 <div class="input-field col s12">
47 {{ form_label(form.config.language) }}
48 {{ form_errors(form.config.language) }}
49 {{ form_widget(form.config.language) }}
50 </div>
51 </div>
52
53 <div class="hidden">{{ form_rest(form.config) }}</div>
54 <button class="btn waves-effect waves-light" type="submit" name="action">
55 {% trans %}Save{% endtrans %}
56 </button>
57 </form>
58 </div>
59
60 <div id="set2" class="col s12">
61 {{ form_start(form.rss) }}
62 {{ form_errors(form.rss) }}
63
64 <div class="row">
65 <div class="input-field col s12">
66 {% trans %}RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.{% endtrans %}
67 </div>
68 </div>
69
70 <div class="row">
71 <div class="input-field col s12">
72 <label>{% trans %}RSS token{% endtrans %}</label>
73 <div>
74 {% if rss.token %}
75 {{ rss.token }}
76 {% else %}
77 <em>{% trans %}No token{% endtrans %}</em>
78 {% endif %}
79 – <a href="{{ path('generate_token') }}">{% if rss.token %}{% trans %}Reset your token{% endtrans %}{% else %}{% trans %}Create your token{% endtrans %}{% endif %}</a>
80 </div>
81 </div>
82 </div>
83 {% if rss.token %}
84 <div class="row">
85 <div class="input-field col s12">
86 <label>{% trans %}RSS links{% endtrans %}</label>
87 <ul>
88 <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}unread{% endtrans %}</a></li>
89 <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}starred{% endtrans %}</a></li>
90 <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}archive{% endtrans %}</a></li>
91 </ul>
92
93 </div>
94 </div>
95 {% endif %}
96
97 <div class="row">
98 <div class="input-field col s12">
99 {{ form_label(form.rss.rss_limit) }}
100 {{ form_errors(form.rss.rss_limit) }}
101 {{ form_widget(form.rss.rss_limit) }}
102 </div>
103 </div>
104
105 <div class="hidden">{{ form_rest(form.rss) }}</div>
106 <button class="btn waves-effect waves-light" type="submit" name="action">
107 {% trans %}Save{% endtrans %}
108 </button>
109
110 </form>
111 </div>
112
113 <div id="set3" class="col s12">
114 {{ form_start(form.user) }}
115 {{ form_errors(form.user) }}
116
117 <div class="row">
118 <div class="input-field col s12">
119 {{ form_label(form.user.name) }}
120 {{ form_errors(form.user.name) }}
121 {{ form_widget(form.user.name) }}
122 </div>
123 </div>
124
125 <div class="row">
126 <div class="input-field col s12">
127 {{ form_label(form.user.email) }}
128 {{ form_errors(form.user.email) }}
129 {{ form_widget(form.user.email) }}
130 </div>
131 </div>
132
133 {% if twofactor_auth %}
134 <div class="row">
135 <div class="input-field col s12">
136 {{ form_widget(form.user.twoFactorAuthentication) }}
137 {{ form_label(form.user.twoFactorAuthentication) }}
138 {{ form_errors(form.user.twoFactorAuthentication) }}
139 </div>
140 </div>
141 {% endif %}
142
143 <div class="hidden">{{ form_rest(form.user) }}</div>
144 <button class="btn waves-effect waves-light" type="submit" name="action">
145 {% trans %}Save{% endtrans %}
146 </button>
147
148 </form>
149 </div>
150
151 <div id="set4" class="col s12">
152 {{ form_start(form.pwd) }}
153 {{ form_errors(form.pwd) }}
154
155 <div class="row">
156 <div class="input-field col s12">
157 {{ form_label(form.pwd.old_password) }}
158 {{ form_errors(form.pwd.old_password) }}
159 {{ form_widget(form.pwd.old_password) }}
160 </div>
161 </div>
162
163 <div class="row">
164 <div class="input-field col s12">
165 {{ form_label(form.pwd.new_password.first) }}
166 {{ form_errors(form.pwd.new_password.first) }}
167 {{ form_widget(form.pwd.new_password.first) }}
168 </div>
169 </div>
170
171 <div class="row">
172 <div class="input-field col s12">
173 {{ form_label(form.pwd.new_password.second) }}
174 {{ form_errors(form.pwd.new_password.second) }}
175 {{ form_widget(form.pwd.new_password.second) }}
176 </div>
177 </div>
178
179 <div class="hidden">{{ form_rest(form.pwd) }}</div>
180 <button class="btn waves-effect waves-light" type="submit" name="action">
181 {% trans %}Save{% endtrans %}
182 </button>
183
184 </form>
185 </div>
186
187 <div id="set5" class="col s12">
188 <div class="row">
189 <div class="input-field col s12">
190 <ul>
191 {% for tagging_rule in app.user.config.taggingRules %}
192 <li>
193 if « {{ tagging_rule.rule }} » then tag as « {{ tagging_rule.tags|join(', ') }} »
194 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{% trans %}Delete{% endtrans %}">
195 <i class="tool grey-text delete mdi-action-delete"></i>
196 </a>
197 </li>
198 {% endfor %}
199 </ul>
200 </div>
201 </div>
202
203 {{ form_start(form.new_tagging_rule) }}
204 {{ form_errors(form.new_tagging_rule) }}
205
206 <div class="row">
207 <div class="input-field col s12">
208 {{ form_label(form.new_tagging_rule.rule) }}
209 {{ form_errors(form.new_tagging_rule.rule) }}
210 {{ form_widget(form.new_tagging_rule.rule) }}
211 </div>
212 </div>
213
214 <div class="row">
215 <div class="input-field col s12">
216 {{ form_label(form.new_tagging_rule.tags) }}
217 {{ form_errors(form.new_tagging_rule.tags) }}
218 {{ form_widget(form.new_tagging_rule.tags) }}
219 </div>
220 </div>
221
222 <div class="hidden">{{ form_rest(form.new_tagging_rule) }}</div>
223 <button class="btn waves-effect waves-light" type="submit" name="action">
224 {% trans %}Save{% endtrans %}
225 </button>
226 </form>
227
228 <div class="row">
229 <div class="input-field col s12">
230 <h4>{% trans %}FAQ{% endtrans %}</h4>
231
232 <h5>{% trans %}What does « tagging rules » mean?{% endtrans %}</h5>
233 <p class="help">
234 {% trans %}
235 They are rules used by Wallabag to automatically tag new entries.<br />
236 Each time a new entry is added, all the tagging rules will be used to add
237 the tags you configured, thus saving you the trouble to manually classify
238 your entries.
239 {% endtrans %}
240 </p>
241
242 <h5>{% trans %}How do I use them?{% endtrans %}</h5>
243 <p class="help">
244 {% trans %}
245 Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />
246 In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i>
247 field.<br />
248 Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />
249 Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »
250 {% endtrans %}
251 </p>
252
253 <h5>{% trans %}Which variables and operators can I use to write rules?{% endtrans %}</h5>
254 <p class="help">
255 {% trans %}The following variables and operators can be used to create tagging rules:{% endtrans %}
256
257 <table>
258 <thead>
259 <tr>
260 <th>{% trans %}Variable{% endtrans %}</th>
261 <th>{% trans %}Meaning{% endtrans %}</th>
262 <th>{% trans %}Operator{% endtrans %}</th>
263 <th>{% trans %}Meaning{% endtrans %}</th>
264 </tr>
265 </thead>
266
267 <tbody>
268 <tr>
269 <td>title</td>
270 <td>{% trans %}Title of the entry{% endtrans %}</td>
271 <td>&lt;=</td>
272 <td>{% trans %}Less than…{% endtrans %}</td>
273 </tr>
274 <tr>
275 <td>url</td>
276 <td>{% trans %}URL of the entry{% endtrans %}</td>
277 <td>&lt;</td>
278 <td>{% trans %}Strictly less than…{% endtrans %}</td>
279 </tr>
280 <tr>
281 <td>isArchived</td>
282 <td>{% trans %}Whether the entry is archived or not{% endtrans %}</td>
283 <td>=&gt;</td>
284 <td>{% trans %}Greater than…{% endtrans %}</td>
285 </tr>
286 <tr>
287 <td>isStared</td>
288 <td>{% trans %}Whether the entry is starred or not{% endtrans %}</td>
289 <td>&gt;</td>
290 <td>{% trans %}Strictly greater than…{% endtrans %}</td>
291 </tr>
292 <tr>
293 <td>content</td>
294 <td>{% trans %}The entry's content{% endtrans %}</td>
295 <td>=</td>
296 <td>{% trans %}Equal to…{% endtrans %}</td>
297 </tr>
298 <tr>
299 <td>language</td>
300 <td>{% trans %}The entry's language{% endtrans %}</td>
301 <td>!=</td>
302 <td>{% trans %}Not equal to…{% endtrans %}</td>
303 </tr>
304 <tr>
305 <td>mimetype</td>
306 <td>{% trans %}The entry's mime-type{% endtrans %}</td>
307 <td>OR</td>
308 <td>{% trans %}One rule or another{% endtrans %}</td>
309 </tr>
310 <tr>
311 <td>readingTime</td>
312 <td>{% trans %}The estimated entry's reading time, in minutes{% endtrans %}</td>
313 <td>AND</td>
314 <td>{% trans %}One rule and another{% endtrans %}</td>
315 </tr>
316 <tr>
317 <td>domainName</td>
318 <td>{% trans %}The domain name of the entry{% endtrans %}</td>
319 <td>matches</td>
320 <td>
321 {% trans %}
322 Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />
323 Example: <code>title matches "football"</code>
324 {% endtrans %}
325 </td>
326 </tr>
327 </tbody>
328 </table>
329 </p>
330 </div>
331 </div>
332 </div>
333
334 {% if is_granted('ROLE_SUPER_ADMIN') %}
335 <div id="set6" class="col s12">
336 {{ form_start(form.new_user) }}
337 {{ form_errors(form.new_user) }}
338
339 <div class="row">
340 <div class="input-field col s12">
341 {{ form_label(form.new_user.username) }}
342 {{ form_errors(form.new_user.username) }}
343 {{ form_widget(form.new_user.username) }}
344 </div>
345 </div>
346
347 <div class="row">
348 <div class="input-field col s12">
349 {{ form_label(form.new_user.plainPassword.first) }}
350 {{ form_errors(form.new_user.plainPassword.first) }}
351 {{ form_widget(form.new_user.plainPassword.first) }}
352 </div>
353 </div>
354
355 <div class="row">
356 <div class="input-field col s12">
357 {{ form_label(form.new_user.plainPassword.second) }}
358 {{ form_errors(form.new_user.plainPassword.second) }}
359 {{ form_widget(form.new_user.plainPassword.second) }}
360 </div>
361 </div>
362
363 <div class="row">
364 <div class="input-field col s12">
365 {{ form_label(form.new_user.email) }}
366 {{ form_errors(form.new_user.email) }}
367 {{ form_widget(form.new_user.email) }}
368 </div>
369 </div>
370
371 <div class="hidden">{{ form_rest(form.new_user) }}</div>
372 <button class="btn waves-effect waves-light" type="submit" name="action">
373 {% trans %}Add a user{% endtrans %}
374 </button>
375
376 </form>
377 </div>
378 {% endif %}
379 </div>
380
381 </div>
382 </div>
383 </div>
384 {% endblock %}