function & get_dataset(& $counter, $params = array())
	{
		$mime_type = new mime_type();

		$pricelists_array =& $this->_fetch($counter, $params);
				
		$file_ids = array();
		foreach($pricelists_array as $id => $data)
			if($data['file_id'] > 0)
				$file_ids[$data['file_id']] = $data['file_id'];
		
		if(!$file_ids)
			return new array_dataset($pricelists_array);

		$files_counter = null;
		$file_data = fetch_by_node_ids($file_ids, 'file_object', $files_counter);

		foreach($pricelists_array as $id => $data)
			if($data['file_id'] > 0)
			{
				$pricelists_array[$id]['file_size'] = $file_data[$data['file_id']]['size'];
				$pricelists_array[$id]['file_icon'] = $mime_type->get_type_icon($file_data[$data['file_id']]['mime_type']);
			}
		
		
		return new array_dataset($pricelists_array);
	}
	function & get_dataset(&$counter, $params=array())
	{
		$counter = 0;
		
		$mapped_node = map_request_to_node();
		
		$links_manager = new links_manager();
		
		$groups = array();
		
		if(isset($params['group_identifier']))
		{
		  if($group = $links_manager->fetch_group_by_identifier($params['group_identifier']))
		    $groups[$group['id']] = $group;
		}
		else
		  $groups = $links_manager->fetch_groups();

		if (!is_array($groups) || !count($groups))
		  return new empty_dataset();

		if(isset($params['back_links']) && $params['back_links'])
		  $links = $links_manager->fetch_back_links($mapped_node['id'], array_keys($groups));
		else
		  $links = $links_manager->fetch_target_links($mapped_node['id'], array_keys($groups));

		if (!is_array($links) || !count($links))
		  return new array_dataset($groups);
		
		$target_node_ids = complex_array :: get_column_values('target_node_id', $links);
				
		if (!is_array($target_node_ids) || !count($target_node_ids))
		  return new array_dataset($groups);

		$site_object_class_name = isset($params['loader_class_name']) ? $params['loader_class_name'] : 'site_object';
		$objects =& fetch_by_node_ids($target_node_ids, $site_object_class_name, $counter, array(
		  'restrict_by_class' => false
		));
		
		$result = array();
		
		foreach($groups as $group_id => $group)
		{
      $groups[$group_id]['links'] = array();
      
		  foreach($links as $link_id => $link)
		  {
		    if ($link['group_id']!= $group_id)
		      continue;
		    
		    //if (!isset($objects[$link['target_node_id']]))
		    //  continue;
        
        $link_data = array_merge($objects[$link['target_node_id']], $link);
        $groups[$group_id]['links'][$link_id] = $link_data;
		  }
		}
		
		return new array_dataset($groups);
	}		
 function _valid_perform(&$request, &$response)
 {
     if (!($objects_amounts = $this->dataspace->get('amount'))) {
         $request->set_status(REQUEST_STATUS_FAILURE);
         if ($request->has_attribute('popup')) {
             $response->write(close_popup_response($request));
         }
         return;
     }
     $objects_data =& fetch_by_node_ids(array_keys($objects_amounts), $this->_define_catalog_object(), $counter);
     if (!$objects_data) {
         $request->set_status(REQUEST_STATUS_FAILURE);
         if ($request->has_attribute('popup')) {
             $response->write(close_popup_response($request));
         }
         return;
     }
     $object =& site_object_factory::create($this->_define_catalog_object());
     if (!method_exists($object, 'get_cart_item')) {
         $request->set_status(REQUEST_STATUS_FAILURE);
         if ($request->has_attribute('popup')) {
             $response->write(close_popup_response($request));
         }
         return;
     }
     $cart =& cart::instance();
     foreach ($objects_data as $key => $object_data) {
         $object->import_attributes($object_data);
         $cart_item =& $object->get_cart_item();
         $cart_item->set_amount($objects_amounts[$key]);
         $cart->add_item($cart_item);
     }
     $response->redirect('/root/cart?popup=1');
 }
	function _get_objects_to_delete($node_ids)
	{
		$params = array(
			'restrict_by_class' => false
		);
		
		$objects =& fetch_by_node_ids($node_ids, 'site_object', $counter, $params);
		
		$result = array();
		$tree = tree :: instance();
		
		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_objects($node_ids)
  {
    $params = array(
      'restrict_by_class' => false
    );

    $objects =& fetch_by_node_ids($node_ids, 'site_object', $counter, $params);
    return $objects;
  }
 function _valid_perform()
 {
     if (!($objects_amounts = $this->dataspace->get('amount'))) {
         return new close_popup_response(RESPONSE_STATUS_FAILURE);
     }
     $objects_data =& fetch_by_node_ids(array_keys($objects_amounts), $this->_catalog_object_class_name, $counter);
     if (!$objects_data) {
         return new close_popup_response(RESPONSE_STATUS_FAILURE);
     }
     $object =& site_object_factory::create($this->_catalog_object_class_name);
     if (!method_exists($object, 'get_cart_item')) {
         return new close_popup_response(RESPONSE_STATUS_FAILURE);
     }
     $cart =& cart::instance();
     foreach ($objects_data as $key => $object_data) {
         $object->import_attributes($object_data);
         $cart_item =& $object->get_cart_item();
         $cart_item->set_amount($objects_amounts[$key]);
         $cart->add_item($cart_item);
     }
     return new redirect_response(RESPONSE_STATUS_SUCCESS, '/root/cart?popup=1');
 }
  function _get_objects_to_move($node_ids)
  {
    $params = array(
      'restrict_by_class' => false
    );

    $objects = fetch_by_node_ids($node_ids, 'site_object', $counter, $params);

    foreach($objects as $id => $item)
    {
      $objects[$id]['ids'][$item['node_id']] = 1;
    }

    return $objects;
  }