add searchengine step in graphic installer

This commit is contained in:
aina-esokia
2018-07-18 18:07:25 +04:00
parent 94913edcbd
commit 50f8580e27
2 changed files with 100 additions and 6 deletions

View File

@@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Controller;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Core\Configuration\StructureTemplate; use Alchemy\Phrasea\Core\Configuration\StructureTemplate;
use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions;
use Alchemy\Phrasea\Setup\RequirementCollectionInterface; use Alchemy\Phrasea\Setup\RequirementCollectionInterface;
use Alchemy\Phrasea\Setup\Requirements\BinariesRequirements; use Alchemy\Phrasea\Setup\Requirements\BinariesRequirements;
use Alchemy\Phrasea\Setup\Requirements\FilesystemRequirements; use Alchemy\Phrasea\Setup\Requirements\FilesystemRequirements;
@@ -82,6 +83,7 @@ class SetupController extends Controller
'locale' => $this->app['locale'], 'locale' => $this->app['locale'],
'available_locales' => Application::getAvailableLanguages(), 'available_locales' => Application::getAvailableLanguages(),
'available_templates' => $st->getNames(), 'available_templates' => $st->getNames(),
'elasticOptions' => ElasticsearchOptions::fromArray([]),
'warnings' => $warnings, 'warnings' => $warnings,
'error' => $request->query->get('error'), 'error' => $request->query->get('error'),
'current_servername' => $request->getScheme() . '://' . $request->getHttpHost() . '/', 'current_servername' => $request->getScheme() . '://' . $request->getHttpHost() . '/',
@@ -106,6 +108,20 @@ class SetupController extends Controller
$appbox_name = $request->request->get('ab_name'); $appbox_name = $request->request->get('ab_name');
$databox_name = $request->request->get('db_name'); $databox_name = $request->request->get('db_name');
$elastic_settings = $request->request->get('elasticsearch_settings');
$elastic_settings = [
'host' => (string) $elastic_settings['host'],
'port' => (int) $elastic_settings['port'],
'index' => (string) (isset($elastic_settings['index_name']) ? $elastic_settings['index_name'] : $this->generateElasticIndex()),
'shards' => (int) $elastic_settings['shards'],
'replicas' => (int) $elastic_settings['replicas'],
'minScore' => (int) $elastic_settings['min_score'],
'highlight' => (bool) (isset($elastic_settings['highlight']) ? $elastic_settings['highlight'] : false)
];
$elastic_settings = ElasticsearchOptions::fromArray($elastic_settings);
try { try {
$abInfo = [ $abInfo = [
'host' => $database_host, 'host' => $database_host,
@@ -181,6 +197,8 @@ class SetupController extends Controller
$this->app->getAuthenticator()->openAccount($user); $this->app->getAuthenticator()->openAccount($user);
$this->app['conf']->set(['main', 'search-engine', 'options'], $elastic_settings->toArray());
return $this->app->redirectPath('admin', [ return $this->app->redirectPath('admin', [
'section' => 'taskmanager', 'section' => 'taskmanager',
'notice' => 'install_success', 'notice' => 'install_success',
@@ -191,4 +209,15 @@ class SetupController extends Controller
]); ]);
} }
} }
/**
* @return string
*/
private function generateElasticIndex()
{
return strtolower(sprintf('phraseanet_%s', str_replace(
array('/', '.'), array('', ''),
$this->app['random.medium']->generateString(16)
)));
}
} }

View File

