friendica-addons/advancedcontentfilter/doc/advancedcontentfilter.md

16 KiB

🔙 Back to Advanced Content Filter Settings

Advanced Content Filter Help

The advanced Content Filter uses Symfony's Expression Language. This help page includes a summary of the Symfony's Expression Language documentation page.

Basics

The advanced content filter matches each post that is about to be displayed against each enabled rule you set.

A rule is a boolean expression that should return either true or false depending on post variables.

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.

A post will be collapsed if at least one rule matches, but all matching rule names will be displayed above the collapsed content.

Examples

  1. Collapse posts with specific domains body matches "/\\.example\\.com/"
  2. Collapse posts that contains the words body matches "/Guten Morgen/"
  3. Collapse posts with the word facebook that have a space in front and after the word body matches "//s facebook/s /"
  4. Collapse posts that contains more than 1 image body matches "/(?:(?:(?:\\[url(?:=.*)?\\])?\\[img(?:=.*)?\\].*\\[\\/img\\]\\s*(?:\\[\\/url\\])?)\\s*){2}/"

Expression Syntax

Supported Literals

  • strings - single and double quotes (e.g. 'hello').
  • numbers - e.g. 103.
  • arrays - using JSON-like notation (e.g. [1, 2]).
  • hashes - using JSON-like notation (e.g. { foo: 'bar' }).
  • booleans - true and false.
  • null - null.

A backslash (\) must be escaped by 2 backslashes (\\) in a string and 4 backslashes (\\\\) in a regex::

"a\\b" matches "/^a\\\\b$/"

Control characters (e.g. \n) in expressions are replaced with whitespace. To avoid this, escape the sequence with a single backslash (e.g. \\n).

Supported Operators

The component comes with a lot of operators:

Arithmetic Operators

  • + (addition)
  • - (subtraction)
  • * (multiplication)
  • / (division)
  • % (modulus)
  • ** (pow)

Bitwise Operators

  • & (and)
  • | (or)
  • ^ (xor)

Comparison Operators

  • == (equal)
  • === (identical)
  • != (not equal)
  • !== (not identical)
  • < (less than)
  • > (greater than)
  • <= (less than or equal to)
  • >= (greater than or equal to)
  • matches (regex match)

To test if a string does not match a regex, use the logical not operator in combination with the matches operator:

not ("foo" matches "/bar/")

You must use parenthesis because the unary operator not has precedence over the binary operator matches.

Logical Operators

  • not or !
  • and or &&
  • or or ||

String Operators

  • ~ (concatenation)

For example: firstName ~ " " ~ lastName

Array Operators

  • in (contain)
  • not in (does not contain)

For example: user.group in ["human_resources", "marketing"]

Numeric Operators

  • .. (range)

For example: user.age in 18..45

Ternary Operators

  • foo ? 'yes' : 'no'
  • foo ?: 'no' (equal to foo ? foo : 'no')
  • foo ? 'yes' (equal to foo ? 'yes' : '')

Supported variables

Here are a sample of the available variables you can use in your expressions. You can also retrieve the variables of a specific post by pasting its URL below the rule list.

Variable Type Sample Value
author_id number 6
author_link string https://friendica.mrpetovan.com/profile/hypolite
author_name string Hypolite Petovan
author_avatar string https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png
owner_id number 6
owner_link string https://friendica.mrpetovan.com/profile/hypolite
owner_name string Hypolite Petovan
owner_avatar string https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png
contact_id number 1
uid number 1
id number 791875
parent number 791875
uri string urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200
thr_parent string urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200
parent_uri string urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200
content_warning string
commented date 2018-03-27 21:10:18
created date 2018-03-27 21:10:18
edited date 2018-03-27 21:10:18
received date 2018-03-27 21:10:18
verb string http://activitystrea.ms/schema/1.0/post
object_type string http://activitystrea.ms/schema/1.0/bookmark
postopts string twitter&lang=pidgin;0.24032407407407:english;0.225:french;0.18055555555556
plink string https://friendica.mrpetovan.com/display/735a2029995abab33a5c006052376776
guid string 735a2029995abab33a5c006052376776
wall boolean 1
private boolean 0
starred boolean 0
title string
body string 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 [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]
file string
event_id number null
location string
coord string
app string EyeEm
attach string
rendered_hash string b70abdea8b362dc5dcf63e1b2836ad89
rendered_html string Over-compensation #<a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street">Street</a> #<a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night">Night</a> #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights">CarLights</a> #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep">Jeep</a> #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople">NoPeople</a> #<a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close">Close</a>-up <div class="type-link"><a href="https://www.eyeem.com/p/120800309" target="_blank"><img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"></a><br><h4><a href="https://www.eyeem.com/p/120800309">Over-compensation Street Night Car Lights Jeep No | EyeEm</a></h4><blockquote>Photo by @<a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan">MrPetovan</a></blockquote><sup><a href="https://www.eyeem.com/p/120800309">www.eyeem.com</a></sup></div>
object string {"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":"<a href=\"http:\/\/www.eyeem.com\" rel=\"nofollow\">EyeEm<\/a>","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 & 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"}
allow_cid string
allow_gid string
deny_cid string
deny_gid string
item_id number 791875
item_network string dfrn
author_thumb string https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604
owner_thumb string https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604
network string
url string https://friendica.mrpetovan.com/profile/hypolite
name string Hypolite Petovan
writable boolean 0
self boolean 1
cid number 1
alias string
event_created date null
event_edited date null
event_start date null
event_finish date null
event_summary string null
event_desc string null
event_location string null
event_type string null
event_nofinish string null
event_adjust boolean null
event_ignore boolean null
pagedrop string true
tags list
  1. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank">street</a>
  2. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank">night</a>
  3. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank">carlights</a>
  4. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank">jeep</a>
  5. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank">nopeople</a>
  6. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank">close</a>
  7. @<a href="https://twitter.com/MrPetovan" target="_blank">mrpetovan</a>
  8. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank">close-up</a>
hashtags list
  1. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank">street</a>
  2. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank">night</a>
  3. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank">carlights</a>
  4. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank">jeep</a>
  5. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank">nopeople</a>
  6. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank">close</a>
  7. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank">close-up</a>
mentions string
  1. @<a href="https://twitter.com/MrPetovan" target="_blank">mrpetovan</a>