zwischenstand

This commit is contained in:
Sven Wappler
2021-04-29 18:33:05 +02:00
parent 2c9e27b3b7
commit 0ee2fae261
264 changed files with 263 additions and 21253 deletions

View File

@@ -1,183 +0,0 @@
{namespace meilisearch=WapplerSystems\Meilisearch\ViewHelpers}
{namespace core=TYPO3\CMS\Core\ViewHelpers}
<f:layout name="Backend/WithPageTree"/>
<f:section name="Main">
<div role="tabpanel">
<ul class="nav nav-tabs t3js-tabs" role="tablist" id="tabs-tab" data-store-last-tab="1">
<li role="presentation" class="t3js-tabmenu-item active">
<a href="#synonyms-tab" title="" aria-controls="synonyms-tab" role="tab" data-toggle="tab">
Synonyms
</a>
</li>
<li role="presentation" class="t3js-tabmenu-item ">
<a href="#stopwords-tab" title="" aria-controls="stopwords-tab" role="tab" data-toggle="tab">
Stop Words
</a>
</li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="synonyms-tab">
<div class="panel panel-tab">
<div class="panel-body">
<f:render section="Synonyms" arguments="{_all}"/>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="stopwords-tab">
<div class="panel panel-tab">
<div class="panel-body">
<f:render section="StopWords" arguments="{_all}"/>
</div>
</div>
</div>
</div>
</div>
</f:section>
<f:section name="Synonyms">
By defining synonyms you can allow to find documents by words that do not occur in the documents but have the same meaning:<br/>
<b>Note:</b> The word that you want replace with a synonym needs to appear on <b>both</b> sides when you want to find it with the term itself later!<br/>
Example:<br />
<ul>
<li><b>"smartphone" => "smartphone, cellphone, mobile, mobilephone"</b>
<ul>
<li>will match <b>"smartphone, cellphone, mobile, mobilephone"</b></li>
<li>And when "smartphone" were missing on the right side, then you could not find the documents with "smartphone" anymore!</li>
</ul>
</li>
</ul>
<b>Note: The changes do not apply on the fly, you need to reindex all the pages whith occurrences of changed synonyms.</b>
<f:if condition="{synonyms}">
<f:then>
<h3>Manage Synonyms</h3>
<table class="table table-condensed table-hover table-striped">
<thead>
<tr class="t3-row-header">
<th>Base Word</th><th>Synonyms</th>
<th>
<f:link.action action="deleteAllSynonyms" title="Delete all synonyms" class="btn btn-default btn-sm">
<core:icon identifier="actions-edit-delete"/>
</f:link.action>
<f:link.action action="exportSynonyms" title="Export all synonyms" class="btn btn-default btn-sm">
<core:icon identifier="actions-document-export-csv"/>
</f:link.action>
</th>
</tr>
</thead>
<tbody>
<f:for each="{synonyms}" key="baseWord" as="synonymList">
<tr>
<td>{baseWord}</td>
<td>{synonymList}</td>
<td>
<f:link.action action="deleteSynonyms" arguments="{baseWord:'{baseWord}'}" title="Remove Synonym Mapping"><core:icon identifier="actions-edit-delete"/></f:link.action>
</td>
</tr>
</f:for>
</tbody>
</table>
</f:then>
<f:else>
<f:be.infobox state="-1">
No synonyms configured yet.
</f:be.infobox>
</f:else>
</f:if>
<h3>Add Synonyms (lowercase)</h3>
<div class="section">
<f:form action="addSynonyms" id="add-synonyms">
<div class="form-group">
<label for="baseWord">Base Word</label>
<f:form.textfield id="baseWord" name="baseWord" class="form-control" />
<span class="example">f.e. iphone</span>
</div>
<div class="form-group">
<label for="synonyms">Synonyms</label>
<f:form.textfield id="synonyms" name="synonyms" class="form-control" />
<span class="example">comma-separated; f.e. smartphone, cellphone</span>
</div>
<div class="form-group">
<f:form.checkbox id="overrideExistingSingle" name="overrideExisting" value="1" />
<label for="overrideExistingSingle"> Override, if synonym already exists</label>
</div>
<div class="submit">
<f:form.submit value="Add Synonyms" class="btn btn-sm btn-default"/>
</div>
</f:form>
</div>
<h3>Upload Synonym List</h3>
<div class="section">
<f:form action="importSynonymList" id="upload-synonyms" method="post" enctype="multipart/form-data">
<div class="form-group">
<f:form.upload id="synonymFileUpload" name="synonymFileUpload" />
</div>
<div class="form-group">
<f:form.checkbox id="overrideExisting" name="overrideExisting" value="1" />
<label for="overrideExisting"> Override synonym, if synonym already exists</label>
</div>
<div class="form-group">
<f:form.checkbox id="deleteSynonymsBefore" name="deleteSynonymsBefore" value="1" />
<label for="deleteSynonymsBefore"> Replace complete synonym list</label>
</div>
<div class="submit">
<f:form.submit value="Upload file" class="btn btn-sm btn-default"/>
</div>
</f:form>
</div>
</f:section>
<f:section name="StopWords">
<p> Stop words allow you to specify a list of words that will be discarded during indexing.<br/>
Usually they are very small and very common words (such as "the" and "and") that often have <br/>
little bearing on whether a document is a good match or not.<br/>
The format is one word per line.</p>
<h3>Stop Word List (one per line, lowercase)</h3>
<div class="section section-with-header">
<div class="row">
<div class="col-md-12">
<f:if condition="{stopWordsCount} == 0">
<f:be.infobox state="-1">
The stop word list is empty.
</f:be.infobox>
</f:if>
<f:form action="saveStopWords" id="edit-stopwords">
<f:form.textarea name="stopWords" rows="20" cols="50" style="width: auto;" value="{stopWords}"/>
<div class="submit">
<f:form.submit value="Save Stop Word List" class="btn btn-sm btn-default"/>
<f:if condition="{stopWordsCount} > 0">
<f:link.action action="exportStopWords" title="Export StopWords" class="btn btn-default btn-sm">
<core:icon identifier="actions-document-export-csv"/>
</f:link.action>
</f:if>
</div>
</f:form>
</div>
</div>
</div>
<h3>Upload StopWords List</h3>
<div class="section section-with-header">
<f:form action="importStopWordList" id="upload-stopwords" method="post" enctype="multipart/form-data">
<div class="form-group">
<f:form.upload id="stopwordsFileUpload" name="stopwordsFileUpload" />
</div>
<div class="form-group">
<f:form.checkbox id="replaceStopwords" name="replaceStopwords" value="1" checked="1"/>
<label for="replaceStopwords"> Override complete list</label>
</div>
<div class="submit">
<f:form.submit value="Upload file" class="btn btn-sm btn-default"/>
</div>
</f:form>
</div>
</f:section>

