Habari\AdminThemesHandler::ajax_save_areas PHP Метод

ajax_save_areas() публичный Метод

Called from the themes page to save the blocks instances into areas
public ajax_save_areas ( mixed $handler_vars )
$handler_vars mixed
    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();
    }