BUGFIX: removing hardcoded reference to ModelAdmin_RecordController, also added getters for model controllers. (from r97231)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@102714 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2010-04-13 20:36:55 +00:00
parent abe2496b20
commit 52d067ead4

View File

@ -166,6 +166,43 @@ abstract class ModelAdmin extends LeftAndMain {
static function get_page_length(){ static function get_page_length(){
return self::$page_length; return self::$page_length;
} }
/**
* Return the class name of the collection controller
*
* @param string $model model name to get the controller for
* @return string the collection controller class
*/
function getCollectionControllerClass($model) {
$models = $this->getManagedModels();
if(isset($models[$model]['collection_controller'])) {
$class = $models[$model]['collection_controller'];
} else {
$class = $this->stat('collection_controller_class');
}
return $class;
}
/**
* Return the class name of the record controller
*
* @param string $model model name to get the controller for
* @return string the record controller class
*/
function getRecordControllerClass($model) {
$models = $this->getManagedModels();
if(isset($models[$model]['record_controller'])) {
$class = $models[$model]['record_controller'];
} else {
$class = $this->stat('record_controller_class');
}
return $class;
}
/** /**
* Add mappings for generic form constructors to automatically delegate to a scaffolded form object. * Add mappings for generic form constructors to automatically delegate to a scaffolded form object.
*/ */
@ -182,14 +219,7 @@ abstract class ModelAdmin extends LeftAndMain {
* Base scaffolding method for returning a generic model instance. * Base scaffolding method for returning a generic model instance.
*/ */
public function bindModelController($model, $request = null) { public function bindModelController($model, $request = null) {
$models = $this->getManagedModels(); $class = $this->getCollectionControllerClass($model);
if(isset($models[$model]['collection_controller'])) {
$class = $models[$model]['collection_controller'];
} else {
$class = $this->stat('collection_controller_class');
}
return new $class($this, $model); return new $class($this, $model);
} }
@ -335,15 +365,7 @@ class ModelAdmin_CollectionController extends Controller {
* @return RecordController * @return RecordController
*/ */
public function handleID($request) { public function handleID($request) {
$models = $this->parentController->getManagedModels(); $class = $this->parentController->getRecordControllerClass($this->getModelClass());
$model = $this->getModelClass();
if(isset($models[$model]['record_controller'])) {
$class = $models[$model]['record_controller'];
} else {
$class = $this->parentController->stat('record_controller_class');
}
return new $class($this, $request); return new $class($this, $request);
} }
@ -814,7 +836,8 @@ class ModelAdmin_CollectionController extends Controller {
$model->write(); $model->write();
if(Director::is_ajax()) { if(Director::is_ajax()) {
$recordController = new ModelAdmin_RecordController($this, $request, $model->ID); $class = $this->parentController->getRecordControllerClass($this->getModelClass());
$recordController = new $class($this, $request, $model->ID);
return new SS_HTTPResponse( return new SS_HTTPResponse(
$recordController->EditForm()->formHtmlContent(), $recordController->EditForm()->formHtmlContent(),
200, 200,