5c19bb62212e14c64814040bf91d46ad08282865
[friendica-addons.git/.git] / advancedcontentfilter / doc / advancedcontentfilter.md
1 <style>
2 .advancedcontentfilter-content-wrapper {
3         min-height: calc(100vh - 150px);
4     padding: 15px;
5     padding-bottom: 20px;
6     margin-bottom: 20px;
7     border: none;
8     /*background-color: #fff;*/
9     background-color: rgba(255,255,255,0.95);
10     border-radius: 4px;
11     position: relative;
12     /*overflow: hidden;*/
13     color: #555;
14     box-shadow: 0 0 3px #dadada;
15     -webkit-box-shadow: 0 0 3px #dadada;
16     -moz-box-shadow: 0 0 3px #dadada;
17 }
18 </style>
19
20 <a href="advancedcontentfilter">🔙 Back to Advanced Content Filter Settings</a>
21
22 # Advanced Content Filter Help
23
24 The advanced Content Filter uses Symfony's Expression Language.
25 This help page includes a summary of [the Symfony's Expression Language documentation page.](https://symfony.com/doc/current/components/expression_language/syntax.html)
26
27 ## Basics
28
29 The advanced content filter matches each post that is about to be displayed against each enabled rule you set.
30
31 A rule is a boolean expression that should return either `true` or `false` depending on post variables.
32
33 If the expression using a post variables returns `true`, the post will be collapsed and the matching rule name will be displayed above the collapsed content.
34
35 A post will be collapsed if at least one rule matches, but all matching rule names will be displayed above the collapsed content.
36
37 ## Examples
38
39 1. To block specific domains  `body matches "/\\.example\\.com/"`
40 2. To block everything that contains the words `body matches "/Guten Morgen/"
41 3. To block every occurence of the word facebook with a space in front and after the word `body matches "//s facebook/s /"`
42 4. To colapse every post that contains more than 1 image `body matches "/(?:(?:(?:\\[url(?:=.*)?\\])?\\[img(?:=.*)?\\].*\\[\\/img\\]\\s*(?:\\[\\/url\\])?)\\s*){2}/"`
43
44
45 ## Expression Syntax
46
47 ### Supported Literals
48
49 - **strings** - single and double quotes (e.g. `'hello'`).
50 - **numbers** - e.g. `103`.
51 - **arrays** - using JSON-like notation (e.g. `[1, 2]`).
52 - **hashes** - using JSON-like notation (e.g. `{ foo: 'bar' }`).
53 - **booleans** - `true` and `false`.
54 - **null** - `null`.
55
56 A backslash (``\``) must be escaped by 2 backslashes (``\\``) in a string and 4 backslashes (``\\\\``) in a regex::
57
58 `"a\\b" matches "/^a\\\\b$/"`
59
60 Control characters (e.g. ``\n``) in expressions are replaced with whitespace. To avoid this, escape the sequence with a single backslash (e.g.  ``\\n``).
61
62 ### Supported Operators
63
64 The component comes with a lot of operators:
65
66 #### Arithmetic Operators
67
68 * ``+`` (addition)
69 * ``-`` (subtraction)
70 * ``*`` (multiplication)
71 * ``/`` (division)
72 * ``%`` (modulus)
73 * ``**`` (pow)
74
75 #### Bitwise Operators
76
77 * ``&`` (and)
78 * ``|`` (or)
79 * ``^`` (xor)
80
81 #### Comparison Operators
82
83 * ``==`` (equal)
84 * ``===`` (identical)
85 * ``!=`` (not equal)
86 * ``!==`` (not identical)
87 * ``<`` (less than)
88 * ``>`` (greater than)
89 * ``<=`` (less than or equal to)
90 * ``>=`` (greater than or equal to)
91 * ``matches`` (regex match)
92
93 To test if a string does *not* match a regex, use the logical ``not`` operator in combination with the ``matches`` operator:
94
95 `not ("foo" matches "/bar/")`
96
97 You must use parenthesis because the unary operator ``not`` has precedence over the binary operator ``matches``.
98
99 #### Logical Operators
100
101 * ``not`` or ``!``
102 * ``and`` or ``&&``
103 * ``or`` or ``||``
104
105 #### String Operators
106
107 * ``~`` (concatenation)
108
109 For example: ``firstName ~ " " ~ lastName``
110
111 #### Array Operators
112
113 * ``in`` (contain)
114 * ``not in`` (does not contain)
115
116 For example: ``user.group in ["human_resources", "marketing"]``
117
118 #### Numeric Operators
119
120 * ``..`` (range)
121
122 For example: ``user.age in 18..45``
123
124 #### Ternary Operators
125
126 * ``foo ? 'yes' : 'no'``
127 * ``foo ?: 'no'`` (equal to ``foo ? foo : 'no'``)
128 * ``foo ? 'yes'`` (equal to ``foo ? 'yes' : ''``)
129
130 ### Supported variables
131
132 Here are a sample of the available variables you can use in your expressions.
133 You can also retrieve the variables of a specific post by pasting its URL below the rule list.
134
135 <table class="table-bordered table-condensed table-striped">
136 <thead>
137         <tr>
138                 <th>Variable</th>
139                 <th>Type</th>
140                 <th>Sample Value</th>
141         </tr>
142 </thead>
143 <tbody>
144         <tr>
145                 <th>author_id</th>
146                 <td>number</td>
147                 <td>6</td>
148         </tr>
149         <tr>
150                 <th>author_link</th>
151                 <td>string</td>
152                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
153         </tr>
154         <tr>
155                 <th>author_name</th>
156                 <td>string</td>
157                 <td>Hypolite Petovan</td>
158         </tr>
159         <tr>
160                 <th>author_avatar</th>
161                 <td>string</td>
162                 <td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
163         </tr>
164         <tr>
165                 <th>owner_id</th>
166                 <td>number</td>
167                 <td>6</td>
168         </tr>
169         <tr>
170                 <th>owner_link</th>
171                 <td>string</td>
172                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
173         </tr>
174         <tr>
175                 <th>owner_name</th>
176                 <td>string</td>
177                 <td>Hypolite Petovan</td>
178         </tr>
179         <tr>
180                 <th>owner_avatar</th>
181                 <td>string</td>
182                 <td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
183         </tr>
184         <tr>
185                 <th>contact_id</th>
186                 <td>number</td>
187                 <td>1</td>
188         </tr>
189         <tr>
190                 <th>uid</th>
191                 <td>number</td>
192                 <td>1</td>
193         </tr>
194         <tr>
195                 <th>id</th>
196                 <td>number</td>
197                 <td>791875</td>
198         </tr>
199         <tr>
200                 <th>parent</th>
201                 <td>number</td>
202                 <td>791875</td>
203         </tr>
204         <tr>
205                 <th>uri</th>
206                 <td>string</td>
207                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
208         </tr>
209         <tr>
210                 <th>thr_parent</th>
211                 <td>string</td>
212                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
213         </tr>
214         <tr>
215                 <th>parent_uri</th>
216                 <td>string</td>
217                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
218         </tr>
219         <tr>
220                 <th>content_warning</th>
221                 <td>string</td>
222                 <td></td>
223         </tr>
224         <tr>
225                 <th>commented</th>
226                 <td>date</td>
227                 <td>2018-03-27 21:10:18</td>
228         </tr>
229         <tr>
230                 <th>created</th>
231                 <td>date</td>
232                 <td>2018-03-27 21:10:18</td>
233         </tr>
234         <tr>
235                 <th>edited</th>
236                 <td>date</td>
237                 <td>2018-03-27 21:10:18</td>
238         </tr>
239         <tr>
240                 <th>received</th>
241                 <td>date</td>
242                 <td>2018-03-27 21:10:18</td>
243         </tr>
244         <tr>
245                 <th>verb</th>
246                 <td>string</td>
247                 <td>http://activitystrea.ms/schema/1.0/post</td>
248         </tr>
249         <tr>
250                 <th>object_type</th>
251                 <td>string</td>
252                 <td>http://activitystrea.ms/schema/1.0/bookmark</td>
253         </tr>
254         <tr>
255                 <th>postopts</th>
256                 <td>string</td>
257                 <td>twitter&lang=pidgin;0.24032407407407:english;0.225:french;0.18055555555556</td>
258         </tr>
259         <tr>
260                 <th>plink</th>
261                 <td>string</td>
262                 <td>https://friendica.mrpetovan.com/display/735a2029995abab33a5c006052376776</td>
263         </tr>
264         <tr>
265                 <th>guid</th>
266                 <td>string</td>
267                 <td>735a2029995abab33a5c006052376776</td>
268         </tr>
269         <tr>
270                 <th>wall</th>
271                 <td>boolean</td>
272                 <td>1</td>
273         </tr>
274         <tr>
275                 <th>private</th>
276                 <td>boolean</td>
277                 <td>0</td>
278         </tr>
279         <tr>
280                 <th>starred</th>
281                 <td>boolean</td>
282                 <td>0</td>
283         </tr>
284         <tr>
285                 <th>title</th>
286                 <td>string</td>
287                 <td></td>
288         </tr>
289         <tr>
290                 <th>body</th>
291                 <td>string</td>
292                 <td>Over-compensation #[url=https://friendica.mrpetovan.com/search?tag=Street]Street[/url] #[url=https://friendica.mrpetovan.com/search?tag=Night]Night[/url] #[url=https://friendica.mrpetovan.com/search?tag=CarLights]CarLights[/url] #[url=https://friendica.mrpetovan.com/search?tag=Jeep]Jeep[/url] #[url=https://friendica.mrpetovan.com/search?tag=NoPeople]NoPeople[/url] #[url=https://friendica.mrpetovan.com/search?tag=Close]Close[/url]-up
293         [attachment type='link' url='https://www.eyeem.com/p/120800309' title='Over-compensation Street Night Car Lights Jeep No | EyeEm' image='https://cdn.eyeem.com/thumb/b2f019738cbeef06e2f8c9517c6286a8adcd3a00-1522184820641/640/480']Photo by @[url=https://twitter.com/MrPetovan]MrPetovan[/url][/attachment]</td>
294         </tr>
295         <tr>
296                 <th>file</th>
297                 <td>string</td>
298                 <td></td>
299         </tr>
300         <tr>
301                 <th>event_id</th>
302                 <td>number</td>
303                 <td>null
304         <tr>
305                 <th>location</th>
306                 <td>string</td>
307                 <td></td>
308         </tr>
309         <tr>
310                 <th>coord</th>
311                 <td>string</td>
312                 <td></td>
313         </tr>
314         <tr>
315                 <th>app</th>
316                 <td>string</td>
317                 <td>EyeEm</td>
318         </tr>
319         <tr>
320                 <th>attach</th>
321                 <td>string</td>
322                 <td></td>
323         </tr>
324         <tr>
325                 <th>rendered_hash</th>
326                 <td>string</td>
327                 <td>b70abdea8b362dc5dcf63e1b2836ad89</td>
328         </tr>
329         <tr>
330                 <th>rendered_html</th>
331                 <td>string</td>
332                 <td>
333                         Over-compensation #&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street"&gt;Street&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night"&gt;Night&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights"&gt;CarLights&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep"&gt;Jeep&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople"&gt;NoPeople&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close"&gt;Close&lt;/a&gt;-up &lt;div class="type-link"&gt;&lt;a href="https://www.eyeem.com/p/120800309" target="_blank"&gt;&lt;img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"&gt;&lt;/a&gt;&lt;br&gt;&lt;h4&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;Over-compensation Street Night Car Lights Jeep No | EyeEm&lt;/a&gt;&lt;/h4&gt;&lt;blockquote&gt;Photo by @&lt;a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan"&gt;MrPetovan&lt;/a&gt;&lt;/blockquote&gt;&lt;sup&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;www.eyeem.com&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;
334                 </td>
335         </tr>
336         <tr>
337                 <th>object</th>
338                 <td>string</td>
339                 <td>{"created_at":"Tue Mar 27 21:07:02 +0000 2018","id":978740198937907200,"id_str":"978740198937907200","full_text":"Over-compensation #Street #Night #CarLights #Jeep #NoPeople #Close-up https:\/\/t.co\/7w4ua13QA7","truncated":false,"display_text_range":[0,93],"entities":{"hashtags":[{"text":"Street","indices":[18,25]},{"text":"Night","indices":[26,32]},{"text":"CarLights","indices":[33,43]},{"text":"Jeep","indices":[44,49]},{"text":"NoPeople","indices":[50,59]},{"text":"Close","indices":[60,66]}],"symbols":[],"user_mentions":[],"urls":[{"url":"https:\/\/t.co\/7w4ua13QA7","expanded_url":"http:\/\/EyeEm.com\/p\/120800309","display_url":"EyeEm.com\/p\/120800309","indices":[70,93]}]},"source":"&lt;a href=\"http:\/\/www.eyeem.com\" rel=\"nofollow\"&gt;EyeEm&lt;\/a&gt;","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":403748896,"id_str":"403748896","name":"\ud83d\udc30yp\ud83e\udd5ali\u271d\ufe0fe Pet\ud83e\udd5avan","screen_name":"MrPetovan","location":"NYC","description":"White male form of milquetoast. Avatar by @DearMsDear inspired by @TSG_LAB.\n\nFriendica\/Diaspora\/Mastodon: hypolite@friendica.mrpetovan.com","url":"https:\/\/t.co\/PcARi5OhQO","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/PcARi5OhQO","expanded_url":"https:\/\/mrpetovan.com","display_url":"mrpetovan.com","indices":[0,23]}]},"description":{"urls":[]}},"protected":false,"followers_count":182,"friends_count":146,"listed_count":15,"created_at":"Wed Nov 02 23:13:14 +0000 2011","favourites_count":45826,"utc_offset":-14400,"time_zone":"Eastern Time (US &amp; Canada)","geo_enabled":false,"verified":false,"statuses_count":15554,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/403748896\/1464321684","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"000000","profile_use_background_image":true,"has_extended_profile":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false,"translator_type":"none"},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}</td>
340         </tr>
341         <tr>
342                 <th>allow_cid</th>
343                 <td>string</td>
344                 <td></td>
345         </tr>
346         <tr>
347                 <th>allow_gid</th>
348                 <td>string</td>
349                 <td></td>
350         </tr>
351         <tr>
352                 <th>deny_cid</th>
353                 <td>string</td>
354                 <td></td>
355         </tr>
356         <tr>
357                 <th>deny_gid</th>
358                 <td>string</td>
359                 <td></td>
360         </tr>
361         <tr>
362                 <th>item_id</th>
363                 <td>number</td>
364                 <td>791875</td>
365         </tr>
366         <tr>
367                 <th>item_network</th>
368                 <td>string</td>
369                 <td>dfrn</td>
370         </tr>
371         <tr>
372                 <th>author_thumb</th>
373                 <td>string</td>
374                 <td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
375         </tr>
376         <tr>
377                 <th>owner_thumb</th>
378                 <td>string</td>
379                 <td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
380         </tr>
381         <tr>
382                 <th>network</th>
383                 <td>string</td>
384                 <td></td>
385         </tr>
386         <tr>
387                 <th>url</th>
388                 <td>string</td>
389                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
390         </tr>
391         <tr>
392                 <th>name</th>
393                 <td>string</td>
394                 <td>Hypolite Petovan</td>
395         </tr>
396         <tr>
397                 <th>writable</th>
398                 <td>boolean</td>
399                 <td>0</td>
400         </tr>
401         <tr>
402                 <th>self</th>
403                 <td>boolean</td>
404                 <td>1</td>
405         </tr>
406         <tr>
407                 <th>cid</th>
408                 <td>number</td>
409                 <td>1</td>
410         </tr>
411         <tr>
412                 <th>alias</th>
413                 <td>string</td>
414                 <td></td>
415         </tr>
416         <tr>
417                 <th>event_created</th>
418                 <td>date</td>
419                 <td>null</td>
420         </tr>
421         <tr>
422                 <th>event_edited</th>
423                 <td>date</td>
424                 <td>null</td>
425         </tr>
426         <tr>
427                 <th>event_start</th>
428                 <td>date</td>
429                 <td>null</td>
430         </tr>
431         <tr>
432                 <th>event_finish</th>
433                 <td>date</td>
434                 <td>null</td>
435         </tr>
436         <tr>
437                 <th>event_summary</th>
438                 <td>string</td>
439                 <td>null</td>
440         </tr>
441         <tr>
442                 <th>event_desc</th>
443                 <td>string</td>
444                 <td>null</td>
445         </tr>
446         <tr>
447                 <th>event_location</th>
448                 <td>string</td>
449                 <td>null</td>
450         </tr>
451         <tr>
452                 <th>event_type</th>
453                 <td>string</td>
454                 <td>null</td>
455         </tr>
456         <tr>
457                 <th>event_nofinish</th>
458                 <td>string</td>
459                 <td>null</td>
460         </tr>
461         <tr>
462                 <th>event_adjust</th>
463                 <td>boolean</td>
464                 <td>null</td>
465         </tr>
466         <tr>
467                 <th>event_ignore</th>
468                 <td>boolean</td>
469                 <td>null</td>
470         </tr>
471         <tr>
472                 <th>pagedrop</th>
473                 <td>string</td>
474                 <td>true</td>
475         </tr>
476         <tr>
477                 <th>tags</th>
478                 <td>list</td>
479                 <td>
480                         <ol start="0">
481                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank"&gt;street&lt;/a&gt;</li>
482                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank"&gt;night&lt;/a&gt;</li>
483                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank"&gt;carlights&lt;/a&gt;</li>
484                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank"&gt;jeep&lt;/a&gt;</li>
485                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank"&gt;nopeople&lt;/a&gt;</li>
486                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank"&gt;close&lt;/a&gt;</li>
487                                 <li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank"&gt;mrpetovan&lt;/a&gt;</li>
488                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank"&gt;close-up&lt;/a&gt;</li>
489                         </ol>
490                 </td>
491         </tr>
492         <tr>
493                 <th>hashtags</th>
494                 <td>list</td>
495                 <td>
496                         <ol start="0">
497                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank"&gt;street&lt;/a&gt;</li>
498                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank"&gt;night&lt;/a&gt;</li>
499                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank"&gt;carlights&lt;/a&gt;</li>
500                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank"&gt;jeep&lt;/a&gt;</li>
501                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank"&gt;nopeople&lt;/a&gt;</li>
502                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank"&gt;close&lt;/a&gt;</li>
503                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank"&gt;close-up&lt;/a&gt;</li>
504                         </ol>
505                 </td>
506         </tr>
507         <tr>
508                 <th>mentions</th>
509                 <td>string</td>
510                 <td>
511                         <ol start="0">
512                                 <li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank"&gt;mrpetovan&lt;/a&gt;</li>
513                         </ol>
514                 </td>
515         </tr>
516 </tbody>
517 </table>