function perform(&$request, &$response)
 {
     if ($request->hasAttribute('popup')) {
         $response->write(closePopupNoParentReloadResponse());
     }
     $request->setStatus(Request::STATUS_FAILURE);
     if (!($version = $request->get('version'))) {
         return;
     }
     if (!($node_id = $request->get('version_node_id'))) {
         return;
     }
     $toolkit =& Limb::toolkit();
     $datasource =& $toolkit->getDatasource('SingleObjectDatasource');
     $datasource->setNodeId($node_id);
     if (!($site_object = wrapWithSiteObject($datasource->fetch()))) {
         return;
     }
     if (!is_subclass_of($site_object, 'ContentObject')) {
         return;
     }
     if (!$site_object->recoverVersion((int) $version)) {
         return;
     }
     if ($request->hasAttribute('popup')) {
         $response->write(closePopupResponse($request));
     }
     $request->setStatus(Request::STATUS_SUCCESS);
 }
 protected function _validPerform($request, $response)
 {
     if (!($class_id = $request->get('class_id'))) {
         throw new LimbException('class_id not defined');
     }
     $data = $this->dataspace->export();
     $access_policy = new AccessPolicy();
     $access_policy->saveAccessTemplates($class_id, $data['template'], AccessPolicy::ACCESSOR_TYPE_GROUP);
     $request->setStatus(Request::STATUS_FORM_SUBMITTED);
     if ($request->hasAttribute('popup')) {
         $response->write(closePopupNoParentReloadResponse());
     }
 }