public function testKeepCustomParameters() { $query = AfsQuery::create_from_parameters(array("query" => "topic", "mycustomparameter" => "mycustomvalue")); $curlConnector = new SAI_CurlStub(); $mockBaseUrl = "localhost"; $aboutRequestOpts = array(CURLOPT_URL => "http://{$mockBaseUrl}/bo-ws/about"); $aboutResponse = <<<JSON { "x:type":"ws.response", "query":{ "x:type":"ws.response.query", "parameters":{ "x:type":"collection", "x:values":[ ] }, "properties":{ "x:type":"x:dynamic" } }, "result":{ "x:type":"bows.about", "boWsVersion":{ "x:type":"AfsVersion", "build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e", "gen":"7.6", "major":"4", "minor":"0", "motto":"Pink Dolphin" }, "copyright":"Copyright (C) 1999-2013 Antidot" } } JSON; $response = <<<JSON {"header":{"query":{"userId":"user_5354ec142aa12","sessionId":"session_5354ec142aa4b","date":"2014-04-21T13:41:10+0200", "queryParam":[{"name":"afs:service","value":"71003"},{"name":"afs:status","value":"beta"},{"name":"afs:query","value":"topic"}, {"name":"afs:query@Book","value":"topic"},{"name":"afs:query@Topic","value":"topic"}, {"name":"afs:query@spellcheck","value":"topic"},{"name":"afs:output","value":"json,2"},{"name":"afs:output@Book","value":"json,2"}, {"name":"afs:output@Topic","value":"json,2"},{"name":"afs:output@spellcheck","value":"json,2"},{"name":"mycustomparameter","value":"mycustomvalue"}, {"name":"mycustomparameter@Book","value":"mycustomvalue"},{"name":"mycustomparameter@Topic","value":"mycustomvalue"}, {"name":"mycustomparameter@spellcheck","value":"mycustomvalue"},{"name":"afs:replies","value":"10"}, {"name":"afs:replies@Book","value":"10"},{"name":"afs:replies@Topic","value":"10"},{"name":"afs:replies@spellcheck", "value":"10"}],"mainCtx":{"textQuery":"topic"},"textQuery":"topic"},"user":{"requestMethod":"GET","agent":"Mozilla 5.0", "address":"127.0.0.1","output":{"format":"JSON","encoding":"gzip","charset":"UTF-8"}},"performance":{"durationMs":11},"info":{}}, "replySet":[{"meta":{"uri":"Book","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1, "durationMs":1,"firstPaFId":147,"lastPaFId":147,"producer":"SEARCH"}, "facets":{"facet":[{"afs:t":"FacetTree","node":[{"key":"urn:dita:single_topic.ditamap", "labels":[{"lang":"EN","label":"urn:dita:single_topic.ditamap"},{"lang":"FR","label":"urn:dita:single_topic.ditamap"}], "items":1}],"layout":"TREE","type":"STRING","id":"BaseUri","labels":[{"lang":"EN","label":"BaseUri"}, {"lang":"FR","label":"BaseUri"}]},{"afs:t":"FacetTree","node":[{"key":"noditaval","labels":[{"lang":"EN","label":"noditaval"}, {"lang":"FR","label":"noditaval"}],"items":1}],"layout":"TREE","type":"STRING","id":"Ditaval", "labels":[{"lang":"EN","label":"Ditaval"},{"lang":"FR","label":"Ditaval"}]},{"afs:t":"FacetTree", "node":[{"key":"en","labels":[{"label":"English"}],"items":1}],"layout":"TREE","type":"STRING","id":"afs:lang", "labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":3,"uri":"urn:dita:single_topic.ditamap", "title":[{"afs:t":"KwicString","text":"Single "},{"afs:t":"KwicMatch","match":"Topic"}, {"afs:t":"KwicString","text":" Map"}],"relevance":{"rank":1},"layerReplies":{"reply":[{"layer":"USER_1", "reply":{"docId":3,"uri":"","clientData":[{"contents":{"meta":[],"label":"Single Topic Map","ditaval":"noditaval", "uri":"urn:dita:single_topic.ditamap"},"id":"ditaval","mimeType":"application\\/json"}]}}]}}]}}, {"meta":{"uri":"Topic","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1,"durationMs":2, "firstPaFId":147,"lastPaFId":147,"producer":"SEARCH"},"facets":{"facet":[{"afs:t":"FacetTree", "node":[{"key":"others","labels":[{"lang":"EN","label":"others"},{"lang":"FR","label":"others"}],"items":1}], "layout":"TREE","type":"STRING","id":"Audience","labels":[{"lang":"EN","label":"Audience"},{"lang":"FR","label":"Audience"}]}, {"afs:t":"FacetTree","node":[{"key":"Single Topic Map","labels":[{"lang":"EN","label":"Single Topic Map"}, {"lang":"FR","label":"Single Topic Map"}],"items":1}],"layout":"TREE","type":"STRING","id":"Filter_By_Docs", "labels":[{"lang":"EN","label":"Filter by Documents"},{"lang":"FR","label":"Filtrer par Documents"}]}, {"afs:t":"FacetTree","node":[{"key":"en","labels":[{"label":"English"}],"items":1}],"layout":"TREE","type":"STRING", "id":"afs:lang","labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":2,"uri":"urn:dita:single_topic.dita", "title":[{"afs:t":"KwicString","text":"Titre du "},{"afs:t":"KwicMatch","match":"topic"}, {"afs:t":"KwicString","text":" unique"}],"abstract":[{"afs:t":"KwicString","text":"Ce "}, {"afs:t":"KwicMatch","match":"topic"},{"afs:t":"KwicString","text":" est seul dans sa ditamap et ceci devrait apparaitre dans le résumé."}], "relevance":{"rank":1},"layerReplies":{"reply":[{"layer":"USER_2","reply":{"docId":2,"uri":"", "clientData":[{"contents":{"book":{"uri":"urn:dita:single_topic.ditamap","label":"Single Topic Map"}, "topics":[{"uri":"urn:dita:single_topic.dita","label":"Titre du topic unique"}],"ditaval":"noditaval"}, "id":"breadcrumb","mimeType":"application\\/json"}]}}]}}]}}]} JSON; //Set BO response for AboutConnector $curlConnector->setResponse($aboutResponse, $aboutRequestOpts); //Set response for query $curlConnector->setResponse($response); $search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector); $search->set_query($query); $coder = new AfsQueryCoder(); $search->set_query_coder($coder); $helper = $search->execute($query); $replysetHelper = $helper->get_replyset("Book"); $facetHelpers = $replysetHelper->get_facets(); //Make sure each link of facets contains custom parameter foreach ($facetHelpers as $facetHelper) { foreach ($facetHelper->get_elements() as $facetValueHelper) { $this->assertEquals(1, preg_match("/[&\\?]mycustomparameter=mycustomvalue[&\$]/", $facetValueHelper->link)); } } $this->assertEquals("mycustomvalue", $helper->get_query_parameter("mycustomparameter")); }
/** * @expectedException Exception */ public function testNotOrchestratedRequest() { $query = AfsQuery::create_from_parameters(array("query" => "topic", "mycustomparameter" => "mycustomvalue")); $curlConnector = new SAI_CurlStub(); $mockBaseUrl = "localhost"; $aboutRequestOpts = array(CURLOPT_URL => "http://{$mockBaseUrl}/bo-ws/about"); $aboutResponse = <<<JSON { "x:type":"ws.response", "query":{ "x:type":"ws.response.query", "parameters":{ "x:type":"collection", "x:values":[ ] }, "properties":{ "x:type":"x:dynamic" } }, "result":{ "x:type":"bows.about", "boWsVersion":{ "x:type":"AfsVersion", "build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e", "gen":"7.6", "major":"4", "minor":"0", "motto":"Pink Dolphin" }, "copyright":"Copyright (C) 1999-2013 Antidot" } } JSON; $response = <<<JSON {"header":{"query":{"userId":"b756a0de-e252-426f-8a24-66c4bbb96aa0","sessionId":"dd33b13c-dd9f-49a1-abe1-95e89140fb40","date":"2015-10-14T15:12:00+0000","queryParam":[{"name":"afs:service","value":"42"},{"name":"afs:status","value":"beta"},{"name":"afs:query","value":"vert"},{"name":"afs:output","value":"json,2"},{"name":"afs:facetDefault","value":"replies=100"},{"name":"afs:replies","value":"20"},{"name":"afs:sort","value":"disposite, DESC and afs:relevance, DESC"}],"mainCtx":{"textQuery":"vert"},"textQuery":"vert"},"user":{"requestMethod":"GET","agent":"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36","address":"172.17.42.1","output":{"format":"JSON","encoding":"gzip","charset":"UTF-8"}},"performance":{"durationMs":5},"info":{}},"replySet":[{"meta":{"uri":"Catalog","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1,"durationMs":1,"firstPaFId":3,"lastPaFId":3,"producer":"SEARCH"},"facets":{"facet":[{"afs:t":"FacetTree","node":[{"key":"fr","labels":[{"label":"Français"}],"items":1}],"layout":"TREE","type":"STRING","id":"afs:lang","labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":4,"uri":"3612531066812_fr","title":[{"afs:t":"KwicMatch","match":"vert"}],"relevance":{"rank":1},"clientData":[{"contents":"<product xmlns=\\"http:\\/\\/ref.antidot.net\\/store\\/afs#\\" xmlns:xsi=\\"http:\\/\\/www.w3.org\\/2001\\/XMLSchema-instance\\" id=\\"3612531066812\\" xml:lang=\\"fr\\" autocomplete=\\"on\\" xsi:schemaLocation=\\"http:\\/\\/ref.antidot.net\\/store\\/afs# http:\\/\\/ref.antidot.net\\/store\\/v4.1\\/xsd\\/product.xsd\\"><name xmlns=\\"http:\\/\\/ref.antidot.net\\/store\\/afs#\\">vert<\\/name><\\/product>","id":"main","mimeType":"text\\/xml"}]}]}}]} JSON; //Set BO response for AboutConnector $curlConnector->setResponse($aboutResponse, $aboutRequestOpts); //Set response for query $curlConnector->setResponse($response); $search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector); $search->set_query($query); $coder = new AfsQueryCoder(); $search->set_query_coder($coder); $helper = $search->execute($query); $this->assertEquals($helper->is_orchestrated(), false); $helper->get_orchestration_type(); }
* @example full_lightweight_example.php */ /** [Include lib] */ require_once "PHP_API/afs_lib.php"; /** [Include lib] */ /** [Twig init] */ // You shoud addapt following paths require_once "/var/www/php-example/Twig-1.15.0/lib/Twig/Autoloader.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem('/var/www/php-example/templates'); $twig = new Twig_Environment($loader, array('debug' => true)); $twig->addExtension(new Twig_Extension_Debug()); /** [Twig init] */ /** [Search init] */ // Third parameter is set to AfsServiceStatus::STABLE by default. $search = new AfsSearch('eval.partners.antidot.net', 48000); /** [Search init] */ /** [Query init] */ // Instead, you can initialize new query and call $search->set_query($initial_query) $search->build_query_from_url_parameters(); /** [Query init] */ /** [Query execution] */ // Default format is AfsHelperFormat::ARRAYS, it can be set to AfsHelperFormat::HELPERS // when execute method is called. $reply = $search->execute(AfsHelperFormat::ARRAYS); /** [Query execution] */ // Load and apply PHP templates /** [Twig template] */ $template = $twig->loadTemplate('meta_template.html'); echo $template->render($reply); /** [Twig template] */
<?php /** @file raw_example.php * @example raw_example.php */ require_once "PHP_API/afs_lib.php"; $search = new AfsSearch('eval.partners.antidot.net', 48000); $query = $search->build_query_from_url_parameters(); $query = $query->set_lang('fr'); // language is set manually in order to get spellcheck results $query = $query->set_multi_selection_facets('classification'); $query = $query->set_mono_selection_facets('afs:lang', 'has_variants', 'has_image'); $query = $query->set_facet_order('price_eur', 'marketing', 'classification', 'has_variants', 'has_image'); $query = $query->set_facets_values_sort_order(AfsFacetValuesSortMode::ITEMS, AfsSortOrder::DESC); $helper = $search->execute($query); $generated_url = $search->get_generated_url(); $clustering_is_active = $query->has_cluster(); $nsmap = array('ns' => 'http://ref.antidot.net/store/afs#'); ?> <html> <head> <title>Antidot PHP API - Raw example</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="UTF-8"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css"> <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]> <script src="../../assets/js/html5shiv.js"></script>