<commit_before><?php
/* nog een externe library */
require_once 'lib/linkify/linkify.php';

# Utility class voor template functies, kan eventueel 
# door custom templates extended worden
class SpotTemplateHelper {	
	protected $_settings;
	protected $_db;
	protected $_spotnzb;
	protected $_currentSession;
	protected $_params;
	protected $_nzbhandler;
	protected $_spotSec;
	
	function __construct(SpotSettings $settings, $currentSession, SpotDb $db, $params) {
		$this->_settings = $settings;
		$this->_currentSession = $currentSession;
		$this->_spotSec = $currentSession['security'];
		$this->_db = $db;
		$this->_params = $params;
		
		# We initialiseren hier een SpotNzb object omdat we die
		# voor het maken van de sabnzbd categorieen nodig hebben.
		# Door die hier aan te maken verplaatsen we een boel allocaties
		$this->_spotnzb = new SpotNzb($db, $settings);

		# We initialiseren hier een NzbHandler object om te voorkomen
		# dat we voor iedere spot een nieuw object initialiseren
		$nzbhandling = $settings->get('nzbhandling');
		$action =  $nzbhandling['action'];
		$nzbHandlerFactory = new NzbHandler_Factory();
		$this->_nzbHandler = $nzbHandlerFactory->build($settings, $action);
		
	} # ctor

	/*
	 * Geef het aantal spots terug
	 */
	function getSpotCount($sqlFilter) {
		# Controleer de users' rechten
		if ($this->_spotSec->allowed(SpotSecurity::spotsec_view_spotcount_total, '')) {
			return $this->_db->getSpotCount($sqlFilter);
		} else {
			return 0;
		} # else
	} # getSpotCount

	/*
	 * Set params - update de gehele lijst van parameters
	 */
	function setParams($params) {
		$this->_params = $params;
	} # setParams
	
	/* 
	 * Geeft de waarde van een parameter terug
	 */
	function getParam($name) {
		if (isset($this->_params[$name])) {
			return $this->_params[$name];
		} else {
			return NULL;
		} # if
	} # getParam
	
