Specific attributes set for certain groups
Permalink 1 user found helpful
Wrapping my head around the csm still, getting there.
Is it possible to add specific attributes only to certain user groups? Looking at previous posts on the topic there seems to be a worrying lack of solutions :s
For example, if a user signs up under group "coach" they have certain fields to fill out.
If I then create an account for an administrator or copywriter, they obviously wouldn't need the same fields to fill out.
Attached a picture to try and be clearer.
Appreciate the help
Tim
Is it possible to add specific attributes only to certain user groups? Looking at previous posts on the topic there seems to be a worrying lack of solutions :s
For example, if a user signs up under group "coach" they have certain fields to fill out.
If I then create an account for an administrator or copywriter, they obviously wouldn't need the same fields to fill out.
Attached a picture to try and be clearer.
Appreciate the help
Tim
I had the same problem for the /profile/edit page and came with this solution. Maybe it is of help?
Love this solution.
1 question:
How can you get attributes which AREN'T in an attribute set?
1 question:
How can you get attributes which AREN'T in an attribute set?
AttributeKey::getList('Collection');
AttributeKey::getList('User');
AttributeKey::getList('File');
AttributeKey::getList('User');
AttributeKey::getList('File');
I know this is an older thread, but the solution provides did not cover all the scenarios and would not work for me.
So, this method uses Attribute Sets. If you create an attribute set and name it the same as a user group name, this query will return all the akIDs for a given UserID
Placing this code in a custom version of the edit_profile.php single page and the system will display all user attributes in
1. All attributes in the "Member Info" attribute set
2. All user attributes not in an attribute set
3. All attributes in the attribute set named the same as any user group assigned to the user
Once the array of valid akIDs is created, the code which normally writes out all user fields is given a condition resticting it to only show attributes which are in the array of valid akIDs:
-> if (in_array($ak->getAttributeKeyID(), $akIDs)) {
I know this could be done with real Concrete5 class calls, but i needed something that works and the 5.7 documentation does not cover these features yet.
So, this method uses Attribute Sets. If you create an attribute set and name it the same as a user group name, this query will return all the akIDs for a given UserID
if(is_array($attribs) && count($attribs)) { $af = Loader::helper('form/attribute'); $af->setAttributeObject($profile); //Load valid akID's for this user (based on user group) $sql="SELECT AttributeKeys.akID " . "FROM AttributeKeyCategories " . "INNER JOIN ((Groups LEFT JOIN UserGroups ON Groups.gID = UserGroups.gID) " . "RIGHT JOIN (AttributeSets RIGHT JOIN (AttributeKeys " . "LEFT JOIN AttributeSetKeys ON AttributeKeys.akID = AttributeSetKeys.akID) " . "ON AttributeSets.asID = AttributeSetKeys.asID) " . "ON Groups.gName = AttributeSets.asName) " . "ON AttributeKeyCategories.akCategoryID = AttributeKeys.akCategoryID " . "WHERE ((AttributeSets.asName='Member Info') AND (AttributeKeyCategories.akCategoryHandle='user')) " . "OR ((AttributeSets.asName Is Null) AND (AttributeKeyCategories.akCategoryHandle='user')) " . "OR ((UserGroups.uID=?) AND (AttributeKeyCategories.akCategoryHandle='user'))";
Viewing 15 lines of 28 lines. View entire code block.
Placing this code in a custom version of the edit_profile.php single page and the system will display all user attributes in
1. All attributes in the "Member Info" attribute set
2. All user attributes not in an attribute set
3. All attributes in the attribute set named the same as any user group assigned to the user
Once the array of valid akIDs is created, the code which normally writes out all user fields is given a condition resticting it to only show attributes which are in the array of valid akIDs:
-> if (in_array($ak->getAttributeKeyID(), $akIDs)) {
I know this could be done with real Concrete5 class calls, but i needed something that works and the 5.7 documentation does not cover these features yet.