public function doRollback($data, $form)
    {
        $this->extend('onBeforeRollback', $data['ID'], $data['Version']);

        $id = (isset($data['ID'])) ? (int) $data['ID'] : null;
        $version = (isset($data['Version'])) ? (int) $data['Version'] : null;

        /** @var DataObject|Versioned $record */
        $record = Versioned::get_latest_version($this->config()->get('tree_class'), $id);
        if ($record && !$record->canEdit()) {
            return Security::permissionFailure($this);
        }

        if ($version) {
            $record->doRollbackTo($version);
            $message = _t(
                __CLASS__ . '.ROLLEDBACKVERSIONv2',
                "Rolled back to version #{version}.",
                array('version' => $data['Version'])
            );
        } else {
            $record->doRevertToLive();
            $record->publishRecursive();
            $message = _t(
                __CLASS__ . '.ROLLEDBACKPUBv2',
                "Rolled back to published version."
            );
        }

        $this->getResponse()->addHeader('X-Status', rawurlencode($message));

        // Can be used in different contexts: In normal page edit view, in which case the redirect won't have any effect.
        // Or in history view, in which case a revert causes the CMS to re-load the edit view.
        // The X-Pjax header forces a "full" content refresh on redirect.
        $url = Controller::join_links(CMSPageEditController::singleton()->Link('show'), $record->ID);
        $this->getResponse()->addHeader('X-ControllerURL', $url);
        $this->getRequest()->addHeader('X-Pjax', 'Content');
        $this->getResponse()->addHeader('X-Pjax', 'Content');

        return $this->getResponseNegotiator()->respond($this->getRequest());
    }
public function doRollback($data, $form)
    {
        $this->extend('onBeforeRollback', $data['ID'], $data['Version']);

        $id = (isset($data['ID'])) ? (int) $data['ID'] : null;
        $version = (isset($data['Version'])) ? (int) $data['Version'] : null;

        /** @var DataObject|Versioned $record */
        $record = Versioned::get_latest_version($this->config()->get('tree_class'), $id);
        if ($record && !$record->canEdit()) {
            return Security::permissionFailure($this);
        }

        if ($version) {
            $record->doRollbackTo($version);
            $message = _t(
                __CLASS__ . '.ROLLEDBACKVERSIONv2',
                "Rolled back to version #{version}.",
                array('version' => $data['Version'])
            );
        } else {
            $record->doRevertToLive();
            $record->publishRecursive();
            $message = _t(
                __CLASS__ . '.ROLLEDBACKPUBv2',
                "Rolled back to published version."
            );
        }

        $this->getResponse()->addHeader('X-Status', rawurlencode($message));

        // Can be used in different contexts: In normal page edit view, in which case the redirect won't have any effect.
        // Or in history view, in which case a revert causes the CMS to re-load the edit view.
        // The X-Pjax header forces a "full" content refresh on redirect.
        $url = Controller::join_links(CMSPageEditController::singleton()->Link('show'), $record->ID);
        $this->getResponse()->addHeader('X-ControllerURL', $url);
        $this->getRequest()->addHeader('X-Pjax', 'Content');
        $this->getResponse()->addHeader('X-Pjax', 'Content');

        return $this->getResponseNegotiator()->respond($this->getRequest());
    }
public function doRollback ( $ data , $ form ) { $ this -> extend ( 'onBeforeRollback' , $ data [ 'ID' ] , $ data [ 'Version' ] ) ; $ id = ( isset ( $ data [ 'ID' ] ) ) ? ( int ) $ data [ 'ID' ] : null ; $ version = ( isset ( $ data [ 'Version' ] ) ) ? ( int ) $ data [ 'Version' ] : null ; /** @var DataObject|Versioned $record */ $ record = Versioned :: get_latest_version ( $ this -> config ( ) -> get ( 'tree_class' ) , $ id ) ; if ( $ record && ! $ record -> canEdit ( ) ) { return Security :: permissionFailure ( $ this ) ; } if ( $ version ) { $ record -> doRollbackTo ( $ version ) ; $ message = _t ( __CLASS__ . '.ROLLEDBACKVERSIONv2' , "Rolled back to version #{version}." , array ( 'version' => $ data [ 'Version' ] ) ) ; } else { $ record -> doRevertToLive ( ) ; $ record -> publishRecursive ( ) ; $ message = _t ( __CLASS__ . '.ROLLEDBACKPUBv2' , "Rolled back to published version." ) ; } $ this -> getResponse ( ) -> addHeader ( 'X-Status' , rawurlencode ( $ message ) ) ; // Can be used in different contexts: In normal page edit view, in which case the redirect won't have any effect. // Or in history view, in which case a revert causes the CMS to re-load the edit view. // The X-Pjax header forces a "full" content refresh on redirect. $ url = Controller :: join_links ( CMSPageEditController :: singleton ( ) -> Link ( 'show' ) , $ record -> ID ) ; $ this -> getResponse ( ) -> addHeader ( 'X-ControllerURL' , $ url ) ; $ this -> getRequest ( ) -> addHeader ( 'X-Pjax' , 'Content' ) ; $ this -> getResponse ( ) -> addHeader ( 'X-Pjax' , 'Content' ) ; return $ this -> getResponseNegotiator ( ) -> respond ( $ this -> getRequest ( ) ) ; }
Rolls a site back to a given version ID

@param array $data
@param Form $form
@return HTTPResponse
Rolls a site back to a given version ID