<?php
// functie "citaten"
// Aanroepen: $tekst = citaten($tekst, $zoekwoorden, $rondom, $beetje); 
// Of kort: $tekst = citaten($tekst, $zoekwoorden);
// Voorbeeld: $tekst = citaten($tekst, $zoekwoorden, 20, 5);

function citaten($begintekst, $zoekwoorden, $rondom = 75, $beetje = 10 )
	{	
	// vars instellen
	$begintekst = strip_tags($begintekst);
	$rondom = intval($rondom);
	$beetje = intval($beetje);
	$tekst = "";
	$i = 0;
	$positie = "";
	$maximaal = strlen($begintekst);
	$minimaal = 0;
	$getallen = array();
	$offset = 0;
	$extra = 0;
	$aantal = 0;

	// controleer of $begintekst een string is
	if (!is_string($begintekst))
		{
		// is dit een array? Wellicht kunnen we nog iets doen?
		if(is_array($begintekst))
			{
			// als $begintekst een array is met maar 1 waarde... dan pakken we die gewoon
			if(count($begintekst) == 1)
			 	{
				// neem key 0 (1 waarde dus) als $begintekst
				$begintekst = $begintekst[0];
				}
			}
		else
			{
			// return false... met $begintekst kunnen we niets
			return false;
			}
		}
	
	
	// controleer of $zoekwoorden een array is
	if(!is_array($zoekwoorden))
		{
		// zo niet: exploden op komma/spatie
		if(strpos($zoekwoorden, ", ")){explode(", ",$zoekwoorden);}
		}
	// nogmaals controleren
	if(!is_array($zoekwoorden))
		{
		// return false... met $begintekst kunnen we niets
		return false;
		}	

	
	// alle zoekwoorden afgaan
	foreach ($zoekwoorden as $woord)
		{						
		// kijk hoeveel keer dit woord voor komt		
		preg_match_all("/$woord/i", $begintekst, $keren);

		// alle woorden vinden
		while($offset = strpos($begintekst, $woord, $offset + 1))
			{
			// tellers instellen
			$i++;
			$aantal = $i;
			
			// gegevens opslaan
			$posities[$i]['woord'] = $woord;
			$posities[$i]['lengte'] = strlen($woord);
			
			// zoeken naar eerste letter van dit woord
			$posities[$i]['woord_begin'] = $offset;
			
			// einde van dit woord berekenen
			$posities[$i]['woord_eind'] = $posities[$i]['woord_begin'] + $posities[$i]['lengte'];
			
			// begin van deze regel berekenen	
			$posities[$i]['zin_begin'] = $posities[$i]['woord_begin'] - $rondom; 
			if ($posities[$i]['zin_begin'] < $minimaal)				{$posities[$i]['zin_begin'] = $minimaal;}
			if ($posities[$i]['zin_begin'] < $beetje)				{$posities[$i]['zin_begin'] = $minimaal;}
	
			// eind van deze regel uitrekenen
			$posities[$i]['zin_eind'] = $posities[$i]['woord_eind'] + $rondom; 
			if ($posities[$i]['zin_eind'] > $maximaal)				{$posities[$i]['zin_eind'] = $maximaal;}
			if (($maximaal - $posities[$i]['zin_eind'])< $beetje)	{$posities[$i]['zin_eind'] = $maximaal;}
			}
		}

	// kijk of er resultaten zijn in $posties
	if (isset($posities))
		{
		//toon_array($posities);
	
		// de array $posities sorteren op volgorde
		usort($posities, "sort_key_eigen");
		
		// teller weer instellen op 1
		$i = 0;	
		
		// loop alle getallen af
		while($i <= $aantal - 1)
			{	
		//	echo "\$i is nu $i<br>";
			
			// deze zin uit de begintekst halen
			$temp = substr($begintekst, $posities[$i]['zin_begin'], ($posities[$i]['zin_eind'] - $posities[$i]['zin_begin']));
		
			// highlight de gezochte woorden met behulp van de functie
			$temp = highlight($temp, $zoekwoorden);
			
			// als er nog een zin is
			if (!empty($temp))
				{
				// als de zin met NIET op 0 begint: geen punten tonen
				if ($posities[$i]['zin_begin'] != 0)	{$tekst = $tekst . "...";}
				
				// tekst aanvullen met de nieuwe gegevens
				$tekst = $tekst . $temp;
				
				// als de zin met NIET op $maximaal stopt: geen punten tonen
				if ($posities[$i]['zin_eind'] != $maximaal)	{$tekst = $tekst . "...";}
				
				// sowieso een enter toevoegen
				$tekst = $tekst . "<br>";
				}
			
			
			// kijk of we het eind van het bericht al hebben berijkt (zo ja: $i met $aantal verhogen)
			if ($posities[$i]['zin_eind'] == $maximaal)
				{
				// volgende overslaan (stoppen dus)
				$extra = $aantal;
				}
			
			// kijk of het woord al een keer in deze zin staat
			if (strpos($temp, $posities[$i]['woord'], ($rondom+1)))
				{
				// volgende overslaan
				$extra = 0;
				}
			
			// teller verhogen
			$i = $i + 1 + $extra ;
			}
		}	
	
	// $tekst terugeven
	return $tekst;
	}

?>