Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Archive /

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo

how to override Group


Go to End


2 Posts   2218 Views

Avatar
blaater

Community Member, 22 Posts

27 May 2008 at 4:54am

Edited: 27/05/2008 4:57am

Hello,

Currently I'm customising the security-tab with some extra fields. I've overridden the Member-class and it works fine. Now I try to do the same thing with Group. The code i've used in _config.php is:

 
Object::useCustomClass('Group', 'NetwerkHolder');

Also I've created the NetwerkHolder.php

class NetwerkHolder extends Group {
	
	static $db = array('ThemaNetwerk' => 'Varchar');
   
	static $allow_children = array('Netwerk');
	
    function getCMSFields() {
    	
		$fields = parent::getCMSFields();
		
		$fields->insertBefore(new TextField('ThemaNetwerk'), "ThemaNetwerk");
			    	  
		return $fields;
	}
}

When I run mysite.com/db/build/?flush=1 I see that the table is created, but when I log into the cms I get a db error:

FATAL ERROR: DATABASE ERROR: Couldn't run query: SELECT `Group`.*, `NetwerkHolder`.*, `Group`.ID, if(`Group`.ClassName,`Group`.ClassName,'Group') AS RecordClassName FROM `Group` LEFT JOIN `NetwerkHolder` ON `NetwerkHolder`.ID = `Group`.ID WHERE (`ID` IN (1)) ORDER BY ID | Column 'ID' in where clause is ambiguous
At line 397 in /serverpath/public_html/sapphire/core/model/Database.php

Does anybody know what is the problem?

Thanks in advance!

Avatar
Ingo

Forum Moderator, 801 Posts

29 May 2008 at 8:31pm

subclassing group is not fully supported by the sapphre and cms modules.
for the programmatic errors (like the one you mentioned above),
you should look through the following files:
Security.php
SecurityAdmin.php
MemberTableField.php
Member.php
Group.php
Permission.php

A good start is to make sure that manually constructed SQL-queries still work, and that Object::getCustomClass() is consistently used instead of direct usage of "Group".

Theres also a usability-related set of problems which is not so easy to solve - SecurityAdmin should ask you which "type" of group you want to create, and not assume that all custom classes are equal. in your use case of customizing the cmsfields, this might only apply to a specific group.