BUG Move the SubsiteList PJAX request to a dedicated Controller.

Currently the request cannot be made if one doesn't have access to the
SubsiteAdmin section, which often happens with subsite-specific admins.
This commit is contained in:
Mateusz Uzdowski 2013-10-16 13:20:54 +13:00
parent fc07486f9b
commit 91cca0c64d
3 changed files with 41 additions and 16 deletions

View File

@ -30,17 +30,4 @@ class SubsiteAdmin extends ModelAdmin {
return $form;
}
public function getResponseNegotiator() {
$negotiator = parent::getResponseNegotiator();
$self = $this;
// Register a new callback
$negotiator->setCallback('SubsiteList', function() use(&$self) {
return $self->SubsiteList();
});
return $negotiator;
}
public function SubsiteList() {
return $this->renderWith('SubsiteList');
}
}

View File

@ -0,0 +1,38 @@
<?php
/**
* Section-agnostic PJAX controller.
*/
class SubsiteXHRController extends LeftAndMain {
/**
* Relax the access permissions, so anyone who has access to any CMS subsite can access this controller.
*/
public function canView($member = null) {
if (parent::canView()) return true;
if (Subsite::all_accessible_sites()->count()>0) return true;
return false;
}
public function getResponseNegotiator() {
$negotiator = parent::getResponseNegotiator();
$self = $this;
// Register a new callback
$negotiator->setCallback('SubsiteList', function() use(&$self) {
return $self->SubsiteList();
});
return $negotiator;
}
/**
* Provide the list of available subsites as a cms-section-agnostic PJAX handler.
*/
public function SubsiteList() {
return $this->renderWith('SubsiteList');
}
}

View File

@ -58,7 +58,7 @@
*/
$('.cms-container .cms-menu-list li a').entwine({
onclick: function(e) {
$('.cms-container').subsiteFetchPjaxFragment('admin/subsites/', 'SubsiteList');
$('.cms-container').subsiteFetchPjaxFragment('SubsiteXHRController', 'SubsiteList');
this._super(e);
}
});
@ -68,7 +68,7 @@
*/
$('.cms-container .SubsiteAdmin .cms-edit-form fieldset.ss-gridfield').entwine({
onreload: function(e) {
$('.cms-container').subsiteFetchPjaxFragment('admin/subsites/', 'SubsiteList');
$('.cms-container').subsiteFetchPjaxFragment('SubsiteXHRController', 'SubsiteList');
this._super(e);
}
});
@ -81,7 +81,7 @@
*/
$('.cms-container .cms-content-fields .subsite-model').entwine({
onadd: function(e) {
$('.cms-container').subsiteFetchPjaxFragment('admin/subsites/', 'SubsiteList');
$('.cms-container').subsiteFetchPjaxFragment('SubsiteXHRController', 'SubsiteList');
this._super(e);
}
});