mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-09 19:13:26 +00:00

Conflicts: CHANGELOG.md bin/console bin/developer bin/setup bower.json composer.json composer.lock features/bootstrap/FeatureContext.php features/bootstrap/GuiContext.php lib/Alchemy/Phrasea/Authentication/Token/TokenValidator.php lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php lib/Alchemy/Phrasea/Command/CreateCollection.php lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php lib/Alchemy/Phrasea/Controller/Admin/Collection.php lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php lib/Alchemy/Phrasea/Controller/Admin/TaskManager.php lib/Alchemy/Phrasea/Controller/Api/V1.php lib/Alchemy/Phrasea/Controller/Client/Baskets.php lib/Alchemy/Phrasea/Controller/Client/Root.php lib/Alchemy/Phrasea/Controller/Prod/Basket.php lib/Alchemy/Phrasea/Controller/Prod/Export.php lib/Alchemy/Phrasea/Controller/Prod/Property.php lib/Alchemy/Phrasea/Controller/Prod/Records.php lib/Alchemy/Phrasea/Controller/Prod/Tools.php lib/Alchemy/Phrasea/Controller/Prod/Upload.php lib/Alchemy/Phrasea/Controller/Root/Login.php lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php lib/Alchemy/Phrasea/Core/Event/ApiLoadEndEvent.php lib/Alchemy/Phrasea/Core/Event/ApiLoadStartEvent.php lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php lib/Alchemy/Phrasea/Core/Version.php lib/Alchemy/Phrasea/Exception/XMLParseErrorException.php lib/Alchemy/Phrasea/Helper/DatabaseHelper.php lib/Alchemy/Phrasea/Helper/User/Edit.php lib/Alchemy/Phrasea/SearchEngine/Phrasea/PhraseaEngine.php lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php lib/Doctrine/Entities/AuthFailure.php lib/Doctrine/Entities/Basket.php lib/Doctrine/Entities/BasketElement.php lib/Doctrine/Entities/LazaretAttribute.php lib/Doctrine/Entities/LazaretCheck.php lib/Doctrine/Entities/LazaretFile.php lib/Doctrine/Entities/LazaretSession.php lib/Doctrine/Entities/Session.php lib/Doctrine/Entities/SessionModule.php lib/Doctrine/Entities/StoryWZ.php lib/Doctrine/Entities/UsrList.php lib/Doctrine/Entities/UsrListEntry.php lib/Doctrine/Entities/UsrListOwner.php lib/Doctrine/Entities/ValidationData.php lib/Doctrine/Entities/ValidationParticipant.php lib/Doctrine/Entities/ValidationSession.php lib/Doctrine/Logger/MonologSQLLogger.php lib/Doctrine/Repositories/BasketRepository.php lib/Doctrine/Repositories/ValidationParticipantRepository.php lib/Doctrine/Types/Binary.php lib/Doctrine/Types/Blob.php lib/Doctrine/Types/Enum.php lib/Doctrine/Types/LongBlob.php lib/Doctrine/Types/VarBinary.php lib/classes/API/OAuth2/Account.php lib/classes/API/OAuth2/Application.php lib/classes/API/OAuth2/Application/OfficePlugin.php lib/classes/API/OAuth2/AuthCode.php lib/classes/API/OAuth2/RefreshToken.php lib/classes/API/OAuth2/Token.php lib/classes/API/V1/Abstract.php lib/classes/API/V1/Interface.php lib/classes/API/V1/adapter.php lib/classes/API/V1/exception/abstract.php lib/classes/API/V1/exception/badrequest.php lib/classes/API/V1/exception/forbidden.php lib/classes/API/V1/exception/internalservererror.php lib/classes/API/V1/exception/maintenance.php lib/classes/API/V1/exception/methodnotallowed.php lib/classes/API/V1/exception/notfound.php lib/classes/API/V1/exception/unauthorized.php lib/classes/API/V1/result.php lib/classes/Exception/Feed/EntryNotFound.php lib/classes/Exception/Feed/ItemNotFound.php lib/classes/Exception/Feed/PublisherNotFound.php lib/classes/Feed/Abstract.php lib/classes/Feed/Adapter.php lib/classes/Feed/Aggregate.php lib/classes/Feed/Collection.php lib/classes/Feed/CollectionInterface.php lib/classes/Feed/Entry/Adapter.php lib/classes/Feed/Entry/Collection.php lib/classes/Feed/Entry/CollectionInterface.php lib/classes/Feed/Entry/Interface.php lib/classes/Feed/Entry/Item.php lib/classes/Feed/Entry/ItemInterface.php lib/classes/Feed/Interface.php lib/classes/Feed/Link.php lib/classes/Feed/LinkInterface.php lib/classes/Feed/Publisher/Adapter.php lib/classes/Feed/Publisher/Interface.php lib/classes/Feed/Token.php lib/classes/Feed/TokenAggregate.php lib/classes/Feed/XML/Abstract.php lib/classes/Feed/XML/Atom.php lib/classes/Feed/XML/Cooliris.php lib/classes/Feed/XML/Interface.php lib/classes/Feed/XML/RSS.php lib/classes/Feed/XML/RSS/Image.php lib/classes/Feed/XML/RSS/ImageInterface.php lib/classes/User/Adapter.php lib/classes/User/Interface.php lib/classes/appbox/register.php lib/classes/connection.php lib/classes/connection/abstract.php lib/classes/connection/interface.php lib/classes/connection/pdo.php lib/classes/connection/pdoStatementDebugger.php lib/classes/deprecated/countries.php lib/classes/deprecated/inscript.api.php lib/classes/eventsmanager/event/test.php lib/classes/ftpclient.php lib/classes/http/request.php lib/classes/media/subdef.php lib/classes/module/console/schedulerStart.php lib/classes/module/console/schedulerState.php lib/classes/module/console/schedulerStop.php lib/classes/module/console/taskState.php lib/classes/module/console/tasklist.php lib/classes/module/console/taskrun.php lib/classes/patch/320alpha4b.php lib/classes/patch/3715alpha1a.php lib/classes/patch/379alpha1a.php lib/classes/patch/380alpha10a.php lib/classes/patch/380alpha11a.php lib/classes/patch/380alpha13a.php lib/classes/patch/380alpha14a.php lib/classes/patch/380alpha15a.php lib/classes/patch/380alpha16a.php lib/classes/patch/380alpha17a.php lib/classes/patch/380alpha18a.php lib/classes/patch/380alpha3a.php lib/classes/patch/380alpha4a.php lib/classes/patch/380alpha6a.php lib/classes/patch/380alpha8a.php lib/classes/patch/380alpha9a.php lib/classes/patch/381alpha1b.php lib/classes/patch/381alpha2a.php lib/classes/patch/381alpha3a.php lib/classes/patch/381alpha4a.php lib/classes/patch/383alpha1a.php lib/classes/patch/383alpha2a.php lib/classes/patch/383alpha3a.php lib/classes/patch/383alpha4a.php lib/classes/record/adapter.php lib/classes/record/preview.php lib/classes/recordutils.php lib/classes/recordutils/audio.php lib/classes/recordutils/document.php lib/classes/recordutils/map.php lib/classes/recordutils/video.php lib/classes/registry.php lib/classes/registryInterface.php lib/classes/set/order.php lib/classes/system/url.php lib/classes/task/Scheduler.php lib/classes/task/appboxAbstract.php lib/classes/task/databoxAbstract.php lib/classes/task/manager.php lib/classes/task/period/RecordMover.php lib/classes/task/period/apibridge.php lib/classes/task/period/apiwebhooks.php lib/classes/task/period/archive.php lib/classes/task/period/cindexer.php lib/classes/task/period/emptyColl.php lib/classes/task/period/ftp.php lib/classes/task/period/ftpPull.php lib/classes/task/period/subdef.php lib/classes/task/period/test.php lib/classes/task/period/writemeta.php lib/conf.d/PhraseaFixture/AbstractWZ.php lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php lib/conf.d/PhraseaFixture/Story/LoadOneStory.php lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php lib/conf.d/PhraseaFixture/UsrLists/UsrList.php lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php templates/web/admin/collection/collection.html.twig templates/web/common/dialog_export.html.twig templates/web/common/menubar.html.twig templates/web/prod/actions/Tools/index.html.twig templates/web/prod/index.html.twig templates/web/prod/upload/upload-flash.html.twig templates/web/prod/upload/upload.html.twig templates/web/report/report_layout_child.html.twig templates/web/setup/step2.html.twig templates/web/thesaurus/new-synonym-dialog.html.twig templates/web/thesaurus/properties.html.twig templates/web/thesaurus/search.html.twig tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php tests/Alchemy/Tests/Phrasea/Controller/Admin/AdminCollectionTest.php tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php
297 lines
10 KiB
PHP
297 lines
10 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2015 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
use Alchemy\Phrasea\Command\Command;
|
|
use Alchemy\Phrasea\SearchEngine\Phrasea\PhraseaEngineQueryParser;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputOption;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
class module_console_checkExtension extends Command
|
|
{
|
|
|
|
public function __construct($name = null)
|
|
{
|
|
parent::__construct($name);
|
|
|
|
$this->setDescription('Performs a serie of tests against Phrasea Engine PHP Extension');
|
|
|
|
$this->addArgument('usr_id', InputOption::VALUE_REQUIRED, 'Usr_id to use.');
|
|
|
|
$this->addOption('query', '', InputOption::VALUE_OPTIONAL, 'The query', 'last');
|
|
|
|
return $this;
|
|
}
|
|
|
|
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"]] = [ // key does no matter
|
|
"sbas_id" => $phbase["sbas_id"], // sbas_id
|
|
"searchcoll" => $tcoll, // colls to query
|
|
"arrayq" => $arrayq // parsed query
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$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 // array of sbas with colls and query
|
|
, PHRASEA_MULTIDOC_DOCONLY // mode
|
|
, '' // sortfield
|
|
, [] // search business fields
|
|
, '' // lng for stemmed search
|
|
, 0 // offset for first answer (start=0)
|
|
, 5 // nbr of answers
|
|
, true // verbose output (chrono, sql...)
|
|
);
|
|
|
|
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 // sbas_id
|
|
, $rid // record_id
|
|
, $q // query parsed
|
|
, "" // lng for stemmed
|
|
, false // verbose output (chrono, sql...)
|
|
);
|
|
|
|
$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;
|
|
}
|
|
}
|