	/*
 	 * Geef het aantal spots terug maar dan rekening houdende met het filter
 	 */
	function getFilteredSpotCount($filterStr) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotcount_filtered, '')) {
			return 0;
		} # else

		parse_str(html_entity_decode($filterStr), $query_params);
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		$parsedSearch = $spotsOverview->filterToQuery($query_params['search'], $this->_currentSession);

		return $this->getSpotCount($parsedSearch['filter']);
	} # getFilteredSpotCount

	/*
	 * Geef het aantal spots terug, maar enkel die new zijn
	 */
	function getNewCountForFilter($filterStr) {
		static $skipNewCount = null;
		if ($skipNewCount) {
			return '';
		} # if

		$filterStr .= "&search[value][]=New:0";
		$newCount = $this->getFilteredSpotCount($filterStr);

		# en geef het aantal terug dat we willen hebben. Inclusief extragratis
		# lelijke hack om er voor te zorgen dat als er erg veel nieuwe spots
		# zijn, SpotWeb niet ontzettend traag wordt. 
		if ($newCount > 5000) {
			$skipNewCount = true;
			return '';
		} elseif ($newCount > 0) {
			return $newCount;
		} else {
			return '';
		} # else
	} # getNewCountForFilter

	/*
	 * Geeft een aantal comments terug
	 */
	function getSpotComments($msgId, $start, $length) {
		# Controleer de users' rechten
		$this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_view_comments, '');

		$spotnntp = new SpotNntp($this->_settings->get('nntp_hdr'));
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		return $spotsOverview->getSpotComments($msgId, $spotnntp, $start, $length);
	} # getSpotComments

	/*
	 * Geeft een full spot terug
	 */
	function getFullSpot($msgId, $markAsRead) {
		# Controleer de users' rechten
		$this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_view_spotdetail, '');
		
		$spotnntp = new SpotNntp($this->_settings->get('nntp_hdr'));
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		$fullSpot = $spotsOverview->getFullSpot($msgId, $this->_currentSession['user']['userid'], $spotnntp);
		
		# seen list
		if ($markAsRead) {
			if ($this->_settings->get('keep_seenlist') && $fullSpot['seenstamp'] == NULL) {
				$spotsOverview->addToSeenList($msgId, $this->_currentSession['user']['userid']);
			} # if
		} # if
		
		return $fullSpot;
	} # getFullSpot

	/*
	 * Creeert een URL naar de zoekmachine zoals gedefinieerd in de settings
	 */
	function makeSearchUrl($spot) {
		$searchString = (empty($spot['filename'])) ? $spot['title'] : $spot['filename'];
		switch ($this->_settings->get('nzb_search_engine')) {
			case 'nzbindex'	: return 'http://nzbindex.nl/search/?q=' . $searchString; break;
			case 'binsearch':
			default			: return 'http://www.binsearch.info/?adv_age=&amp;q=' . $searchString;
		} # switch
	} # makeSearchUrl
	
	/*
	 * Geef het volledige URL of path naar Spotweb terug
	 */
	function makeBaseUrl($type) {
		switch ($type) {
			case 'path'	: return parse_url($this->_settings->get('spotweburl'), PHP_URL_PATH); break;
			default		: return $this->_settings->get('spotweburl');
		} # switch
	} # makeBaseurl

	/*
	 * Creeert een linkje naar de sabnzbd API zoals gedefinieerd in de 
	 * settings
	 */
	function makeSabnzbdUrl($spot) {
		return $this->_nzbHandler->generateNzbHandlerUrl($spot);
	} # makeSabnzbdUrl

	/*
	 * Creeert een linkje naar een specifieke spot
	 */
	function makeSpotUrl($spot) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotdetail, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=getspot&amp;messageid=" . urlencode($spot['messageid']); 
	} # makeSpotUrl

	/*
	 * Creeert de action url voor het aanmaken van de user
	 */
	function makeCreateUserAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_create_new_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=createuser";
	} # makeCreateUserAction

	/*
	 * Creeert de action url voor het wijzigen van de user (gebruikt in form post actions)
	 */
	function makeEditUserAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituser";
	} # makeEditUserAction
	
	/*
	 * Creeert de action url voor het wijzigen van de users' preferences (gebruikt in form post actions)
	 */
	function makeEditUserPrefsAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_userprefs, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituserprefs";
	} # makeEditUserPrefsAction
	
	/*
	 * Creeert de url voor het bewerken van een bestaande user
	 */
	function makeEditUserUrl($userid, $action) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituser&amp;userid=" . ((int) $userid) . '&amp;action=' . $action;
	} # makeEditUserUrl

	/*
	 * Creeert de action url voor het inloggen van een user
	 */
	function makeLoginAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_perform_login, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=login";
	} # makeLoginAction

	/*
	 * Creeert de action url voor het inloggen van een user
	 */
	function makePostCommentAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_post_comment, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=postcomment";
	} # makePostCommentAction
	
	/*
	 * Creeert een linkje naar een specifieke nzb
	 */
	function makeNzbUrl($spot) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_retrieve_nzb, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("full") . '?page=getnzb&amp;action=display&amp;messageid=' . urlencode($spot['messageid']) . $this->makeApiRequestString();
	} # makeNzbUrl

	/*
	 * Geef het pad op naar de image
	 */
	function makeImageUrl($spot, $height, $width) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotimage, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . '?page=getimage&amp;messageid=' . urlencode($spot['messageid']) . '&amp;image[height]=' . $height . '&amp;image[width]=' . $width;
	} # makeImageUrl

	/*
	 * Creert een sorteer url
	 */
	function makeSortUrl($page, $sortby, $sortdir) {
		return $this->makeBaseUrl("path") . '?page=' . $page . $this->getQueryParams(array('sortby', 'sortdir')) . '&amp;sortby=' . $sortby . '&amp;sortdir=' . $sortdir;
	} # makeSortUrl

	/*
	 * Creert een category url
	 */
	function makeCatUrl($spot) {
		$catSpot = explode("|", $spot['subcata']);
		return $this->makeBaseUrl("path") . '?search[tree]=cat' . $spot['category'] . '_' . $catSpot[0] . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeCatUrl

	/*
	 * Creert een subcategory url
	 */
	function makeSubCatUrl($spot, $cat) {
		$catSpot = explode("|", $cat);
		return $this->makeBaseUrl("path") . '?search[tree]=cat' . $spot['category'] . '_' . $catSpot[0] . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeSubCatUrl

	/*
	 * Creert een Poster url
	 */
	function makePosterUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=Poster:' . urlencode($spot['poster']) . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makePosterUrl

	/*
	 * Creeert een linkje naar een zoekopdracht op userid
	 */
	function makeUserIdUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=UserID:' . urlencode($spot['userid']) . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeUserIdUrl

	/*
	 * Creeert een linkje naar een zoekopdracht op tag
	 */
	function makeTagUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=Tag:' . urlencode($spot['tag']);
	} # makeUserIdUrl

	/*
	 * Creeert een request string met username en apikey als deze zijn opgegeven
	 */
	function makeApiRequestString() {
		if (!empty($this->_params['apikey'])) {
			return '&amp;apikey=' . $this->_params['apikey'];
		} elseif ($this->_currentSession['user']['userid'] > SPOTWEB_ADMIN_USERID && !$this->_spotSec->allowed(SpotSecurity::spotsec_consume_api, '')) {
			return '&amp;apikey=' . $this->_currentSession['user']['apikey'];
		} else {
			return '';
		}
	} # makeApiRequestString
	
	/*
	 * Creert een basis navigatie pagina
	 */
	function getPageUrl($page, $includeParams = false) {
		$url = $this->makeBaseUrl("path") . '?page=' . $page;
		if ($includeParams) {
			$url .= $this->getQueryParams("filterValues");
		} # if
		
		return $url;
	} # getPageUrl
	
	/*
	 * Geeft het linkje terug naar ons zelf
	 */<commit_msg>Security fix<commit_after><?php
/* nog een externe library */
require_once 'lib/linkify/linkify.php';

# Utility class voor template functies, kan eventueel 
# door custom templates extended worden
class SpotTemplateHelper {	
	protected $_settings;
	protected $_db;
	protected $_spotnzb;
	protected $_currentSession;
	protected $_params;
	protected $_nzbhandler;
	protected $_spotSec;
	
	function __construct(SpotSettings $settings, $currentSession, SpotDb $db, $params) {
		$this->_settings = $settings;
		$this->_currentSession = $currentSession;
		$this->_spotSec = $currentSession['security'];
		$this->_db = $db;
		$this->_params = $params;
		
		# We initialiseren hier een SpotNzb object omdat we die
		# voor het maken van de sabnzbd categorieen nodig hebben.
		# Door die hier aan te maken verplaatsen we een boel allocaties
		$this->_spotnzb = new SpotNzb($db, $settings);

		# We initialiseren hier een NzbHandler object om te voorkomen
		# dat we voor iedere spot een nieuw object initialiseren
		$nzbhandling = $settings->get('nzbhandling');
		$action =  $nzbhandling['action'];
		$nzbHandlerFactory = new NzbHandler_Factory();
		$this->_nzbHandler = $nzbHandlerFactory->build($settings, $action);
		
	} # ctor

	/*
	 * Geef het aantal spots terug
	 */
	function getSpotCount($sqlFilter) {
		# Controleer de users' rechten
		if ($this->_spotSec->allowed(SpotSecurity::spotsec_view_spotcount_total, '')) {
			return $this->_db->getSpotCount($sqlFilter);
		} else {
			return 0;
		} # else
	} # getSpotCount

	/*
	 * Set params - update de gehele lijst van parameters
	 */
	function setParams($params) {
		$this->_params = $params;
	} # setParams
	
	/* 
	 * Geeft de waarde van een parameter terug
	 */
	function getParam($name) {
		if (isset($this->_params[$name])) {
			return $this->_params[$name];
		} else {
			return NULL;
		} # if
	} # getParam
	
	/*
 	 * Geef het aantal spots terug maar dan rekening houdende met het filter
 	 */
	function getFilteredSpotCount($filterStr) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotcount_filtered, '')) {
			return 0;
		} # else

		parse_str(html_entity_decode($filterStr), $query_params);
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		$parsedSearch = $spotsOverview->filterToQuery($query_params['search'], $this->_currentSession);

		return $this->getSpotCount($parsedSearch['filter']);
	} # getFilteredSpotCount

	/*
	 * Geef het aantal spots terug, maar enkel die new zijn
	 */
	function getNewCountForFilter($filterStr) {
		static $skipNewCount = null;
		if ($skipNewCount) {
			return '';
		} # if

		$filterStr .= "&search[value][]=New:0";
		$newCount = $this->getFilteredSpotCount($filterStr);

		# en geef het aantal terug dat we willen hebben. Inclusief extragratis
		# lelijke hack om er voor te zorgen dat als er erg veel nieuwe spots
		# zijn, SpotWeb niet ontzettend traag wordt. 
		if ($newCount > 5000) {
			$skipNewCount = true;
			return '';
		} elseif ($newCount > 0) {
			return $newCount;
		} else {
			return '';
		} # else
	} # getNewCountForFilter

	/*
	 * Geeft een aantal comments terug
	 */
	function getSpotComments($msgId, $start, $length) {
		# Controleer de users' rechten
		$this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_view_comments, '');

		$spotnntp = new SpotNntp($this->_settings->get('nntp_hdr'));
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		return $spotsOverview->getSpotComments($msgId, $spotnntp, $start, $length);
	} # getSpotComments

	/*
	 * Geeft een full spot terug
	 */
	function getFullSpot($msgId, $markAsRead) {
		# Controleer de users' rechten
		$this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_view_spotdetail, '');
		
		$spotnntp = new SpotNntp($this->_settings->get('nntp_hdr'));
		
		$spotsOverview = new SpotsOverview($this->_db, $this->_settings);
		$fullSpot = $spotsOverview->getFullSpot($msgId, $this->_currentSession['user']['userid'], $spotnntp);
		
		# seen list
		if ($markAsRead) {
			if ($this->_settings->get('keep_seenlist') && $fullSpot['seenstamp'] == NULL) {
				$spotsOverview->addToSeenList($msgId, $this->_currentSession['user']['userid']);
			} # if
		} # if
		
		return $fullSpot;
	} # getFullSpot

	/*
	 * Creeert een URL naar de zoekmachine zoals gedefinieerd in de settings
	 */
	function makeSearchUrl($spot) {
		$searchString = (empty($spot['filename'])) ? $spot['title'] : $spot['filename'];
		switch ($this->_settings->get('nzb_search_engine')) {
			case 'nzbindex'	: return 'http://nzbindex.nl/search/?q=' . $searchString; break;
			case 'binsearch':
			default			: return 'http://www.binsearch.info/?adv_age=&amp;q=' . $searchString;
		} # switch
	} # makeSearchUrl
	
	/*
	 * Geef het volledige URL of path naar Spotweb terug
	 */
	function makeBaseUrl($type) {
		switch ($type) {
			case 'path'	: return parse_url($this->_settings->get('spotweburl'), PHP_URL_PATH); break;
			default		: return $this->_settings->get('spotweburl');
		} # switch
	} # makeBaseurl

	/*
	 * Creeert een linkje naar de sabnzbd API zoals gedefinieerd in de 
	 * settings
	 */
	function makeSabnzbdUrl($spot) {
		return $this->_nzbHandler->generateNzbHandlerUrl($spot);
	} # makeSabnzbdUrl

	/*
	 * Creeert een linkje naar een specifieke spot
	 */
	function makeSpotUrl($spot) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotdetail, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=getspot&amp;messageid=" . urlencode($spot['messageid']); 
	} # makeSpotUrl

	/*
	 * Creeert de action url voor het aanmaken van de user
	 */
	function makeCreateUserAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_create_new_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=createuser";
	} # makeCreateUserAction

	/*
	 * Creeert de action url voor het wijzigen van de user (gebruikt in form post actions)
	 */
	function makeEditUserAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituser";
	} # makeEditUserAction
	
	/*
	 * Creeert de action url voor het wijzigen van de users' preferences (gebruikt in form post actions)
	 */
	function makeEditUserPrefsAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_userprefs, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituserprefs";
	} # makeEditUserPrefsAction
	
	/*
	 * Creeert de url voor het bewerken van een bestaande user
	 */
	function makeEditUserUrl($userid, $action) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_edit_own_user, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=edituser&amp;userid=" . ((int) $userid) . '&amp;action=' . $action;
	} # makeEditUserUrl

	/*
	 * Creeert de action url voor het inloggen van een user
	 */
	function makeLoginAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_perform_login, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=login";
	} # makeLoginAction

	/*
	 * Creeert de action url voor het inloggen van een user
	 */
	function makePostCommentAction() {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_post_comment, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . "?page=postcomment";
	} # makePostCommentAction
	
	/*
	 * Creeert een linkje naar een specifieke nzb
	 */
	function makeNzbUrl($spot) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_retrieve_nzb, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("full") . '?page=getnzb&amp;action=display&amp;messageid=' . urlencode($spot['messageid']) . $this->makeApiRequestString();
	} # makeNzbUrl

	/*
	 * Geef het pad op naar de image
	 */
	function makeImageUrl($spot, $height, $width) {
		# Controleer de users' rechten
		if (!$this->_spotSec->allowed(SpotSecurity::spotsec_view_spotimage, '')) {
			return '';
		} # if
		
		return $this->makeBaseUrl("path") . '?page=getimage&amp;messageid=' . urlencode($spot['messageid']) . '&amp;image[height]=' . $height . '&amp;image[width]=' . $width;
	} # makeImageUrl

	/*
	 * Creert een sorteer url
	 */
	function makeSortUrl($page, $sortby, $sortdir) {
		return $this->makeBaseUrl("path") . '?page=' . $page . $this->getQueryParams(array('sortby', 'sortdir')) . '&amp;sortby=' . $sortby . '&amp;sortdir=' . $sortdir;
	} # makeSortUrl

	/*
	 * Creert een category url
	 */
	function makeCatUrl($spot) {
		$catSpot = explode("|", $spot['subcata']);
		return $this->makeBaseUrl("path") . '?search[tree]=cat' . $spot['category'] . '_' . $catSpot[0] . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeCatUrl

	/*
	 * Creert een subcategory url
	 */
	function makeSubCatUrl($spot, $cat) {
		$catSpot = explode("|", $cat);
		return $this->makeBaseUrl("path") . '?search[tree]=cat' . $spot['category'] . '_' . $catSpot[0] . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeSubCatUrl

	/*
	 * Creert een Poster url
	 */
	function makePosterUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=Poster:' . urlencode($spot['poster']) . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makePosterUrl

	/*
	 * Creeert een linkje naar een zoekopdracht op userid
	 */
	function makeUserIdUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=UserID:' . urlencode($spot['userid']) . '&amp;sortby=stamp&amp;sortdir=DESC';
	} # makeUserIdUrl

	/*
	 * Creeert een linkje naar een zoekopdracht op tag
	 */
	function makeTagUrl($spot) {
		return $this->makeBaseUrl("path") . '?search[tree]=&amp;search[value][]=Tag:' . urlencode($spot['tag']);
	} # makeUserIdUrl

	/*
	 * Creeert een request string met username en apikey als deze zijn opgegeven
	 */
	function makeApiRequestString() {
		if ($this->_currentSession['user']['userid'] > SPOTWEB_ADMIN_USERID && $this->_spotSec->allowed(SpotSecurity::spotsec_consume_api, '')) {
			return '&amp;apikey=' . $this->_currentSession['user']['apikey'];
		} else {
			return '';
		}
	} # makeApiRequestString
	
	/*
	 * Creert een basis navigatie pagina
	 */
	function getPageUrl($page, $includeParams = false) {
		$url = $this->makeBaseUrl("path") . '?page=' . $page;
		if ($includeParams) {
			$url .= $this->getQueryParams("filterValues");
		} # if
		
		return $url;
	} # getPageUrl
	
	/*
	 * Geeft het linkje terug naar ons zelf
	 */
{'fraction_non_alphanumeric': 0.15803193222548062, 'fraction_numerical': 0.0009309686729041568, 'mean_word_length': 4.2812192723697144, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 195, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6784231', 'n_tokens_mistral': 8054, 'n_tokens_neox': 7275, 'n_words': 1584}