@@ -375,7 +375,7 @@
<div class="PNB10 wrapper_left"> <div class="PNB10 wrapper_left">
<div class="PNB10 section_title"> <div class="PNB10 section_title">
<h2> <h2>
1/5 {{ 'Executables externes' | trans }} 1/6 {{ 'Executables externes' | trans }}
</h2> </h2>
</div> </div>
<div class="PNB10" style="top:50px;overflow-x:hidden;"> <div class="PNB10" style="top:50px;overflow-x:hidden;">
@@ -440,7 +440,7 @@
<div class="wrapper"> <div class="wrapper">
<div class="PNB10 wrapper_left"> <div class="PNB10 wrapper_left">
<div class="PNB10 section_title"> <div class="PNB10 section_title">
<h2>2/5 <h2>2/6
{{ 'Creation de votre compte' | trans }} {{ 'Creation de votre compte' | trans }}
</h2> </h2>
</div> </div>
@@ -536,7 +536,7 @@
<div class="PNB10 wrapper_left"> <div class="PNB10 wrapper_left">
<div class="PNB10 section_title"> <div class="PNB10 section_title">
<h2> <h2>
3/5 3/6
{% trans %}setup::Configuration de la base de compte ApplicationBox{% endtrans %} {% trans %}setup::Configuration de la base de compte ApplicationBox{% endtrans %}
</h2> </h2>
</div> </div>
@@ -637,13 +637,78 @@
</div> </div>
<div class="steps">
<div class="wrapper">
<div class="PNB10 wrapper_left">
<div class="PNB10 section_title">
<h2>4/6
{{ 'SearchEngine settings' | trans }}
</h2>
</div>
<div class="PNB10" style="top:50px;overflow-x:hidden;">
<table class="main_content_wrapper">
<tr>
<td>
<table class="main_content_table">
<tr>
<td><label>{{ 'ElasticSearch server host' | trans }}</label></td>
<td><input class="" type="text" name="elasticsearch_settings[host]" value="{{ elasticOptions.host }}" /></td>
</tr>
<tr>
<td><label>{{ 'ElasticSearch service port' | trans }}</label></td>
<td><input class="" type="number" name="elasticsearch_settings[port]" value="{{ elasticOptions.port }}" /></td>
</tr>
<tr>
<td><label>{{ 'Use an existing index' | trans }}</label></td>
<td><input class="" type="checkbox" name="elasticsearch_settings[use_existing_index]" value="" /></td>
</tr>
<tr>
<td><label>{{ 'ElasticSearch index name' | trans }}</label></td>
<td><input class="" disabled="disabled" type="text" name="elasticsearch_settings[index_name]" value="{{ elasticOptions.indexName }}" /></td>
</tr>
<tr>
<td><label>{{ 'Number of shards' | trans }}</label></td>
<td><input class="" type="number" name="elasticsearch_settings[shards]" value="{{ elasticOptions.shards }}" /></td>
</tr>
<tr>
<td><label>{{ 'Number of replicas' | trans }}</label></td>
<td><input class="" type="number" name="elasticsearch_settings[replicas]" value="{{ elasticOptions.replicas }}" /></td>
</tr>
<tr>
<td><label>{{ 'Thesaurus Min score' | trans }}</label></td>
<td><input class="" type="number" name="elasticsearch_settings[min_score]" value="{{ elasticOptions.minScore }}" /></td>
</tr>
<tr>
<td><label>{{ 'Activate highlight' | trans }}</label></td>
<td><input class="" type="checkbox" name="elasticsearch_settings[highlight]" value="{{ elasticOptions.highlight }}" {% if elasticOptions.highlight %} checked="checked" {% endif %}/></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="buttons">
<table>
<tr>
<td>
<button class="previous">{{ 'boutton::precedent' | trans }}</button>
</td>
<td style="text-align:right;">
<button class="next">{{ 'boutton::suivant' | trans }}</button>
</td>
</tr>
</table>
</div>
</div>
<div class="steps"> <div class="steps">
<div class="wrapper"> <div class="wrapper">
<div class="PNB10 wrapper_left"> <div class="PNB10 wrapper_left">
<div class="PNB10 section_title"> <div class="PNB10 section_title">
<h2>4/5 <h2>5/6
{{ 'setup::Configuration des repertoires de stockage' | trans }} {{ 'setup::Configuration des repertoires de stockage' | trans }}
</h2> </h2>
</div> </div>
@@ -702,7 +767,7 @@
<div class="wrapper"> <div class="wrapper">
<div class="PNB10 wrapper_left"> <div class="PNB10 wrapper_left">
<div class="PNB10 section_title"> <div class="PNB10 section_title">
<h2>5/5 <h2>6/6
{% trans %}setup::Configuration de la base de stockage DataBox{% endtrans %} {% trans %}setup::Configuration de la base de stockage DataBox{% endtrans %}
</h2> </h2>
</div> </div>
@@ -739,7 +804,7 @@
<td> <td>
<select name="db_template" class="databox_creation_input"> <select name="db_template" class="databox_creation_input">
{% for name in available_templates %} {% for name in available_templates %}
<option value="{{ name|escape('js') }}">{{ name }}</option> <option value="{{ name|escape }}">{{ name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>