Example #1
0
 /**
  * {@inheritdoc}
  */
 public function excerpt($query, $fields, \record_adapter $record, SearchEngineOptions $options = null)
 {
     if (null === $options) {
         $options = new SearchEngineOptions();
     }
     $ret = [];
     $this->initialize();
     $this->checkSession();
     $offset = $record->get_number() + 1;
     $res = phrasea_fetch_results($this->app['session']->get('phrasea_session_id'), $offset, 1, true, "[[em]]", "[[/em]]");
     if (!isset($res['results']) || !is_array($res['results'])) {
         return [];
     }
     $rs = $res['results'];
     $res = array_shift($rs);
     if (!isset($res['xml'])) {
         return [];
     }
     $sxe = @simplexml_load_string($res['xml']);
     foreach ($fields as $name => $field) {
         $newValues = [];
         if ($sxe && $sxe->description && $sxe->description->{$name}) {
             foreach ($sxe->description->{$name} as $value) {
                 $newValues[(string) $value['meta_id']] = (string) $value;
             }
             $ret[$name] = $newValues;
         }
     }
     return $ret;
 }
Example #2
0
 protected function doExecute(InputInterface $input, OutputInterface $output)
 {
     if (!extension_loaded('phrasea2')) {
         $output->writeln("<error>Missing Extension php-phrasea.</error>");
         return 1;
     }
     $usrId = $input->getArgument('usr_id');
     if (null === ($TestUser = $this->container['repo.users']->find($usrId))) {
         $output->writeln("<error>Wrong user !</error>");
         return 1;
     }
     $output->writeln(sprintf("\nWill do the check with user <info>%s</info> (%s)\n", $TestUser->getDisplayName(), $TestUser->getEmail()));
     $output->writeln("PHRASEA FUNCTIONS");
     foreach (get_extension_funcs("phrasea2") as $function) {
         $output->writeln("<info>{$function}</info>");
     }
     $configuration = $this->getService('configuration');
     $connexion = $configuration['main']['database'];
     $hostname = $connexion['host'];
     $port = $connexion['port'];
     $user = $connexion['user'];
     $password = $connexion['password'];
     $dbname = $connexion['dbname'];
     $output->writeln("\n-- phrasea_conn --");
     if (phrasea_conn($hostname, $port, $user, $password, $dbname) !== true) {
         $output->writeln("<error>Failed ! </error> got no connection");
         return 1;
     } else {
         $output->writeln("<info>Succes ! </info> got connection");
     }
     $output->writeln("");
     $output->writeln("\n-- phrasea_info --");
     foreach (phrasea_info() as $key => $value) {
         $output->writeln("\t{$key} => {$value}");
     }
     $output->writeln("");
     $output->writeln("\n-- phrasea_create_session --");
     $sessid = phrasea_create_session((string) $TestUser->getId());
     if (ctype_digit((string) $sessid)) {
         $output->writeln("<info>Succes ! </info> got session id {$sessid}");
     } else {
         $output->writeln("<error>Failed ! </error> got no session id");
         return 1;
     }
     $output->writeln("\n-- phrasea_open_session --");
     $phSession = phrasea_open_session($sessid, $usrId);
     if ($phSession) {
         $output->writeln("<info>Succes ! </info> got session ");
     } else {
         $output->writeln("<error>Failed ! </error> got no session ");
         return 1;
     }
     $output->writeln("\n-- phrasea_clear_cache --");
     $ret = phrasea_clear_cache($sessid);
     if ($sessid) {
         $output->writeln("<info>Succes ! </info> got session ");
     } else {
         $output->writeln("<error>Failed ! </error> got no session ");
         return 1;
     }
     $tbases = [];
     foreach ($phSession["bases"] as $phbase) {
         $tcoll = [];
         foreach ($phbase["collections"] as $coll) {
             $tcoll[] = 0 + $coll["base_id"];
         }
         if (sizeof($tcoll) > 0) {
             $kbase = "S" . $phbase["sbas_id"];
             $tbases[$kbase] = [];
             $tbases[$kbase]["sbas_id"] = $phbase["sbas_id"];
             $tbases[$kbase]["searchcoll"] = $tcoll;
             $tbases[$kbase]["mask_xor"] = $tbases[$kbase]["mask_and"] = 0;
             $qp = new PhraseaEngineQueryParser($this->container);
             $treeq = $qp->parsequery($input->getOption('query'));
             $arrayq = $qp->makequery($treeq);
             $tbases[$kbase]["arrayq"] = $arrayq;
         }
     }
     $output->writeln("\n-- phrasea_query --");
     $nbanswers = 0;
     foreach ($tbases as $kb => $base) {
         $tbases[$kb]["results"] = NULL;
         $ret = phrasea_query2($phSession["session_id"], $base["sbas_id"], $base["searchcoll"], $base["arrayq"], $this->container['conf']->get(['main', 'key']), $usrId, false, PHRASEA_MULTIDOC_DOCONLY, '', []);
         if ($ret) {
             $output->writeln("<info>Succes ! </info> got result on sbas_id " . $base["sbas_id"]);
         } else {
             $output->writeln("<error>Failed ! </error> No results on sbas_id " . $base["sbas_id"]);
             return 1;
         }
         $tbases[$kb]["results"] = $ret;
         $nbanswers += $tbases[$kb]["results"]["nbanswers"];
     }
     $output->writeln("Got a total of <info>{$nbanswers}</info> answers");
     $output->writeln("\n-- phrasea_fetch_results --");
     $rs = phrasea_fetch_results($sessid, $usrId, 1, true, '[[em]]', '[[/em]]');
     if ($rs) {
         $output->writeln("<info>Succes ! </info> got result ");
     } else {
         $output->writeln("<error>Failed ! </error> got no result ");
         return 1;
     }
     // test disconnected mode if available
     // prepare the test before closing session
     if (function_exists("phrasea_public_query")) {
         // fill an array for each sbas to query
         $tbases = [];
         foreach ($phSession["bases"] as $phbase) {
             // fill an array of collections to query for this sbas
             $tcoll = [];
             foreach ($phbase["collections"] as $coll) {
                 $tcoll[] = 0 + $coll["base_id"];
             }
             if (sizeof($tcoll) > 0) {
                 // parse the query for this sbas
                 $qp = new PhraseaEngineQueryParser($this->container);
                 $treeq = $qp->parsequery($input->getOption('query'));
                 $arrayq = $qp->makequery($treeq);
                 $tbases["S" . $phbase["sbas_id"]] = ["sbas_id" => $phbase["sbas_id"], "searchcoll" => $tcoll, "arrayq" => $arrayq];
             }
         }
     }
     $output->writeln("\n-- phrasea_close_session --");
     $rs = phrasea_close_session($sessid);
     if ($rs) {
         $output->writeln("<info>Succes ! </info> closed ! ");
     } else {
         $output->writeln("<error>Failed ! </error> not closed ");
         return 1;
     }
     // session is closed, test disconnected mode if available
     if (function_exists("phrasea_public_query")) {
         $output->writeln("\n-- phrasea_public_query(...0, 5,...) --");
         $ret = phrasea_public_query($tbases, PHRASEA_MULTIDOC_DOCONLY, '', [], '', 0, 5, true);
         if (is_array($ret) && array_key_exists("results", $ret) && is_array($ret["results"])) {
             $output->writeln(sprintf("<info>Succes ! </info> returned %d answers", count($ret["results"])));
         } else {
             $output->writeln("<error>Failed ! </error>");
             return 1;
         }
         foreach ($ret['results'] as $result) {
             $sbid = $result["sbid"];
             $rid = $result["rid"];
             $q = $tbases["S" . $sbid]["arrayq"];
             // query tree
             $h = phrasea_highlight($sbid, $rid, $q, "", false);
             $output->writeln(sprintf("\n-- phrasea_highlight(%d, %d,...) --", $sbid, $rid));
             if (is_array($h) && array_key_exists("results", $h) && is_array($h["results"]) && count($h["results"]) == 1 && array_key_exists("sbid", $h["results"][0]) && $h["results"][0]["sbid"] == $sbid && array_key_exists("rid", $h["results"][0]) && $h["results"][0]["rid"] == $rid && array_key_exists("spots", $h["results"][0]) && is_array($h["results"][0]["spots"])) {
                 $output->writeln(sprintf("<info>Succes ! </info> sbid=%d, rid=%d (%d spots)", $sbid, $h["results"][0]["rid"], count($h["results"][0]["spots"])));
             } else {
                 $output->writeln("<error>Failed ! </error>");
                 return 1;
             }
         }
     }
     // disconnected mode
     return 0;
 }