It's always tricky when trying to display "things that aren't" because Views rely on things that are, even when querying out empty fields.
I haven't tried to recreate your example, but here are some comments that might help start you up:
Do it for one flag first
Once you have a working example related to only one flag it's easy to repeat the steps adding conditions for other flags. This is difficult enough to figure out for one flag alone.
List NOT flagged
To display content that isn't flagged, you must untick the option Include only flagged content in the Flags: flagname
Relationship, and then use the Filter Flags: Flagged
set to Not flagged
:
How to list content that is not flagged.
Users who aren't here please identify yourselves!
It's impossible to list users who "aren't". You can only list all of them and then filter out the ones who "are".
If you start with Content Views, you can list content that hasn't been flagged, and you can show which users flagged it, but you can't list which users haven't flagged it, because there is no relationship between nodes and users who haven't flagged it!
A better option might be to go with User View. You can add Relationhip to the relevant flag, don't limit only to users who flagged, and adjust to Any user. Add Contextual filter Flags: Entity ID
and set the default value to Content ID from URL
, but don't forget to Exlude under More. Add a Filter Flags:Flagged
and set to Not Flagged
, but this way you only get users that haven't done any flags on any nodes.
You need some additional module to combine and help with showing things that aren't. With Content Views you can't list usernames of people who haven't flagged, while with User views you can only show people who haven't used the flag at all, you can't show a user who hasn't flagged a node if that user flagged another node with that same flag.
This module has a cryptic explanation on its project page, but could be useful in your case to pass one views results to the main views display to combine the results so you get something meaningful.
Views Reference filter module can be used to filter a View with the results of another (Entity Reference) Views Display. It can pass arguments to the embedded view:
You can probably create one View listing all Users who are allowed to flag Content, create another view that shows the users that have flagged it, then filter the first view with the negative second one. Just remember that the Field type of the Views Reference Filter must match the type of ER Views Display type (uid-user).
Introduce Flags Relationship
You need to add a Relationship that contains information about the node flag status. I doubt you can do that with User's flaggings
without another Relationship before it that connects to the user who flagged, which is a roundabout way.
Just use the Flags: flagname
, don't limit to Include only flagged content, and do set it to Any user
.
Later you can add more Relationships to display users names etc, first you need to focus on making the filtering work.