* fix(Mentions): allow renderer to be used without context
* test(Mentions): implement test for rendering post without context
* Update UnparsePostMentions.php
* Update PostMentionsTest.php
---------
Co-authored-by: IanM <16573496+imorland@users.noreply.github.com>
* feat: add tag search
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* feat(mentions): tag mentions backend
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* feat: tag mention design
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* refactor: revamp mentions autocomplete
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: unauthorized mention of hidden groups
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* feat(mentions,tags): use hash format for tag mentions
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* refactor: frontend mention format API with mentionable models
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* feat: implement tag search on the frontend
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: tag color contrast
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: tag suggestions styling
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* test: works with disabled tags extension
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chore: move `MentionFormats` to `formats`
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: mentions preview bad styling
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* docs: further migration location clarification
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* Apply fixes from StyleCI
* fix: bad test namespace
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: phpstan
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: conditionally add tag related extenders
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* Apply fixes from StyleCI
* feat(phpstan): evaluate conditional extenders
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* feat: use mithril routing for tag mentions
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
---------
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
* perf(core,mentions): limit `mentionedBy` post relation results
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* Apply fixes from StyleCI
* chore: use a static property to allow customization
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chore: use a static property to allow customization
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chore: include count in show post endpoint
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chore: consistent locale key format
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chore: forgot to delete `FilterVisiblePosts`
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* test: `mentionedByCount` must not include invisible posts to actor
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: visibility scoping on `mentionedByCount`
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: `loadAggregates` conflicts with visibility scopers
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* Apply fixes from StyleCI
* chore: phpstan
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
---------
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
* chore: improve group mentions color handling
* Avoid storing the `GroupMention--dark` and light classes on the database.
* Avoid recreating YIQ logic on the backend.
* Improve text color flexibility through CSS variables.
* Apply fixes from StyleCI
* chore: tweak tests
* chre: unused import
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: check post visibility when mentioning
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* fix: `mentionsPosts` include is not used and leaks private posts
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* chre: use `PostRepository`
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* wip: group mentions
* Apply fixes from StyleCI
* chore: format
* group mention autocomplete
* chore: format
* remove console.log
* implement notifications
* prevent guest and member groups from being mentioned
* Update extensions/mentions/less/forum.less
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* rename displayname to groupname
* Update extensions/mentions/src/Formatter/FormatGroupMentions.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* remove redundant unparse
* simplify migrations
* add group deleted translation
* Apply fixes from StyleCI
* handle everything falsy
* Include icon in group mention preview
* remove box-shadow from autocomplete group results
* Add color to preview
* chore: format
* Remove box shadow from group autocomplete results
* Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* remove unneeded migration
* prevent former group icon from beingdisplayed
* add group searcher with permissions
* Apply fixes from StyleCI
* Search groups based on canSearchGroups permission
* Don't include virtual groups in results
* Add search groups translation
* Revert "remove unneeded migration"
This reverts commit 9347665baa.
* Revert "Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php"
This reverts commit 8406d51df2.
* add searchGroups permission to tests
* Apply fixes from StyleCI
* Add default searchGroups permission
* Apply fixes from StyleCI
* Update extensions/mentions/js/src/forum/addComposerAutocomplete.js
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* remove unneeded migration, correct table table
* correct table name in down migration
* Remove group searcher
* Apply fixes from StyleCI
* Remove group searching from composer autocomplete
* Add mentionGroups permission
* Apply fixes from StyleCI
* prevent post preview from rendering a group mention when user does not have permission
* remove test changes
* wip: expose ServerRequestInterface to textformatter parse()
* Apply fixes from StyleCI
* Set post content properly
* php 7.x compatibility
* begin adding groupmention tests
* Apply fixes from StyleCI
* test virtual groups don't mention
* Apply fixes from StyleCI
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update extensions/mentions/extend.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update extensions/mentions/extend.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* requested changes
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/tests/integration/api/groups/ListTest.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/src/Search/SearchServiceProvider.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* Update framework/core/src/Extend/Formatter.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* remove default permission migration
* try using datetime column instead of timestamp
* Apply fixes from StyleCI
* chore: remove commented code
* add tests
* Apply fixes from StyleCI
* Pass actor to parser instead of ServerRequest
* Allow for to be null
* Update framework/core/src/Extend/Formatter.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* pass actor instead of request
* Apply fixes from StyleCI
* actor instead of request
* remove serverrequest
* Apply fixes from StyleCI
* remove dupe actor
* Update extensions/mentions/src/Formatter/CheckPermissions.php
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* fix type in comment
* group does not have the relation, post does
* test: invalid, deleted, fresh data mentions
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
* Apply fixes from StyleCI
* fix: group mentions don't work when editing posts
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
* test: editing a post with deleted author and mentions
* fix(mentions): accessing `id` of null `user` relation
Signed-off-by: Sami Mazouz <ilyasmazouz@gmail.com>
* test: list posts with mentions filter and `createdAt` sort
* fix: multiple `createdAt` columns in query causes conflicts
* chore: link to pull request for context
Signed-off-by: Sami Mazouz <ilyasmazouz@gmail.com>
* Convert user mentions to new `@"Display Name"#ID` format
* Handle deleted user's mentions
* Convert post mentions to `@"Display Name"#pID` format
* Handle deleted user's post mentions and deleted posts mentions
* Clean display name of `"#{letters}{numbers}` (replace with underscore _)
* Adapt integration tests to new mention formats
* Use a deleted attribute for user mentions
* Introduce cleanDisplayName util
* Detect new format with autocomplete
* Slug needed on rendering only
* Invalidate user mention tag when ID is invalid
This used to be implicitly done, when there was a username attribute configured, formatter would check that all attributes are available and if not invalidate.
since we now only have `displayname` and `id` attributes which are both available from the regex matching, formatter doesn't implicitly invalidate anymore and therefore validates ANY matches. So we explicitly invalidate the tag when the ID does not match a user.
* Allow username mention format with a setting
* Add tests for turning setting on/off
* Move setting check to tag filter
Because the configurator caches, changing the setting only takes effect after the cache is cleared.
* fix: showing autocomplete at the right moment
* Add dockblocks to explain unparsing process