View File

@@ -2,153 +2,155 @@
<f:layout name="Backend/WithPageTree"/>
<f:section name="Main">
<f:be.pageRenderer includeCssFiles="{0: '{f:uri.resource(path:\'StyleSheets/Backend/IndexQueueModule.css\')}'}" includeRequireJsModules="{0:'TYPO3/CMS/Meilisearch/FormModal'}"/>
<f:be.pageRenderer includeCssFiles="{0: '{f:uri.resource(path:\'StyleSheets/Backend/IndexQueueModule.css\')}'}" includeRequireJsModules="{0:'TYPO3/CMS/Meilisearch/FormModal'}"/>
<h1>Index Queue</h1>
<p class="lead"><f:translate key="meilisearch.backend.index_queue_module.description" /></p>
<h1>Index Queue</h1>
<p class="lead">
<f:translate key="meilisearch.backend.index_queue_module.description"/>
</p>
<hr class="section-divider" />
<hr class="section-divider"/>
<f:if condition="{indexqueue_statistics.totalCount} > 0">
<div class="row section-with-header">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.header_status"/>
</h2>
<f:if condition="{indexqueue_statistics.totalCount} > 0">
<div class="row section-with-header">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.header_status"/>
</h2>
<div class="row">
<div class="col-md-12">
<div class="progress">
<f:if condition="{indexqueue_statistics.successCount} > 0">
<div class="progress-bar progress-bar-success"
style="width: {indexqueue_statistics.successPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.indexed')}: {indexqueue_statistics.successCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.successPercentage}%)">
<div class="row">
<div class="col-md-12">
<div class="progress">
<f:if condition="{indexqueue_statistics.successCount} > 0">
<div class="progress-bar progress-bar-success"
style="width: {indexqueue_statistics.successPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.indexed')}: {indexqueue_statistics.successCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.successPercentage}%)">
<f:translate key="meilisearch.backend.index_queue_module.status.indexed"/>
</div>
</f:if>
<f:translate key="meilisearch.backend.index_queue_module.status.indexed"/>
</div>
</f:if>
<f:if condition="{indexqueue_statistics.pendingCount} > 0">
<div class="progress-bar progress-bar-warning"
style="width: {indexqueue_statistics.pendingPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.pending')}: {indexqueue_statistics.pendingCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.pendingPercentage}%)">
<f:if condition="{indexqueue_statistics.pendingCount} > 0">
<div class="progress-bar progress-bar-warning"
style="width: {indexqueue_statistics.pendingPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.pending')}: {indexqueue_statistics.pendingCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.pendingPercentage}%)">
<f:translate key="meilisearch.backend.index_queue_module.status.pending"/>
</div>
</f:if>
<f:translate key="meilisearch.backend.index_queue_module.status.pending"/>
</div>
</f:if>
<f:if condition="{indexqueue_statistics.failedCount} > 0">
<div class="progress-bar progress-bar-danger"
style="width: {indexqueue_statistics.failedPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.errors')}: {indexqueue_statistics.failedCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.failedPercentage}%)">
<f:if condition="{indexqueue_statistics.failedCount} > 0">
<div class="progress-bar progress-bar-danger"
style="width: {indexqueue_statistics.failedPercentage}%"
title="{f:translate(key:'meilisearch.backend.index_queue_module.status.errors')}: {indexqueue_statistics.failedCount}/{indexqueue_statistics.totalCount} ({indexqueue_statistics.failedPercentage}%)">
<f:translate key="meilisearch.backend.index_queue_module.status.errors"/>
</div>
</f:if>
<f:translate key="meilisearch.backend.index_queue_module.status.errors"/>
</div>
</f:if>
</div>
<f:form action="doIndexingRun" method="POST">
<f:form.submit class="btn btn-sm btn-default"
value="{f:translate(key:'meilisearch.backend.index_queue_module.index_now')}"/>
</f:form>
</div>
</div>
</div>
<f:form action="doIndexingRun" method="POST">
<f:form.submit class="btn btn-sm btn-default"
value="{f:translate(key:'meilisearch.backend.index_queue_module.index_now')}"/>
</f:form>
</div>
</div>
<hr />
<f:if condition="{indexqueue_errors}">
<div class="row">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.errors.headline"/>
</h2>
<hr/>
<f:if condition="{indexqueue_errors}">
<div class="row">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.errors.headline"/>
</h2>
<table class="table table-condensed table-hover table-striped">
<tr>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.id"/>
</th>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.item_type"/>
</th>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.item_uid"/>
</th>
<th></th>
</tr>
<table class="table table-condensed table-hover table-striped">
<tr>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.id"/>
</th>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.item_type"/>
</th>
<th>
<f:translate key="meilisearch.backend.index_queue_module.errors.item_uid"/>
</th>
<th></th>
</tr>
<f:for each="{indexqueue_errors}" as="item">
<tr>
<td>{item.uid}</td>
<td>{item.item_type}</td>
<td>{item.item_uid}</td>
<td>
<f:link.action action="showError" arguments="{indexQueueItemId: item.uid}">
<f:translate key="meilisearch.backend.index_queue_module.errors.show_button"/>
</f:link.action>
</td>
</tr>
</f:for>
</table>
<f:for each="{indexqueue_errors}" as="item">
<tr>
<td>{item.uid}</td>
<td>{item.item_type}</td>
<td>{item.item_uid}</td>
<td>
<f:link.action action="showError" arguments="{indexQueueItemId: item.uid}">
<f:translate key="meilisearch.backend.index_queue_module.errors.show_button"/>
</f:link.action>
</td>
</tr>
</f:for>
</table>
<f:form action="resetLogErrors" method="POST">
<f:form.submit class="btn btn-sm btn-default"
value="{f:translate(key:'meilisearch.backend.index_queue_module.errors.reset_button')}"/>
</f:form>
<f:form action="resetLogErrors" method="POST">
<f:form.submit class="btn btn-sm btn-default"
value="{f:translate(key:'meilisearch.backend.index_queue_module.errors.reset_button')}"/>
</f:form>
</div>
</div>
</f:if>
</div>
</div>
</f:if>
</div>
</div>
</f:if>
</div>
</div>
</f:if>
<hr class="section-divider" />
<hr class="section-divider"/>
<div class="row section-with-header">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.header_init" />
</h2>
<div class="row section-with-header">
<div class="col-md-12">
<h2>
<f:translate key="meilisearch.backend.index_queue_module.header_init"/>
</h2>
<f:form name="editform" action="initializeIndexQueue">
<f:form name="editform" action="initializeIndexQueue">
<div class="t3js-formengine-palette-field index-queue-init-form">
<f:format.raw>{indexQueueInitializationSelector}</f:format.raw>
</div>
<f:form.submit name="initializeIndexQueue" value="Queue Selected Content for Indexing" class="btn btn-sm btn-default"/>
<meilisearch:backend.button.helpButton title="Index Queue Initialization" description="{f:translate(key:'meilisearch.backend.index_queue_module.help')}" />
</f:form>
</div>
</div>
<div class="t3js-formengine-palette-field index-queue-init-form">
<f:format.raw>{indexQueueInitializationSelector}</f:format.raw>
</div>
<f:form.submit name="initializeIndexQueue" value="Queue Selected Content for Indexing" class="btn btn-sm btn-default"/>
<meilisearch:backend.button.helpButton title="Index Queue Initialization" description="{f:translate(key:'meilisearch.backend.index_queue_module.help')}"/>
</f:form>
</div>
</div>
<f:comment><!-- Show this button only if module indexadministration is allowed for be user/group --></f:comment>
<meilisearch:backend.security.ifHasAccessToModule extension="Meilisearch" main="searchbackend" sub="indexadministration">
<f:then>
<hr class="section-divider" />
<f:comment><!-- Show this button only if module indexadministration is allowed for be user/group --></f:comment>
<meilisearch:backend.security.ifHasAccessToModule extension="Meilisearch" main="searchbackend" sub="indexadministration">
<f:then>
<hr class="section-divider"/>
<div class="row section-with-header">
<div class="col-md-3">
<div class="row section-with-header">
<div class="col-md-3">
<f:form addQueryString="1"
additionalParams="{route: '/searchbackend/MeilisearchIndexadministration/', tx_meilisearch_searchbackend_meilisearchindexadministration:{controller: 'Backend\\Search\\IndexAdministrationModule', action: 'clearIndexQueue', id: '{pageUID}', fromQueue: 'true'}}">
<f:form.submit class="btn btn-sm btn-default btn-danger t3js-modal-formsubmit-trigger"
data="{title: 'Please confirm', content: 'Are you sure you want to clear the Index Queue?', severity: 'warning'}"
value="{f:translate(key:'meilisearch.backend.index_queue_module.button.clear_index_queue')}"/>
</f:form>
<f:form addQueryString="1"
additionalParams="{route: '/searchbackend/MeilisearchIndexadministration/', tx_meilisearch_searchbackend_meilisearchindexadministration:{controller: 'Backend\\Search\\IndexAdministrationModule', action: 'clearIndexQueue', id: '{pageUID}', fromQueue: 'true'}}">
<f:form.submit class="btn btn-sm btn-default btn-danger t3js-modal-formsubmit-trigger"
data="{title: 'Please confirm', content: 'Are you sure you want to clear the Index Queue?', severity: 'warning'}"
value="{f:translate(key:'meilisearch.backend.index_queue_module.button.clear_index_queue')}"/>
</f:form>
</div>
<div class="col-md-9 action-description">
<h3>
<f:translate key="meilisearch.backend.index_queue_module.button.clear_index_queue"/>
</h3>
</div>
<div class="col-md-9 action-description">
<h3>
<f:translate key="meilisearch.backend.index_queue_module.button.clear_index_queue"/>
</h3>
<p>
This will empty the Index Queue. It will take care of only deleting
the currently selected site's Index Queue entries.
You will have to re-initialize the Index Queue afterwards.
</p>
</div>
</div>
</f:then>
</meilisearch:backend.security.ifHasAccessToModule>
<p>
This will empty the Index Queue. It will take care of only deleting
the currently selected site's Index Queue entries.
You will have to re-initialize the Index Queue afterwards.
</p>
</div>
</div>
</f:then>
</meilisearch:backend.security.ifHasAccessToModule>
</f:section>

View File

@@ -83,17 +83,6 @@
</f:be.infobox>
</f:if>
<f:if condition="{invalidPaths}">
<f:be.infobox title="Following paths are not valid:" state="1">
<ul>
<f:for each="{invalidPaths}" as="invalidPath">
<li>{invalidPath}</li>
</f:for>
</ul>
<p>Path should not contain the characters "*, ?, <, >, |, :, or #"!</p>
</f:be.infobox>
</f:if>
<hr class="double" />
Used domain: {site.domain}