function perform(&$request, &$response)
	{
		if($request->has_attribute('popup'))
		  $response->write(close_popup_no_parent_reload_response());
	
	  $request->set_status(REQUEST_STATUS_FAILURE);
	  
		if(!$version = $request->get_attribute('version'))
			return;

		if(!$node_id = $request->get_attribute('version_node_id'))
	    return;
			
		if(!$site_object = wrap_with_site_object(fetch_one_by_node_id((int)$node_id)))
			return;
		
		if(!is_subclass_of($site_object, 'content_object'))
			return;

		if(!$site_object->recover_version((int)$version))
		  return;

		if($request->has_attribute('popup'))
		  $response->write(close_popup_response($request));
	
	  $request->set_status(REQUEST_STATUS_SUCCESS);
	}
  function _valid_perform(&$request, &$response)
  {
    $locale_id = $this->dataspace->get('locale_id');
    $object_data = $this->_load_object_data();
    
    $site_object =& wrap_with_site_object($object_data);
    $site_object->set_locale_id($locale_id);
    $site_object->update(false);

    $request->set_status(REQUEST_STATUS_FORM_SUBMITTED);
    if($request->has_attribute('popup'))
      $response->write(close_popup_response($request)); 
    
    if(!$this->dataspace->get('locale_recursive'))
      return;
    $params = array('depth' => -1,
                    'restrict_by_class' => false
                    );
    $objects = fetch_sub_branch($object_data['path'], 'site_object', $counter, $params);
    foreach ($objects as $object_id => $object_data)
    {
      $site_object =& wrap_with_site_object($object_data);
      $site_object->set_locale_id($locale_id);
      $site_object->update(false);
    }
  }
 function run(&$filter_chain, &$request, &$response)
 {
     debug::add_timing_point('authentication filter started');
     if (!($object_data = fetch_requested_object($request))) {
         if (!($node = map_request_to_node($request))) {
             if (defined('ERROR_DOCUMENT_404')) {
                 $response->redirect(ERROR_DOCUMENT_404);
             } else {
                 $response->header("HTTP/1.1 404 Not found");
             }
             return;
         }
         $response->redirect('/root/login?redirect=' . urlencode($_SERVER['REQUEST_URI']));
         return;
     }
     $object =& wrap_with_site_object($object_data);
     $site_object_controller =& $object->get_controller();
     if (($action = $site_object_controller->determine_action($request)) === false) {
         debug::write_error('"' . $action . '" action not found', __FILE__ . ' : ' . __LINE__ . ' : ' . __FUNCTION__);
         if (defined('ERROR_DOCUMENT_404')) {
             $response->redirect(ERROR_DOCUMENT_404);
         } else {
             $response->header("HTTP/1.1 404 Not found");
         }
         debug::add_timing_point('authentication filter finished');
         $filter_chain->next();
         return;
     }
     $actions = $object->get_attribute('actions');
     if (!isset($actions[$action])) {
         $response->redirect('/root/login?redirect=' . urlencode($_SERVER['REQUEST_URI']));
     }
     debug::add_timing_point('authentication filter finished');
     $filter_chain->next();
 }
 function &get_dataset(&$counter, $params = array())
 {
     $counter = 0;
     $request = request::instance();
     if (!($version = $request->get_attribute('version'))) {
         return new empty_dataset();
     }
     if (!($node_id = $request->get_attribute('version_node_id'))) {
         return new empty_dataset();
     }
     $version = (int) $version;
     $node_id = (int) $node_id;
     if (!($site_object = wrap_with_site_object(fetch_one_by_node_id($node_id)))) {
         return new empty_dataset();
     }
     if (!is_subclass_of($site_object, 'content_object')) {
         return new empty_dataset();
     }
     if (($version_data = $site_object->fetch_version($version)) === false) {
         return new empty_dataset();
     }
     $result = array();
     foreach ($version_data as $attrib => $value) {
         $data['attribute'] = $attrib;
         $data['value'] = $value;
         $result[] = $data;
     }
     return new array_dataset($result);
 }
 function _valid_perform()
 {
     $data = $this->dataspace->export();
     if (!isset($data['ids']) || !is_array($data['ids'])) {
         return new close_popup_response(RESPONSE_STATUS_FAILURE);
     }
     $objects = $this->_get_objects(array_keys($data['ids']));
     foreach ($objects as $id => $item) {
         if (!isset($item['actions']['publish']) || !isset($item['actions']['unpublish'])) {
             continue;
         }
         $object = wrap_with_site_object($item);
         $status = $object->get_attribute('status');
         if ($status & SITE_OBJECT_PUBLISHED_STATUS) {
             $status &= !SITE_OBJECT_PUBLISHED_STATUS;
             $action = 'unpublish';
         } else {
             $status |= SITE_OBJECT_PUBLISHED_STATUS;
             $action = 'publish';
         }
         $object->set_attribute('status', $status);
         $object->update(false);
         $this->_apply_access_policy($object, $action);
     }
     return new close_popup_response();
 }
	function & get_dataset(&$counter, $params=array())
	{
		$counter = 0;
		
		if(!isset($_REQUEST['version']))
			return new empty_dataset();

		if(!isset($_REQUEST['version_node_id']))
			return new empty_dataset();
			
		$version = (int)$_REQUEST['version'];
		$node_id = (int)$_REQUEST['version_node_id'];

		if(!$site_object = wrap_with_site_object(fetch_one_by_node_id($node_id)))
			return new empty_dataset();
		
		if(!is_subclass_of($site_object, 'content_object'))
			return new empty_dataset();
		
		if(($version_data = $site_object->fetch_version($version)) === false)
			return new empty_dataset();
				
		$result = array();
		
		foreach($version_data as $attrib => $value)
		{
			$data['attribute'] = $attrib;
			$data['value'] = $value;
			$result[] = $data;
		}
		
		return new array_dataset($result);
	}		
	function perform()
	{
		if(!$object = wrap_with_site_object(fetch_mapped_by_url()))
			return new close_popup_response();
		
		$site_object_controller =& $object->get_controller();
		$action = $site_object_controller->determine_action();

		switch ($action)
		{
			case 'publish':
				$status = $this->get_publish_status($object);
			break;
			case 'unpublish':
				$status = $this->get_unpublish_status($object);
			break;
			default:
				return new close_popup_response();
			break;
		}

		$object->set_attribute('status', $status);
		$object->update(false);
		
		$this->_apply_access_policy($object, $action);
			
		return new close_popup_response();
	}
 function _valid_perform(&$request, &$response)
 {
     if ($request->has_attribute('popup')) {
         $response->write(close_popup_response($request));
     }
     $data = $this->dataspace->export();
     if (!isset($data['ids']) || !is_array($data['ids'])) {
         $request->set_status(REQUEST_STATUS_FAILURE);
         return;
     }
     $objects = $this->_get_objects(array_keys($data['ids']));
     foreach ($objects as $id => $item) {
         if (!isset($item['actions']['publish']) || !isset($item['actions']['unpublish'])) {
             continue;
         }
         $object = wrap_with_site_object($item);
         $status = $object->get_attribute('status');
         if ($status & SITE_OBJECT_PUBLISHED_STATUS) {
             $status &= ~SITE_OBJECT_PUBLISHED_STATUS;
             $action = 'unpublish';
         } else {
             $status |= SITE_OBJECT_PUBLISHED_STATUS;
             $action = 'publish';
         }
         $object->set_attribute('status', $status);
         $object->update(false);
         $this->_apply_access_policy($object, $action);
     }
     $request->set_status(REQUEST_STATUS_SUCCESS);
 }
	function _can_parent_accept_node($parent_node_id, $node_id)
	{
		if(!$parent_object = wrap_with_site_object(fetch_one_by_node_id($parent_node_id)))
		{
	    debug :: write_error('acceptor node is not accessible',
    		 __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__, 
    		array(
    			'parent_node_id' => $parent_node_id
    		)
    	);

			return false;
		}
			
		if(!$target_data = fetch_one_by_node_id($node_id))
		{
	    debug :: write_error('node is not accessible',
    		 __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__, 
    		array(
    			'node_id' => $node_id
    		)
    	);

			return false;
		}
		
		return $parent_object->can_accept_child_class($target_data['class_name']);
	}
 function perform(&$request, &$response)
 {
     $request->set_status(REQUEST_STATUS_SUCCESS);
     if ($request->has_attribute('popup')) {
         $response->write(close_popup_response($request));
     }
     if (!($object = wrap_with_site_object(fetch_requested_object()))) {
         return;
     }
     $site_object_controller =& $object->get_controller();
     $action = $site_object_controller->determine_action($request);
     switch ($action) {
         case 'publish':
             $status = $this->get_publish_status($object);
             break;
         case 'unpublish':
             $status = $this->get_unpublish_status($object);
             break;
         default:
             return;
             break;
     }
     $object->set_attribute('status', $status);
     $object->update(false);
     $this->_apply_access_policy($object, $action);
     flush_fetcher_cache();
 }
 function _get_template_path_from_node($node_id)
 {
     if (!($site_object =& wrap_with_site_object(fetch_one_by_node_id($node_id)))) {
         return null;
     }
     $controller =& $site_object->get_controller();
     return $controller->get_action_property($controller->get_default_action(), 'template_path');
 }
  function run(&$filter_chain, &$request, &$response)
  {
    debug :: add_timing_point('authentication filter started');

    if(!$object_data = fetch_requested_object($request))
    {
      if(!$node = map_request_to_node($request))
      {
        if(defined('ERROR_DOCUMENT_404'))
          $response->redirect(ERROR_DOCUMENT_404);
        else
          $response->header("HTTP/1.1 404 Not found");
        return;
      }
      $response->redirect('/root/login?redirect='. urlencode($request->to_string()));
      return;
    }

    $object =& wrap_with_site_object($object_data);

    $site_object_controller =& $object->get_controller();

    if(($action = $site_object_controller->determine_action($request)) === false)
    {
      debug :: write_error('"'. $action . '" action not found', __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__);

      if(defined('ERROR_DOCUMENT_404'))
        $response->redirect(ERROR_DOCUMENT_404);
      else
        $response->header("HTTP/1.1 404 Not found");

      debug :: add_timing_point('authentication filter finished');

      $filter_chain->next();
      return;
    }

    $actions = $object->get_attribute('actions');

    if(!isset($actions[$action]))
    {
      $redirect_path = $site_object_controller->get_action_property($action, 'inaccessible_redirect');

      if(!$redirect_path)
        $redirect_path = '/root/login';

      $redirect_strategy =& $this->_get_redirect_strategy($site_object_controller, $action);

      $response->set_redirect_strategy($redirect_strategy);

      $response->redirect($redirect_path . '?redirect='. urlencode($request->to_string()));
    }

    debug :: add_timing_point('authentication filter finished');

    $filter_chain->next();
  }
 function _valid_perform()
 {
     $object =& wrap_with_site_object(fetch_mapped_by_url());
     if (!$object->delete()) {
         message_box::write_notice('Can not be deleted!');
         return new failed_response();
     }
     return new close_popup_response(RESPONSE_STATUS_FORM_SUBMITTED, RELOAD_SELF_URL, true);
 }
 function run(&$filter_chain, &$request, &$response)
 {
     $filter_chain->next();
     debug::add_timing_point('logging filter started');
     $object = wrap_with_site_object(fetch_requested_object($request));
     $controller = $object->get_controller();
     include_once LIMB_DIR . 'core/model/stats/stats_register.class.php';
     $stats_register = new stats_register();
     $stats_register->register($object->get_node_id(), $controller->get_action(), $request->get_status());
     debug::add_timing_point('logging filter finished');
 }
 function run(&$filter_chain, &$request, &$response)
 {
     debug::add_timing_point('site object controller filter started');
     $site_object =& wrap_with_site_object(fetch_requested_object($request));
     $site_object_controller =& $site_object->get_controller();
     $site_object_controller->process($request, $response);
     if ($response->is_empty()) {
         $site_object_controller->display_view();
     }
     debug::add_timing_point('site object controller filter finished');
     $filter_chain->next();
 }
 function _valid_perform(&$request, &$response)
 {
     $object =& wrap_with_site_object(fetch_requested_object());
     if (!$object->delete()) {
         message_box::write_notice(strings::get('cant_be_deleted', 'error'));
         $request->set_status(REQUEST_STATUS_FAILURE);
         return;
     }
     $request->set_status(REQUEST_STATUS_FORM_SUBMITTED);
     if ($request->has_attribute('popup')) {
         $response->write(close_popup_response($request, RELOAD_SELF_URL, true));
     }
 }
 function get_current_template_source_link()
 {
     if (!($site_object = wrap_with_site_object(fetch_mapped_by_url()))) {
         return '';
     }
     $site_object_controller = $site_object->get_controller();
     if (($action = $site_object_controller->determine_action()) === false) {
         return '';
     }
     if (!($template_path = $site_object_controller->get_action_property($action, 'template_path'))) {
         return '';
     }
     return '/root/template_source?t[]=' . $template_path;
 }
 function _valid_perform(&$request, &$response)
 {
     $node_id = $this->dataspace->get('id');
     if (!($object = wrap_with_site_object(fetch_one_by_node_id($node_id)))) {
         $request->set_status(REQUEST_STATUS_FAILURE);
         return;
     }
     $object->set_attribute('controller_id', site_object_controller::get_id($this->dataspace->get('controller_name')));
     $object->update(false);
     $request->set_status(REQUEST_STATUS_SUCCESS);
     if ($request->has_attribute('popup')) {
         $response->write(close_popup_response($request));
     }
 }
  function get_current_template_source_link()
  {
    if(!$site_object = wrap_with_site_object(fetch_requested_object()))
      return '';

    $site_object_controller = $site_object->get_controller();

    if(($action = $site_object_controller->determine_action()) === false)
      return '';

    if(!$template_path = $site_object_controller->get_action_property($action, 'template_path'))
      return '';

    return '/root/template_source?t[]=' . $template_path;
  }
 function perform(&$request, &$response)
 {
     $request->set_status(REQUEST_STATUS_SUCCESS);
     if ($request->has_attribute('popup')) {
         $response->write(close_popup_response($request));
     }
     if (!($object = wrap_with_site_object(fetch_requested_object()))) {
         return;
     }
     $status = $this->get_status($object);
     $object->set_attribute('status', $status);
     $object->update(false);
     $this->_apply_access_policy($object);
     flush_fetcher_cache();
 }
 function perform()
 {
     if (!isset($_REQUEST['version'])) {
         return new close_popup_no_reload_response(RESPONSE_STATUS_FAILURE);
     }
     if (!isset($_REQUEST['version_node_id'])) {
         return new close_popup_no_reload_response(RESPONSE_STATUS_FAILURE);
     }
     $version = (int) $_REQUEST['version'];
     $node_id = (int) $_REQUEST['version_node_id'];
     if (!($site_object = wrap_with_site_object(fetch_one_by_node_id($node_id)))) {
         return new close_popup_no_reload_response(RESPONSE_STATUS_FAILURE);
     }
     if (!is_subclass_of($site_object, 'content_object')) {
         return new close_popup_no_reload_response(RESPONSE_STATUS_FAILURE);
     }
     if ($site_object->recover_version($version)) {
         return new close_popup_response(RESPONSE_STATUS_SUCCESS);
     } else {
         return new close_popup_no_reload_response(RESPONSE_STATUS_FAILURE);
     }
 }
 function _get_objects_to_delete($node_ids)
 {
     $params = array('restrict_by_class' => false);
     $objects =& fetch_by_node_ids($node_ids, 'site_object', $counter, $params);
     foreach ($objects as $id => $item) {
         if (!isset($item['actions']['delete'])) {
             $objects[$id]['delete_status'] = 1;
             $objects[$id]['delete_reason'] = strings::get('delete_action_not_accessible', 'error');
             continue;
         }
         $site_object =& wrap_with_site_object($item);
         if (!$site_object->can_delete()) {
             $objects[$id]['delete_status'] = 1;
             $objects[$id]['delete_reason'] = strings::get('cant_be_deleted', 'error');
             continue;
         }
         $objects[$id]['delete_reason'] = strings::get('ok');
         $objects[$id]['delete_status'] = 0;
         $objects[$id]['ids'][$item['node_id']] = 1;
     }
     return $objects;
 }
 function &_get_mapped_controller()
 {
   $object =& wrap_with_site_object(fetch_requested_object());
   $controller =& $object->get_controller();
   return $controller;
 }
  function run(&$filter_chain, &$request, &$response)
  { 
    debug :: add_timing_point('authentication filter started');
  	
    if(!$object_data = fetch_requested_object($request))
    {
      if(!$node = map_request_to_node($request))
      {
      	if(defined('ERROR_DOCUMENT_404'))
      		$response->redirect(ERROR_DOCUMENT_404);
      	else
      		$response->header("HTTP/1.1 404 Not found");
      	return;
      }
      
      
      $user =& user :: instance();
    	if (!$user->is_logged_in())
    	{
    		$tree = tree :: instance();
    		
    		$response->redirect('/root/login?redirect='. $tree->get_path_to_node($node));
    		return;
    	}	
    	else
    	{
    		debug :: write_error('content object not allowed or retrieved', __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__);
    		        	
    		if(defined('ERROR_DOCUMENT_403'))
    			$response->redirect(ERROR_DOCUMENT_403);
    		else
    			$response->header("HTTP/1.1 403 Access denied");
    		return;
    	}	
    }
    
    $object =& wrap_with_site_object($object_data); 

    $site_object_controller =& $object->get_controller();
    
    if(($action = $site_object_controller->determine_action($request)) === false)
    {
    	debug :: write_error('"'. $action . '" action not found', __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__);
    
    	if(defined('ERROR_DOCUMENT_404'))
    		$response->redirect(ERROR_DOCUMENT_404);
    	else
    		$response->header("HTTP/1.1 404 Not found");

      debug :: add_timing_point('authentication filter finished');
    	
    	$filter_chain->next();
    	return;
    }
        
    $actions = $object->get_attribute('actions');
    
    if(!isset($actions[$action]))
    {
    	debug :: write_error('"'. $action . '" action is not accessible', __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__);
    	
    	if (debug :: is_console_enabled())
    		echo debug :: parse_html_console();
    		
    	if(defined("ERROR_DOCUMENT_403"))
    		$response->redirect(ERROR_DOCUMENT_403);
    	else
    		$response->header("HTTP/1.1 403 Access denied");
    	return;
    }

    debug :: add_timing_point('authentication filter finished');
          
    $filter_chain->next();        
  }
 function _get_object(&$request)
 {
     return wrap_with_site_object(fetch_requested_object($request));
 }
  function _valid_perform(&$request, &$response)
  {
    $ids = $this->dataspace->get('ids');
    $new_parent_node_id = $this->dataspace->get('parent_node_id');

    $objects = $this->_get_objects_to_move(array_keys($ids));

    $tree =& tree :: instance();

    foreach($objects as $id => $item)
    {
      $site_object =& wrap_with_site_object($item);

      $site_object->set_parent_node_id($new_parent_node_id);

      if(!$site_object->update(false))
      {
        debug :: write_error("object couldn't be moved",
         __FILE__ . ' : ' . __LINE__ . ' : ' .  __FUNCTION__,
        array('node_id' => $id));

        $request->set_status(REQUEST_STATUS_FAILURE);

        return;
      }
    }
    $request->set_status(REQUEST_STATUS_SUCCESS);

    $response->write(close_popup_response($request));
  }