public function ajax_save_areas($handler_vars)
{
Utils::check_request_method(array('POST'));
$scope = $_POST['scope'];
$msg = '';
$response = new AjaxResponse();
if (isset($_POST['changed'])) {
// Empty area, regardless
DB::query('DELETE FROM {blocks_areas} WHERE scope_id = :scope_id', array('scope_id' => $scope));
// Repopulate area if we have data to repopulate with
if (isset($_POST['area_blocks'])) {
$area_blocks = $_POST['area_blocks'];
foreach ((array) $area_blocks as $area => $blocks) {
$display_order = 0;
// if there are no blocks for a given area, skip it
if (empty($blocks)) {
continue;
}
foreach ($blocks as $block) {
$display_order++;
DB::query('INSERT INTO {blocks_areas} (block_id, area, scope_id, display_order) VALUES (:block_id, :area, :scope_id, :display_order)', array('block_id' => $block, 'area' => $area, 'scope_id' => $scope, 'display_order' => $display_order));
}
}
}
// $msg = json_encode( _t( 'Saved block areas settings.' ) );
// $msg = '<script type="text/javascript">
// human_msg.display_msg(' . $msg . ');
// spinner.stop();
// </script>';
$response->message = _t('Saved block areas settings.');
}
$this->setup_admin_theme('');
$blocks_areas_t = DB::get_results('SELECT b.*, ba.scope_id, ba.area, ba.display_order FROM {blocks} b INNER JOIN {blocks_areas} ba ON ba.block_id = b.id ORDER BY ba.scope_id ASC, ba.area ASC, ba.display_order ASC', array());
$blocks_areas = array();
foreach ($blocks_areas_t as $block) {
if (!isset($blocks_areas[$block->scope_id])) {
$blocks_areas[$block->scope_id] = array();
}
$blocks_areas[$block->scope_id][$block->area][$block->display_order] = $block;
}
$this->theme->blocks_areas = $blocks_areas;
$this->theme->scopeid = $scope;
$this->theme->areas = $this->get_areas($scope);
$scopes = DB::get_results('SELECT * FROM {scopes} ORDER BY name ASC;');
$scopes = Plugins::filter('get_scopes', $scopes);
$this->theme->scopes = $scopes;
$this->theme->active_theme = Themes::get_active_data(true);
$output = $this->theme->fetch('block_areas');
$response->html('block_areas', $output);
$response->out();
}