PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
Copy Clear
Copy Format Clear
<?php /** * handelt zoek-opdrachten af */ class searchObject { /** * bevat array nodig voor API-request */ protected $search; /** * bevat array nodig voor API-request voor voorkeurslinks */ protected $bestbets; /** * bevat object wat wordt teruggegeven door API-request */ protected $result; /** * bevat object wat wordt teruggegeven door API-request voor voorkeurlinks */ protected $bbresult; /** * URL van de zoekmachine */ protected $serverURL; /** * URL van de zoek-API, afgeleid van serverURL */ protected $searchURL; /** * opties om bepaalde zaken aan of uit te zetten * - thumbnail: toont thumbnail ipv gegenereerd screenshot * - extraHitInfo: toont extra info bij een hit, oa relevantie-score * - totalCount: toont totaal aantal resultaten * - facetCount: toont per filter aantal resultaten dat voldoet aan filter * - orderable: toont volgorde opties */ protected $showExtras; protected $datumVanaf; protected $datumTot; protected $zonder; protected $PostTypeLabels = array( "post" => "Berichten", "page" => "Pagina's", "document" => "Documenten" ); //documentTypes die in documenten getoond moeten worden protected $documentTypes = array( 'PDF-document', 'Word-document', 'Spreadsheet', 'Presentatie', ); //hier stel je max aantal items op 1 pagina in public $aantItemsOpPagina = 10; public function __construct() { //sessie is nodig om pagina-variabelen door te geven (is nodig om een pagina op te vragen) session_start(); $bnn_mb_server = null; $bnn_mb_index = null; $bnn_mb_bestbets = null; //check of dit is een ontwikkel-omgeving is if( function_exists('bnn_get_network_option')) { $bnn_mb_server = bnn_get_network_option('bnn_mb_server'); $bnn_mb_index = bnn_get_network_option('bnn_mb_index'); $bnn_mb_bestbets = bnn_get_network_option('bnn_mb_bestbets'); } if( empty($bnn_mb_server)) { $bnn_mb_server = "https://vinden-intranet.belastingdienst.nl/"; } if( empty($bnn_mb_index)) { $bnn_mb_index = "Intranet"; } if( empty($bnn_mb_bestbets)) { $bnn_mb_bestbets = "bestbets"; } $bestbets_constraint = "fqcategory:\"BestBets:".$bnn_mb_bestbets."\""; $this->serverURL = $bnn_mb_server; $search_constraint = "fqcategory:\"Web:".$bnn_mb_index."\""; $this->searchURL = $this->serverURL."api/v2/search"; $identity = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; $this->search = array( "user" => array(), "count" => $this->aantItemsOpPagina, "content_sample_length" => 300, "sort_date_facets_by_value" => true, "exclude_available_properties_and_facets" => false, "orderby" => "mes:relevance", "order_direction" => "DESCENDING", "user_context" => array( "referer" => $identity, "locale" => "nl", "service_id" => $this->serverURL."api/v2/", "utc_time_zone_differential_in_seconds" => 3600, "service_url" => $this->searchURL ), "source_context" => array( "constraints" => array( "unparsed" => $search_constraint, "id" => "view_base" ) ) ); //Properties die in resultaat op te vragen moeten zijn. $this->addProp("title"); $this->addProp("content"); $this->addProp("documentType"); //lijkt nodig te zijn om filter beschikbaar te hebben. $this->addProp("Description"); $this->addProp("url"); $this->addProp("Last-Modified"); $this->addProp("mes:date"); $this->addProp("mes:size"); $this->addProp("actions", array( "VALUE", "PROPERTY" )); $this->addProp("mes:hitinfo:rank"); $this->addProp("mes:hitinfo:positioncount"); $this->addProp("mes:hitinfo:relevance:docboost"); //filters die gebruikt kunnen worden $this->addFacet('documentType'); $this->addFacet('contentsoort'); $this->addFacet('PostType'); $this->addFacet('dienstonderdeel'); $this->addFacet('intranetdeel'); $this->addFacet('intranetgebied'); $this->addFacet('sitenaam'); $this->addFacet('keywords'); $this->addFacet('wp_categorie'); $this->bestbets = array( "user" => array(), "count" => 1, "content_sample_length" => 300, "sort_date_facets_by_value" => true, "exclude_available_properties_and_facets" => false, "orderby" => "mes:relevance", "order_direction" => "DESCENDING", "user_context" => array( "referer" => $identity, "locale" => "nl", "service_id" => $this->serverURL."api/v2/", "utc_time_zone_differential_in_seconds" => 3600, "service_url" => $this->searchURL ), "source_context" => array( "constraints" => array( "unparsed" => $bestbets_constraint, "id" => "view_base" ) ) ); $this->addProp("MatchType",array("HTML"),true); $this->addProp("Description",array("HTML"),true); $this->addProp("OrganisationalUnitName",array("HTML"),true); $this->addProp("OrganizationName",array("HTML"),true); $this->addProp("SearchTerm",array("HTML"),true); $this->addProp("title",array("HTML"),true); $this->addProp("URL",array("HTML"),true); $this->addProp("mes:date",array("HTML"),true); $this->result = NULL; $this->bb_result = NULL; $this->showExtras = array( "extraHitInfo" => false, ); $this->setParameters(); } /** * leest parameters in die via GET binnenkomen */ protected function setParameters () { if( isset($_REQUEST['s']) ) { $this->setTerms($_REQUEST['s']); }; if( isset($_REQUEST['exact']) ) { $this->setExact($_REQUEST['exact']); }; if( isset($_REQUEST['zonder']) ) { $this->setExclude($_REQUEST['zonder']); }; if( isset($_REQUEST['datumvanaf']) || isset($_REQUEST['datumtot'])) { $this->setDaterange($_REQUEST['datumvanaf'], $_REQUEST['datumtot']); }; if( isset($_REQUEST['tijdvak']) ) { //als filter gevuld is, voor alles behalve waarde 'alles' beperking instellen $this->setTijdvak($_REQUEST['tijdvak']); } else { //als filter niet gevuld is, beperking instellen $this->setTijdvak(); }; //Alleen als er gezocht wordt met zoektermen, dan filters toepassen if( isset($_REQUEST['s']) || isset($_REQUEST['exact']) ) { $this->setFilter('documentType'); $this->setFilter('dienstonderdeel'); $this->setFilter('intranetdeel'); $this->setFilter('intranetgebied'); $this->setFilter('sitenaam'); $this->setFilter('wp_categorie'); $this->setFilter('keywords'); $this->setSingleFilter('PostType'); if( isset( $_REQUEST['orderby'] ) ) { $this->setOrder($_REQUEST['orderby'], 'DESCENDING' ); }; $this->setPagingState(); } } /** * voegt facet toe aan zoekopdracht */ private function addFacet ($name, $formats = array("HTML") ) { if (!isset($this->search['facets'])) { $this->search['facets'] = array(); }; $newFacet = array( "name" => $name, "formats" => $formats ); $this->search['facets'][] = $newFacet; } /** * voegt property toe aan zoekopdracht */ private function addProp ($name, $formats = array("HTML"), $isForBestBets = false ) { if ( $isForBestBets ) { if ( !isset($this->bestbets['properties']) ) { $this->bestbets['properties'] = array(); }; } else { if ( !isset($this->search['properties']) ) { $this->search['properties'] = array(); }; } $newProp = array( "name" => $name, "formats" => $formats ); if ( $isForBestBets ) { $this->bestbets['properties'][] = $newProp; } else { $this->search['properties'][] = $newProp; } } /** * zet filter aan */ protected function setFilter($label) { //als er filters zijn if( isset( $_REQUEST[$label]) ) { $filter_base = array(); // voor elk filter-item foreach($_REQUEST[$label] as $filter_item ) { $filter_base[] = $this->setConstraint($label,$filter_item); }; //filter toevoegen aan constraint, als deze gevuld is if(count($filter_base)>0) { $this->search['user']["constraints"][] = array("label"=>$label, "filter_base" => $filter_base); } }; } /** * zet single filter aan */ protected function setSingleFilter($label) { //als er gefilterd moet worden voor PostType if( isset( $_REQUEST[$label]) ) { //als filter PostType is en filter_item document is, dan apart filter gebruiken. if( $label == 'PostType' && $_REQUEST[$label] == 'document' ) { $filter_base = array(); //filter opbouwen voor documentType foreach ($this->documentTypes as $documentType) { $filter_base[] = $this->setConstraint('documentType',$documentType); } //filter toevoegen aan constraint $this->search['user']["constraints"][] = array("label"=>'documentType', "filter_base" => $filter_base); } else { $filter_base = array(); //filter opbouwen $filter_base[] = $this->setConstraint($label,$_REQUEST[$label]); //filter toevoegen aan constraint $this->search['user']["constraints"][] = array("label"=>$label, "filter_base" => $filter_base); } }; } /** * zorgt voor het maken van de juiste info voor een constraint */ private function setConstraint($label = null, $item = null ) { if(isset($label) && isset($item) ) { $constraint = array( "label" => $label, "regex" => '^\\Q'.$item.'\\E$', "description" => htmlentities($item), "id" => $item, "value" => array ( "str" => $item ), array( "str" => $item) ); return $constraint; } } /** * vult zoekterm in */ protected function setTerms ($value = "") { if(strlen($value)>0) { $this->addRestriction( array( "unparsed" => stripslashes($value) ) ); $this->bestbets['user']['query']["unparsed"] = stripslashes($value); } } /** * vult zoekterm in */ protected function setExact ($value = "") { if(strlen($value)>0) { $this->addRestriction(array( "unparsed" => "\"".stripslashes($value)."\"" ) ); $this->bestbets['user']['query']["unparsed"] = stripslashes($value); } } /** * vult constraint in voor uitgesloten woorden */ protected function setExclude ($value = "") { if(strlen($value)>0) { $this->addRestriction(array( "unparsed" => "NOT ".stripslashes($value) ) ); $this->bestbets['user']['query']["unparsed"] .= " NOT ".stripslashes($value); } } /** * vult constraint in voor datumbereik */ protected function setDaterange ($datumvanaf = "", $datumtot = "") { $datumrange = "mes:date:["; if(strlen($datumvanaf)>0) { if(strlen($datumtot)>0) { //vanaf & tot $datumrange .= $datumvanaf." TO ".$datumtot."]"; } else { //vanaf $datumrange .= $datumvanaf." TO ]"; } } else { if(strlen($datumtot)>0) { //tot $datumrange .= " TO ".$datumtot."]"; } else { //geen $datumrange = ""; } } if(strlen($datumrange)>0) { $this->addRestriction( array( "unparsed" => $datumrange ) ); } } /** * vult constraint in voor recente resultaten */ protected function setTijdvak ($tijdvak = 'recent') { switch ($tijdvak) { case 'alles': //geen restrictie toevoegen break; case 'recent': default: $filter_range_in_seconds = 1*365*24*60*60; //1 jaar $vanafdatum = date("Y-m-d", time() - $filter_range_in_seconds); $this->addRestriction( array( "unparsed" => "mes:date:[".$vanafdatum." TO ] OR wijzigingsDatum:[".$vanafdatum." TO ]" ) ); break; } } /** * breidt zoekopdracht uit met restrictie * $restriction is een array in de vorm van: * array( 'unparsed' => '<zoekopdracht>') */ private function addRestriction ($restriction) { if(isset($this->search['user']['query'])) { if(isset($this->search['user']['query']['unparsed'])) { //enkele opdracht $this->search['user']['query'] = array( "and" => array( $this->search['user']['query'], $restriction ) ); } else { if(isset($this->search['user']['query']['and'])) { //meervoudige opdracht $this->search['user']['query']['and'][] = $restriction; } else { //onbekend } } } else { //nog geen zoekopdracht $this->search['user']['query']['and'][] = $restriction; } } /** * zet paging_stage in api-json */ protected function setPagingState() { if( isset($_REQUEST['direction']) && $_REQUEST['direction'] == 'NEXT' ) { if( isset($_SESSION['paging_state'])) { $this->search['paging_states'] = array( $_SESSION['paging_state'] ); $this->search["paging"] = array( "direction" => "NEXT" ); } } } /** * geeft volgorde aan waarin resultaten getoond worden */ protected function setOrder($orderby = "mes:relevance", $direction = 'DESCENDING') { $this->search['orderby'] = $orderby; $this->search['order_direction'] = $direction; } /** * toont filterlijst voor gevraagd filter */ public function showFacet($facetName = NULL) { $koppen = array( "dienstonderdeel" => "Dienstonderdeel", "intranetdeel" => "Deel van intranet", "intranetgebied" => "Deel van intranet", "sitenaam" => "Onderwerp", "documentType" => "Soort bestand", "wp_categorie" => "Soort nieuws" ); $uitvoer = ""; if( isset($this->result->facets)) { foreach ($this->result->facets as $facet) { if( $facetName == $facet->id) { $uitvoer .= '<div class="filterblok" id="filter_'.$facetName.'" style="display:none;">'; $uitvoer .= '<h4 class="inklapbaar" role="button" aria-expanded="true" aria-controls="control_'.$facetName.'" tabindex="0" data-count="'.$this->result->estimated_count.'">'.$koppen[$facetName].'</h4>'; $uitvoer .= '<div class="filter" id="control_'.$facetName.'"><ul class="nav flex-column">'; foreach($facet->entries as $fentry) { //WCI-3630 alleen tonen documentTypes als PostType op document staat. if( isset($_REQUEST['PostType']) && $_REQUEST['PostType'] == 'document' && $facetName == 'documentType' && !in_array($fentry->html, $this->documentTypes) ) { continue; } //elke checkbox op checked zetten als de filter is aangezet $checked = ( isset($_REQUEST[$facetName]) && in_array($fentry->query_expr->id, $_REQUEST[$facetName]) ); if($fentry->count > 0 ) { $label = $fentry->html." (".$fentry->count.")"; } else { $label = $fentry->html; } $htmlid = $facet->id.'['.$fentry->html.']'; $uitvoer .= '<li> <input type="checkbox" name="'.$htmlid.'" id="'.$htmlid.'" data-count="'.$fentry->count.'" value="'.$fentry->html.'" '.($checked?" checked='checked'":"").' /> <label class="checkbox" for="'.$htmlid.'"> '.$label.' </label> </li>'; }; if($facet->distinct_value_count > count($facet->entries) ) { //als er meer items zijn getoond, dan input veld tonen om suggesties te doen $uitvoer .= "<li><input class='filter_suggest' id='filterfilter_".$facetName."' data-filter='".$facetName."' name='filterfilter_".$facetName."' placeholder='meer..' type='text' /></li>"; } $uitvoer .= '</ul></div></div>'; }; }; }; return $uitvoer; } /** * toont filterlijst voor PostType als tabs */ public function showFacetAsTabs() { $postTypes = array( "post" => "Berichten", "page" => "Pagina's", "document" => 'Documenten' ); $facetName = "PostType"; $uitvoer = '<div class="filter" id="filter_PostType"><ul class="nav">'; //'alles'-filter aanzetten als: // - individuele checkboxes niet gevuld zijn $checked = !isset($_REQUEST[$facetName]); $url = $this->getURLQuery(array($facetName=>NULL)); $uitvoer .= '<li'.($checked?' class="current"':'').'> <a href="'.$url.'">Alles</a> </li>'; $hidden = ""; foreach($postTypes as $filter_item => $label) { //checkbox op checked zetten als: // - als de filter expliciet is aangezet $checked = false; if(isset($_REQUEST[$facetName])) { $checked = ($filter_item == $_REQUEST[$facetName]); if($checked) { //hidden veld toevoegen om keuze mee te geven als ander filter wordt gekozen $hidden = "<input type='hidden' name='".$facetName."' value='".$filter_item."' />"; } }; $url = $this->getURLQuery(array($facetName=>$filter_item)); $uitvoer .= '<li'.($checked?' class="current"':'').'> <a href="'.$url.'">'.$label.'</a> </li>'; }; $uitvoer .= '</ul></div>'; $uitvoer .= $hidden; return $uitvoer; } /** * Toont filter voor recente resultaten */ protected function showRecentFilter() { $uitvoer = '<div class="filterblok" id="filter_tijdvak" style="display:none;">'; $uitvoer .= '<h4 class="inklapbaar" tabindex="0">Publicatieperiode</h4>'; $uitvoer .= '<div class="filter"><ul class="radiogroup">'; $selected = ( isset($_REQUEST['tijdvak']) && $_REQUEST['tijdvak'] == 'alles' ); $uitvoer .= "<li ><input type='radio' name='tijdvak' id='tijdvak_recent' value='recent'".(!$selected?" checked='checked'":"")."><label for='tijdvak_recent'>Tot een jaar terug</label></li>"; $uitvoer .= "<li ><input type='radio' name='tijdvak' id='tijdvak_alles' value='alles'".($selected?" checked='checked'":"")."><label for='tijdvak_alles'>Gehele periode</label></li>"; $uitvoer .= '</ul></div></div>'; return $uitvoer; } protected function showGekozenFilters() { $filters = array( "dienstonderdeel" => "Dienstonderdeel", "documentType" => "Soort bestand", "wp_categorie" => "Soort nieuws" ); $uitvoer = ""; foreach ($filters as $filter => $label) { if( isset( $_REQUEST[$filter] ) && is_array( $_REQUEST[$filter] ) && !empty( $_REQUEST[$filter] ) ) { foreach ($_REQUEST[$filter] as $fkey => $fvalue) { $filter_array = $_REQUEST[$filter]; unset($filter_array[$fkey]); $url = $this->getURLQuery(array($filter=>$filter_array)); $uitvoer .= "<li><a class='gekozen_filter' title='".$label."' href='".$url."'>".$fvalue."</></li>"; } } } if( strlen($uitvoer) > 0 ) { foreach ($filters as $filter => $label) { $reset_filter[$filter] = NULL; } $url = $this->getURLQuery($reset_filter); $uitvoer = "<div class='verwijder_filter'><h4>Ingestelde Filters</h4><ul>".$uitvoer."</ul><a id='verwijder_filters' class='button' href='".$url."'>Verwijder alle filters</a></div>"; }; return $uitvoer; } /** * maakt query gedeelte van url aan */ protected function getURLQuery( $newArgs = NULL ) { //bestaande waarden ophalen foreach($_REQUEST as $name => $value) { $lijst[$name] = $value; }; //kijken of er nieuwe waarden zijn if(is_array($newArgs)) { foreach ($newArgs as $newName => $newValue) { if( isset($newValue) ) { $lijst[$newName] = $newValue; } else { unset($lijst[$newName]); }; }; }; //query opbouwen $query = "?"; foreach($lijst as $name => $value) { if(is_array($value)) { foreach ($value as $subValue) { $query .= $name.'%5B%5D='.urlencode(stripslashes($subValue)).'&'; }; } else { //BUGFIX uitzondering toevoegen voor parameter 's', zodat zoekpagina altijd getoond word if( strlen($value)>0 || ( $name == 's') ) { $query .= $name.'='.urlencode(stripslashes($value)).'&'; } } }; $query = rtrim($query,"&"); return $query; } /** * maakt filterlijsten in de sidebar */ public function showSidebar() { $uitvoer = ''; $uitvoer .= $this->showGekozenFilters(); $uitvoer .= '<div id="filter_toggle" class="button">'; $uitvoer .= '<a>Filter & sorteer</a>'; $uitvoer .= '</div>'; $uitvoer .= '<div id="filters">'; $uitvoer .= '<h3 style="display:none;">Filter & sorteer</h3>'; $uitvoer .= $this->showFacet('dienstonderdeel'); $uitvoer .= $this->showFacet('wp_categorie'); $uitvoer .= $this->showFacet('documentType'); $uitvoer .= $this->showRecentFilter(); $uitvoer .= '</div>'; return $uitvoer; } public function showForm($basic = true) { if($basic) { return $this->showBasicForm(); } else { return $this->showAdvancedForm(); } } /** * maakt zoekformulier, met filter voor contentsoort, aan */ public function showBasicForm() { $zoekterm = htmlentities(stripslashes($_REQUEST['s'])); $checked = false; $uitvoer = ' <div class="navbar navbar-inverse basicsearch zoekformulier"> <div class="row"> <div class="col-sm-9 zoekicoon" id="zoekveld"> <div class="input"><input name="s" id="s" value="'.$zoekterm.'" autocomplete="off" type="search" placeholder="Zoek..." class="deletable" /></div> <input type="submit" name="zoek" id="zoek" value="Zoeken" class="mb-startSearchButton" /> </div> <div class="col-sm-3"> </div> </div>'; $uitvoer .= '<div class="row"> <div class="col-sm-9" id="suggestions"> </div> </div>'; $uitvoer .= '<div class="row"> <div class="col-sm-9" id="linksrow"> <ul id="searchlinks">'; $uitvoer .= ' <li><a class="toggleSearch" tabindex="0" title="Geavanceerd zoeken">Geavanceerd zoeken</a></li> <li><a href="https://intranet.belastingdienst.nl/over-intranet1/voorbeeld-site/hulp-bij-zoeken" taget="_blank" title="Hulp bij zoeken">Hulp bij zoeken</a></li> </ul> </div> <div class="col-sm-3"> </div> </div>'; $uitvoer .= '<div class="row"> <div class="col-sm-9" id="contentsoort_tabs">'; $uitvoer .= $this->showFacetAsTabs(); $uitvoer .= '</div> <div class="col-sm-3"> </div> </div>'; $uitvoer .= '</div>'; return $uitvoer; } /** * maakt geavanceerd zoekformulier, met filter voor contentsoort, aan */ public function showAdvancedForm() { $zoekterm = htmlentities(stripslashes($_REQUEST['s'])); if(isset($_REQUEST['exact'])){ $exact = htmlentities(stripslashes($_REQUEST['exact'])); }else{ $exact = ''; } if(isset($_REQUEST['zonder'])){ $zonder = htmlentities(stripslashes($_REQUEST['zonder'])); }else{ $zonder = ''; } if(isset($_REQUEST['datumvanaf'])){ $datumvanaf = htmlentities(stripslashes($_REQUEST['datumvanaf'])); }else{ $datumvanaf = ''; } if(isset($_REQUEST['datumtot'])){ $datumtot = htmlentities(stripslashes($_REQUEST['datumtot'])); }else{ $datumtot = ''; } $checked = false; $uitvoer = ' <div class="navbar navbar-inverse advancedsearch zoekformulier"> <div class="row"> <div class="col-sm-9"> <h2>Geavanceerd zoeken</h2> </div> <div class="col-sm-3"> </div> </div> <div class="row"> <div class="col-sm-9 zoekicoon"> <label for="s"> <h5>Zoekwoord(en)</h5> <div class="input"> <input name="s" id="s" value="'.$zoekterm.'" autocomplete="off" type="search" placeholder="Zoek..." class="deletable" /> </div> </label> <label for="exact"> <h5>Exacte groep woord(en)</h5> <div class="input"> <input name="exact" id="exact" value="'.$exact.'" autocomplete="off" type="search" placeholder="Zoek... (op exacte combinatie)" class="deletable" /> </div> </label> <label for="zonder"> <h5>Zonder de woord(en)</h5> <div class="input"> <input name="zonder" id="exact" value="'.$zonder.'" autocomplete="off" type="search" placeholder="Zoek... (zonder deze woorden)" class="deletable" /> </div> </label> <div id="datumbereik"> <div> <label for="datumvanaf"><h5>Vanaf</h5> <div class="input"> <input name="datumvanaf" id="datumvanaf" value="'.$datumvanaf.'" autocomplete="off" type="text" placeholder="jjjj-mm-dd" /> </div> </label> </div> <div> <label for="datumtot"><h5>Tot</h5> <div class="input"> <input name="datumtot" id="datumtot" value="'.$datumtot.'" autocomplete="off" type="text" placeholder="jjjj-mm-dd" /> </div> </label> </div> </div> </div> <div class="col-sm-3"> </div> </div> <div class="row"> <div class="col-sm-9" id="searchbuttons"> <a class="button" tabindex="0" id="zoekknop"><span>Zoeken</span></a> <a class="button toggleSearch" tabindex="0" id="annuleer">Annuleer</a> </div> <div class="col-sm-3"> </div> </div>'; $uitvoer .= '<div class="row"> <div class="col-sm-9" id="suggestions"> </div> </div>'; $uitvoer .= '<div class="row"> <div class="col-sm-9" id="contentsoort_tabs">'; $uitvoer .= $this->showFacetAsTabs(); $uitvoer .= '</div> <div class="col-sm-3"> </div> </div>'; $uitvoer .= '</div>'; return $uitvoer; } protected function showOrderItem($order, $isMobiel = false) { $uitvoer = ""; $selected = ( isset( $_REQUEST['orderby'] ) && $_REQUEST['orderby'] == $order->name ) || ( !isset( $_REQUEST['orderby'] ) && $this->search['orderby'] == $order->name ); if($isMobiel) { $uitvoer .= "<label tabindex=0><input type='radio' name='orderby' value='".$order->name."'".($selected?" checked='checked'":"")."><span>".$order->localized_name."</span></label>"; } else { $uitvoer .= "<option value='".$order->name."'".($selected?" selected='selected'":"").">".$order->localized_name."</option>"; } return $uitvoer; } /** * maakt lijst voor volgorde keuze aan */ public function showOrderable($isMobiel = false) { $uitvoer = ""; if(isset($this->result->resultset->results)) { if($isMobiel) { $uitvoer .= "<div id='ordermobiel' class='order' style='display:none'><div class='radiogroup'>"; } else { $uitvoer .= "<div id='orderdesktop' class='order'><label class='dropdown' for='orderby'>Sorteer op: <select id='orderby' name='orderby'>"; } $items = array(); foreach ($this->result->orderable as $order) { if($order->name == "mes:relevance") { $items[] = $this->showOrderItem($order, $isMobiel); }; if($order->name == "mes:date") { $items[] = $this->showOrderItem($order, $isMobiel); }; } $uitvoer .= implode(" ", $items); if($isMobiel) { $uitvoer .= '</div></div>'; } else { $uitvoer .= '</select></label></div>'; } } return $uitvoer; } /** * maakt lijst met resultaten aan voor de huidige pagina */ public function showResults() { $uitvoer = ''; if(isset($this->result->resultset->results)) { foreach($this->result->resultset->results as $hit) { $properties = NULL; foreach ($hit->properties as $prop) { if( isset($prop->data[0]->html) ) { $properties[$prop->name] = $prop->data[0]->html; } if($prop->name == 'Acties') { $properties[$prop->name] = $prop->data[0]->value->href; } }; $properties['relevance_score'] = $hit->relevance_score; $uitvoer .= $this->showResultItem( $properties ); }; if($this->result->estimated_count>$this->aantItemsOpPagina){ $uitvoer .= ' <div class="paginatie results-pager"> <a id="scroll_results" tabindex="0">Toon meer</a> </div>'; }; } else { $uitvoer .= ''; if( $this->result === false ) { //foutmelding tonen als de zoekmachine niet bereikbaar is $uitvoer .= "<p>De zoekmachine is niet bereikbaar.</p>"; } else { if(isset($this->result->estimated_count)) { //instructietekst tonen als er geen geen resultaten zijn $uitvoer .= apply_filters( 'the_content', get_site_option('nts_text') ); }; } }; $uitvoer .= ''; return $uitvoer; } /** * maakt lijst met resultaten aan voor de huidige pagina */ public function showJSONResults() { $uitvoer = ''; if(isset($this->result->resultset->results)) { foreach($this->result->resultset->results as $hit) { $properties = NULL; foreach ($hit->properties as $prop) { if( isset($prop->data[0]->html) ) { $properties[$prop->name] = $prop->data[0]->html; } if($prop->name == 'Acties') { $properties[$prop->name] = $prop->data[0]->value->href; } }; $properties['relevance_score'] = $hit->relevance_score; $uitvoer .= $this->showResultItem( $properties ); }; } else { $uitvoer .= ''; }; return $uitvoer; } /** * maakt lijst met voorkeurlinks */ public function showBestBets () { $uitvoer = ""; if(isset($this->bbresult->resultset->results)) { $uitvoer = '<div id="voorkeurlinks">'; foreach($this->bbresult->resultset->results as $hit) { $properties = NULL; foreach ($hit->properties as $prop) { $properties[$prop->name] = $prop->data[0]->html; }; $properties['relevance_score'] = $hit->relevance_score; $uitvoer .= $this->showBestBetItem( $properties ); }; $uitvoer .= '</div>'; }; return $uitvoer; } /** * maakt individueel zoekresultaat aan */ protected function showBestBetItem($p = NULL) { $uitvoer = ""; if(isset($p)) { $uitvoer .= '<div class="voorkeurlink resultaat">'; $uitvoer .= '<h3><a href="'.strip_tags($p['URL']).'" target="_self">'.$p['Titel'].'</a><span style=""><svg width="21px" height="33px" viewBox="0 0 21 33" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="Ontwerp" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="aanbevolen" transform="translate(-879.000000, -543.000000)" fill="#B4B4B4"> <g id="results_all" transform="translate(224.000000, 473.000000)"> <g id="recommended" transform="translate(11.000000, 70.000000)"> <g id="link"> <polygon id="lint" transform="translate(654.500000, 16.181151) rotate(-180.000000) translate(-654.500000, -16.181151) " points="654.5 5.75001703 665 0.181151334 665 32.1811513 644 32.1811513 644 0.181151334"></polygon> </g> </g> </g> </g> </g> </svg><br />Aanbevolen link</span></h3>'; if( isset($p['Description']) != "" ) { $omschrijving = preg_replace('/'.$_REQUEST['s'].'/i', '<em>$0</em>', $p['Description']); } else { $omschrijving = ''; } $uitvoer .= '<div class="omschrijving">'.$omschrijving.'</div>'; $uitvoer .= '<div class="url"><a class="hyperlink" href="'.strip_tags($p['URL']).'" target="_self" style="word-break: break-word;">'.$p['URL'].'</a></div>'; $uitvoer .= '</div>'; }; $uitvoer .= ""; return $uitvoer; } /** * maakt individueel zoekresultaat aan */ protected function showResultItem($p = NULL) { $uitvoer = ""; $url = strip_tags($p['Acties']); if(isset($p)) { $uitvoer .= '<div class="resultaat">'; $uitvoer .= '<h3><a href="'.$url.'" target="_self">'.$p['Title'].'</a></h3>'; if(isset($p['Datum'])) { $date = date_create_from_format('j-n-y H:i', $p['Datum']); $omschrijving = '<span class="mesDatum">'.date_format($date, 'd-m-Y').'</span> | '; } else { $omschrijving = ""; } if( isset($p['Description']) != "" ) { $omschrijving .= $p['Description']; } else { if(isset($p['content'])) { $omschrijving .= $p['content']; } else { $omschrijving .= ''; } } $uitvoer .= '<div class="omschrijving">'.$omschrijving.'</div>'; if( $this->showExtras["extraHitInfo"]) { $relevance = (isset($p['relevance_score']))?'<span class="relevance_score">'.$p['relevance_score'].'</span>':""; $lastModified = (isset($p['Last-Modified']))?'<span class="lastModified">'.date("Ymd His",strtotime($p['Last-Modified'])).'</span>':""; $mesdate = (isset($p['Datum']))?'<span class="mesDatum">'.date("Ymd His",strtotime($p['Datum'])).'</span>':""; $uitvoer .= '<div class="info">'.$relevance.' '.$lastModified.' '.$mesdate.'</div>'; } $adres_onderdelen = explode("/",$url); $laatste_onderdeel = array_pop($adres_onderdelen); if( $laatste_onderdeel == '' ) { //als adres eindigt op '/', dan een na laatste ophalen en '/' er achter plakken $laatste_onderdeel = array_pop($adres_onderdelen); $laatste_onderdeel .= "/"; }; $adres = implode("/",$adres_onderdelen); $adres .= "<span class='laatstedeel'>/".$laatste_onderdeel."</span>"; $uitvoer .= '<div class="url"><a class="hyperlink" href="'.$url.'" target="_self" style="word-break: break-word;">'.$adres.'</a></div>'; $uitvoer .= '</div>'; }; $uitvoer .= ""; return $uitvoer; } /** * maakt weergave van aantal resultaten aan */ public function showEstimatedCount() { $searchIn="Alles"; if(isset($this->result->estimated_count)) { $searchword = !empty($_REQUEST['s'])?htmlentities(stripslashes($_REQUEST['s'])):""; $searchIn = !empty($_REQUEST['PostType'])?$this->PostTypeLabels[$_REQUEST['PostType']]:"Alles"; return "<div id='aantal_resultaten' data-count='".$this->result->estimated_count."'>Er zijn ".$this->result->estimated_count." resultaten met '" .$searchword. "' gevonden in: " .$searchIn. " </div>"; }; } /** * */ public function showAlternatives() { $uitvoer = ""; if( isset($this->result) ) { if( isset($this->result->alternatives) && $this->result->show_query_spelling_alternatives ) { $uitvoer .= "<div id='alternatieven'>Bedoelde je: "; foreach ($this->result->alternatives as $alternative) { foreach ($alternative->entries as $entry) { preg_match_all( "/<em>(.*?)<\/em>/", $entry->html, $matches ); $label = isset( $matches[1][0] ) ? $matches[1][0] : ''; $uitvoer .= "<a href='".$this->getURLQuery(array("s" => $label ))."'><strong>".$label."</strong></a>"; } } $uitvoer .= "</div>"; } } return $uitvoer; } /** * voert zoek-opdracht uit */ public function executeSearch () { if( ( ( isset($_REQUEST['s']) && strlen($_REQUEST['s']) > 0 ) || ( isset($_REQUEST['exact']) && strlen($_REQUEST['exact']) > 0 ) ) && !isset($_REQUEST['nothing']) ) { //reguliere zoekresultaten $jsonString = json_encode($this->search); //echo "<br />\n<br />\n"; $ch = curl_init($this->searchURL); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonString)) ); $resultaat = curl_exec($ch); //echo "<br />\n<br />\n"; $this->result = json_decode($resultaat); //bestbets zoekresultaten $jsonString = json_encode($this->bestbets); $ch = curl_init($this->searchURL); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonString)) ); $resultaat = curl_exec($ch); $this->bbresult = json_decode($resultaat); }; if(isset($this->result)) { if(isset($this->result->resultset)) { if(isset($this->result->resultset->per_service_dataset)) { if(isset($this->result->resultset->per_service_dataset[0]->paging_state)) { $_SESSION['paging_state'] = $this->result->resultset->per_service_dataset[0]->paging_state; } } } } } } ?>
Show:  
Copy Clear