selectWordsAction
This commit is contained in:
parent
204f94e740
commit
7fc54547c4
6
.idea/php.xml
generated
6
.idea/php.xml
generated
@ -83,6 +83,12 @@
|
|||||||
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-contact" />
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-contact" />
|
||||||
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-contact" />
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-contact" />
|
||||||
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-user-management" />
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-user-management" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-assets" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-assets" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
2
.idea/scopes/html.xml
generated
2
.idea/scopes/html.xml
generated
@ -1,3 +1,3 @@
|
|||||||
<component name="DependencyValidationManager">
|
<component name="DependencyValidationManager">
|
||||||
<scope name="html" pattern="file[wordRotator]:src/module/*/pwa/html//*" />
|
<scope name="html" pattern="file[wordRotator]:src/module/*/pwa/public//*" />
|
||||||
</component>
|
</component>
|
||||||
2
.idea/watcherTasks.xml
generated
2
.idea/watcherTasks.xml
generated
@ -42,7 +42,7 @@
|
|||||||
<envs />
|
<envs />
|
||||||
</TaskOptions>
|
</TaskOptions>
|
||||||
<TaskOptions isEnabled="true">
|
<TaskOptions isEnabled="true">
|
||||||
<option name="arguments" value="--html5 --collapse-whitespace --remove-attribute-quotes --remove-empty-attributes --remove-comments --remove-optional-tags --remove-redundant-attributes $FilePath$ -o $ContentRoot$/public/html/$FileDirRelativeToSourcepath$/$FileName$" />
|
<option name="arguments" value="--html5 --collapse-whitespace --remove-attribute-quotes --remove-empty-attributes --remove-comments --remove-optional-tags --remove-redundant-attributes $FilePath$ -o $ContentRoot$/public/$FileDirRelativeToSourcepath$/$FileName$" />
|
||||||
<option name="checkSyntaxErrors" value="true" />
|
<option name="checkSyntaxErrors" value="true" />
|
||||||
<option name="description" />
|
<option name="description" />
|
||||||
<option name="exitCodeBehavior" value="ERROR" />
|
<option name="exitCodeBehavior" value="ERROR" />
|
||||||
|
|||||||
1
.idea/wordRotator.iml
generated
1
.idea/wordRotator.iml
generated
@ -3,6 +3,7 @@
|
|||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/src" isTestSource="false" packagePrefix="Application\" />
|
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/src" isTestSource="false" packagePrefix="Application\" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/pwa/public" isTestSource="false" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/public/js" />
|
<excludeFolder url="file://$MODULE_DIR$/public/js" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/persistence" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/persistence" />
|
||||||
|
|||||||
@ -65,4 +65,7 @@ return [
|
|||||||
'view_manager' => [
|
'view_manager' => [
|
||||||
'display_exceptions' => true,
|
'display_exceptions' => true,
|
||||||
],
|
],
|
||||||
|
"userManager" => [
|
||||||
|
"canRegister" => true
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -45,4 +45,7 @@ return [
|
|||||||
'view_manager' => [
|
'view_manager' => [
|
||||||
'display_exceptions' => true,
|
'display_exceptions' => true,
|
||||||
],
|
],
|
||||||
|
"userManager" => [
|
||||||
|
"canRegister" => true
|
||||||
|
],
|
||||||
];
|
];
|
||||||
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
<div><p></div>
|
<div><p data-translation=credits-sister-text><p data-translation=credits-coin-text data-translation-args='["https://www.freesfx.co.uk/"]'><p data-translation=credits-music-text data-translation-args='["https://audeeyah.de", "http://creativecommons.org/licenses/by/4.0/"]'></div>
|
||||||
1
public/html/application/impressum.html
Normal file
1
public/html/application/impressum.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<div><h2>Impressum</h2><p>Silas Günther<br>Mariabrunnstraße 48<br>52064 Aachen<br>Deutschland<p>E-Mail: <a href=mailto:wordRotator@silas.link>wordRotator@silas.link</a><br><a href=contactMe class=link target=_blank>Kontaktformular</a></div>
|
||||||
@ -6866,7 +6866,7 @@ class CreditsSite extends WordRotatorBaseSite{
|
|||||||
}
|
}
|
||||||
|
|
||||||
InitPromise.addPromise(app => {
|
InitPromise.addPromise(app => {
|
||||||
app.addDeepLink("credits", PrivacyPolicySite);
|
app.addDeepLink("credits", CreditsSite);
|
||||||
});
|
});
|
||||||
|
|
||||||
class ChooseThemeDialog extends Dialog {
|
class ChooseThemeDialog extends Dialog {
|
||||||
@ -6997,6 +6997,78 @@ InitPromise.addPromise(function () {
|
|||||||
SettingsSite.addSettingsFragment("settings", WordRotatorSettingFragment);
|
SettingsSite.addSettingsFragment("settings", WordRotatorSettingFragment);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
class SelectWordsSite extends UserSite{
|
||||||
|
|
||||||
|
constructor(siteManager) {
|
||||||
|
super(siteManager, "version/1/html/selectWords.html", null, "admin");
|
||||||
|
}
|
||||||
|
|
||||||
|
async onConstruct(args) {
|
||||||
|
let res = await super.onConstruct(args);
|
||||||
|
this.stats = (await DataManager.load("words"))["result"];
|
||||||
|
this.words = this.stats["wordsToCheck"];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
onFirstStart() {
|
||||||
|
super.onFirstStart();
|
||||||
|
this.findBy("#not-checked").appendChild(document.createTextNode(this.stats["wordsNotChecked"]));
|
||||||
|
this.findBy("#checked").appendChild(document.createTextNode(this.stats["wordsChecked"]));
|
||||||
|
this.findBy("#not-sure").appendChild(document.createTextNode(this.stats["wordsUnsure"]));
|
||||||
|
this.findBy("#deleted").appendChild(document.createTextNode(this.stats["wordsDeleted"]));
|
||||||
|
|
||||||
|
let template = this.findBy("#word-template");
|
||||||
|
template.id = null;
|
||||||
|
template.remove();
|
||||||
|
|
||||||
|
let container = this.findBy("#word-container");
|
||||||
|
|
||||||
|
let numWords = this.words.length;
|
||||||
|
for (let i = 0; i < numWords; i++) {
|
||||||
|
let wordElement = Helper.cloneNode(template);
|
||||||
|
wordElement.dataset["id"] = -1;
|
||||||
|
this.setWord(wordElement, this.words[i]);
|
||||||
|
container.appendChild(wordElement);
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-ok").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"1"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-unsure").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"2"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-delete").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"3"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setWord(wordElement, word){
|
||||||
|
console.log(wordElement, word);
|
||||||
|
wordElement.querySelector(".word").removeAllChildren().appendChild(document.createTextNode(word["word"]));
|
||||||
|
wordElement.dataset["id"] = word["id"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InitPromise.addPromise(app => {
|
||||||
|
app.addDefaultAction(new UserAction("select-words", () => {
|
||||||
|
app.startSite(SelectWordsSite);
|
||||||
|
}, null, null, "admin"));
|
||||||
|
});
|
||||||
|
|
||||||
let basePath = "/pwa/wordRotator/public/";
|
let basePath = "/pwa/wordRotator/public/";
|
||||||
if (window.location.pathname.includes("publicTest/"))
|
if (window.location.pathname.includes("publicTest/"))
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
1
public/version/1/html/selectWords.html
Normal file
1
public/version/1/html/selectWords.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<div><div class=row><div class="column small-6">Noch nicht geprüft:</div><div class="column small-6" id=not-checked></div><div class="column small-6">Gecheckt:</div><div class="column small-6" id=checked></div><div class="column small-6">Unsicher:</div><div class="column small-6" id=not-sure></div><div class="column small-6">Gelöscht:</div><div class="column small-6" id=deleted></div></div><br><br><div id=word-container><div id=word-template class=row><div class="column small-12"><span class=word></span> <span class=right><button class="button button-ok">OK</button> <button class="button button-unsure">Unsicher</button> <button class="button button-delete">Entf.</button></span></div></div></div></div>
|
||||||
@ -25,6 +25,7 @@ import {WordRotatorSettingFragment} from "../module/Application/pwa/js/Fragment/
|
|||||||
|
|
||||||
import {PrivacyPolicySite} from "../module/Application/pwa/js/site/PrivacyPolicySite";
|
import {PrivacyPolicySite} from "../module/Application/pwa/js/site/PrivacyPolicySite";
|
||||||
import {CreditsSite} from "../module/Application/pwa/js/site/CreditsSite";
|
import {CreditsSite} from "../module/Application/pwa/js/site/CreditsSite";
|
||||||
|
import {SelectWordsSite} from "../module/Application/pwa/js/site/SelectWordsSite";
|
||||||
|
|
||||||
applyPolyfills();
|
applyPolyfills();
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,12 @@ namespace Application;
|
|||||||
|
|
||||||
use Ainias\Core\Factory\Controller\ServiceActionControllerFactory;
|
use Ainias\Core\Factory\Controller\ServiceActionControllerFactory;
|
||||||
use Application\Controller\SyncController;
|
use Application\Controller\SyncController;
|
||||||
|
use Application\Controller\IndexController;
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'controllers' => [
|
'controllers' => [
|
||||||
'factories' => [
|
'factories' => [
|
||||||
Controller\IndexController::class => ServiceActionControllerFactory::class,
|
IndexController::class => ServiceActionControllerFactory::class,
|
||||||
SyncController::class => ServiceActionControllerFactory::class
|
SyncController::class => ServiceActionControllerFactory::class
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Application;
|
namespace Application;
|
||||||
|
|
||||||
|
use Application\Controller\IndexController;
|
||||||
use Zend\Router\Http\Segment;
|
use Zend\Router\Http\Segment;
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
@ -9,14 +10,25 @@ return array(
|
|||||||
'routes' => [
|
'routes' => [
|
||||||
'data' => [
|
'data' => [
|
||||||
'child_routes' => [
|
'child_routes' => [
|
||||||
'clock' => [
|
'words' => [
|
||||||
'type' => Segment::class,
|
'type' => Segment::class,
|
||||||
'options' => [
|
'options' => [
|
||||||
'route' => '/clock',
|
'route' => '/words',
|
||||||
'defaults' => [
|
'defaults' => [
|
||||||
'controller' => Controller\IndexController::class,
|
'controller' => IndexController::class,
|
||||||
'action' => 'clock',
|
'action' => 'selectWords',
|
||||||
'resource' => 'default',
|
'resource' => 'admin',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'checkWord' => [
|
||||||
|
'type' => Segment::class,
|
||||||
|
'options' => [
|
||||||
|
'route' => '/checkWord',
|
||||||
|
'defaults' => [
|
||||||
|
'controller' => IndexController::class,
|
||||||
|
'action' => 'changeChecked',
|
||||||
|
'resource' => 'admin',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
<div>
|
|
||||||
<p></p>
|
|
||||||
</div>
|
|
||||||
@ -15,5 +15,5 @@ export class CreditsSite extends WordRotatorBaseSite{
|
|||||||
}
|
}
|
||||||
|
|
||||||
InitPromise.addPromise(app => {
|
InitPromise.addPromise(app => {
|
||||||
app.addDeepLink("credits", PrivacyPolicySite);
|
app.addDeepLink("credits", CreditsSite);
|
||||||
});
|
});
|
||||||
75
src/module/Application/pwa/js/site/SelectWordsSite.js
Normal file
75
src/module/Application/pwa/js/site/SelectWordsSite.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import {Helper, InitPromise} from "../../../../../js/lib/pwa-lib";
|
||||||
|
import {UserAction, UserSite} from "../../../../../js/lib/pwa-user-management";
|
||||||
|
import {DataManager} from "../../../../../js/lib/pwa-core";
|
||||||
|
|
||||||
|
export class SelectWordsSite extends UserSite{
|
||||||
|
|
||||||
|
constructor(siteManager) {
|
||||||
|
super(siteManager, "version/1/html/selectWords.html", null, "admin");
|
||||||
|
}
|
||||||
|
|
||||||
|
async onConstruct(args) {
|
||||||
|
let res = await super.onConstruct(args);
|
||||||
|
this.stats = (await DataManager.load("words"))["result"];
|
||||||
|
this.words = this.stats["wordsToCheck"];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
onFirstStart() {
|
||||||
|
super.onFirstStart();
|
||||||
|
this.findBy("#not-checked").appendChild(document.createTextNode(this.stats["wordsNotChecked"]));
|
||||||
|
this.findBy("#checked").appendChild(document.createTextNode(this.stats["wordsChecked"]));
|
||||||
|
this.findBy("#not-sure").appendChild(document.createTextNode(this.stats["wordsUnsure"]));
|
||||||
|
this.findBy("#deleted").appendChild(document.createTextNode(this.stats["wordsDeleted"]));
|
||||||
|
|
||||||
|
let template = this.findBy("#word-template");
|
||||||
|
template.id = null;
|
||||||
|
template.remove();
|
||||||
|
|
||||||
|
let container = this.findBy("#word-container");
|
||||||
|
|
||||||
|
let numWords = this.words.length;
|
||||||
|
for (let i = 0; i < numWords; i++) {
|
||||||
|
let wordElement = Helper.cloneNode(template);
|
||||||
|
wordElement.dataset["id"] = -1;
|
||||||
|
this.setWord(wordElement, this.words[i]);
|
||||||
|
container.appendChild(wordElement);
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-ok").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"1"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-unsure").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"2"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
wordElement.querySelector(".button-delete").addEventListener("click", async () => {
|
||||||
|
let newWord = (await DataManager.send("checkWord", {
|
||||||
|
"wordId":wordElement.dataset["id"],
|
||||||
|
"action":"3"
|
||||||
|
}))["result"];
|
||||||
|
this.setWord(wordElement, newWord[0]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setWord(wordElement, word){
|
||||||
|
console.log(wordElement, word);
|
||||||
|
wordElement.querySelector(".word").removeAllChildren().appendChild(document.createTextNode(word["word"]));
|
||||||
|
wordElement.dataset["id"] = word["id"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InitPromise.addPromise(app => {
|
||||||
|
app.addDefaultAction(new UserAction("select-words", () => {
|
||||||
|
app.startSite(SelectWordsSite);
|
||||||
|
}, null, null, "admin"));
|
||||||
|
});
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
<div>
|
||||||
|
<p data-translation="credits-sister-text"></p>
|
||||||
|
<p data-translation="credits-coin-text" data-translation-args='["https://www.freesfx.co.uk/"]'></p>
|
||||||
|
<p data-translation="credits-music-text" data-translation-args='["https://audeeyah.de", "http://creativecommons.org/licenses/by/4.0/"]'></p>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="column small-6">Noch nicht geprüft:</div>
|
||||||
|
<div class="column small-6" id='not-checked'></div>
|
||||||
|
<div class="column small-6">Gecheckt:</div>
|
||||||
|
<div class="column small-6" id='checked'></div>
|
||||||
|
<div class="column small-6">Unsicher:</div>
|
||||||
|
<div class="column small-6" id='not-sure'></div>
|
||||||
|
<div class="column small-6">Gelöscht:</div>
|
||||||
|
<div class="column small-6" id='deleted'></div>
|
||||||
|
</div>
|
||||||
|
<br/><br/>
|
||||||
|
<div id="word-container">
|
||||||
|
<div id="word-template" class='row'>
|
||||||
|
<div class="column small-12">
|
||||||
|
<span class='word'></span>
|
||||||
|
<span class="right">
|
||||||
|
<button class='button button-ok'>OK</button>
|
||||||
|
<button class='button button-unsure'>Unsicher</button>
|
||||||
|
<button class='button button-delete'>Entf.</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -27,5 +27,9 @@
|
|||||||
">":">",
|
">":">",
|
||||||
"choose-theme-dialog-title":"Theme auswählen:",
|
"choose-theme-dialog-title":"Theme auswählen:",
|
||||||
"install":"Installieren",
|
"install":"Installieren",
|
||||||
"share-dialog":"Teilen:"
|
"share-dialog":"Teilen:",
|
||||||
|
|
||||||
|
"credits-sister-text":"Ich danke meiner Lieblingsschwester, denn ohne Sie würde diese App nicht so aussehen, wie sie aussieht (wahrscheinlich eher schlechter :p)",
|
||||||
|
"credits-coin-text":"Sound:<br/>Der Münz-Sound ist von der Webseite <a href = '{0}' target='_blank' rel='noopener' class = 'link'>{0}</a>. Alle Rechte für diesen Münz-Sound gehören <a target='_blank' rel='noopener' href = '{0}' class = 'link'>{0}</a>.",
|
||||||
|
"credits-music-text":"Musik:<br/>Bright And Beautiful - GEMAfreie Musik von <a href = '{0}' target='_blank' rel='noopener' class = 'link'>{0}</a><br/>Licensed under Creative Commons: By Attribution 4.0 International (CC BY 4.0)<br/><a href = '{1}' target='_blank' rel='noopener' class = 'link'>{1}</a><br/>Angepasst (geschnitten) für diese App"
|
||||||
}
|
}
|
||||||
@ -1,14 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace WordRotator\Controller;
|
namespace Application\Controller;
|
||||||
|
|
||||||
use Ainias\Core\Controller\OnlineController;
|
use Ainias\Core\Controller\OnlineController;
|
||||||
use Ainias\Core\Controller\ServiceActionController;
|
use Application\Model\Manager\WordManager;
|
||||||
|
use Application\Model\Word;
|
||||||
use Zend\View\Model\ViewModel;
|
use Zend\View\Model\ViewModel;
|
||||||
|
|
||||||
class IndexController extends OnlineController
|
class IndexController extends OnlineController
|
||||||
{
|
{
|
||||||
const LENGTH_WORDS_MIN = 12;
|
const LENGTH_WORDS_MIN = 6;
|
||||||
const LENGTH_WORDS_MAX = 12;
|
const LENGTH_WORDS_MAX = 12;
|
||||||
|
|
||||||
const NUMBER_WORDS_TO_CHECK_SIMULTANEOUSLY = 8;
|
const NUMBER_WORDS_TO_CHECK_SIMULTANEOUSLY = 8;
|
||||||
@ -34,16 +35,16 @@ class IndexController extends OnlineController
|
|||||||
|
|
||||||
$wordsToCheck = [];
|
$wordsToCheck = [];
|
||||||
for ($i = 0; $i < self::NUMBER_WORDS_TO_CHECK_SIMULTANEOUSLY; $i++) {
|
for ($i = 0; $i < self::NUMBER_WORDS_TO_CHECK_SIMULTANEOUSLY; $i++) {
|
||||||
$wordsToCheck[] = $wordManager->getRandomWordNotChecked(self::LENGTH_WORDS_MIN, self::LENGTH_WORDS_MAX);
|
$wordsToCheck[] = WordManager::wordToArray($wordManager->getRandomWordNotChecked(self::LENGTH_WORDS_MIN, self::LENGTH_WORDS_MAX));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ViewModel([
|
return [
|
||||||
"wordsNotChecked" => $wordsNotChecked,
|
"wordsNotChecked" => $wordsNotChecked,
|
||||||
"wordsDeleted" => $wordsDeleted,
|
"wordsDeleted" => $wordsDeleted,
|
||||||
"wordsChecked" => $wordsChecked,
|
"wordsChecked" => $wordsChecked,
|
||||||
"wordsUnsure" => $wordsUnsure,
|
"wordsUnsure" => $wordsUnsure,
|
||||||
"wordsToCheck" => $wordsToCheck,
|
"wordsToCheck" => $wordsToCheck,
|
||||||
]);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function changeCheckedAction()
|
public function changeCheckedAction()
|
||||||
@ -70,15 +71,8 @@ class IndexController extends OnlineController
|
|||||||
|
|
||||||
$randomWordNotChecked = $wordManager->getRandomWordNotChecked(self::LENGTH_WORDS_MIN, self::LENGTH_WORDS_MAX);
|
$randomWordNotChecked = $wordManager->getRandomWordNotChecked(self::LENGTH_WORDS_MIN, self::LENGTH_WORDS_MAX);
|
||||||
|
|
||||||
$this->layout("layout/ajaxData");
|
return [
|
||||||
$viewModel = new ViewModel();
|
WordManager::wordToArray($randomWordNotChecked),
|
||||||
$viewModel->setTemplate("ajax/json");
|
];
|
||||||
$viewModel->setVariable("json", [
|
|
||||||
"result" => true,
|
|
||||||
"data" => [
|
|
||||||
"newWord" => $wordManager->wordToArray($randomWordNotChecked),
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
return $viewModel;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,7 +78,7 @@ class WordManager extends StandardManager
|
|||||||
return $this->repository->countNewerThanDate($dateTime);
|
return $this->repository->countNewerThanDate($dateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function wordToArray(Word $word)
|
static function wordToArray(Word $word)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
"id" => $word->getId(),
|
"id" => $word->getId(),
|
||||||
|
|||||||
@ -53,13 +53,15 @@ class WordRepository extends StandardRepository
|
|||||||
$queryBuilder = $this->_em->createQueryBuilder();
|
$queryBuilder = $this->_em->createQueryBuilder();
|
||||||
$queryBuilder->select("w")->from(Word::class, "w");
|
$queryBuilder->select("w")->from(Word::class, "w");
|
||||||
|
|
||||||
|
$offset = rand(0,$numberWords-1);
|
||||||
|
|
||||||
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "0"));
|
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "0"));
|
||||||
$queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength"));
|
$queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength"));
|
||||||
$queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength"));
|
$queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength"));
|
||||||
$queryBuilder->setParameter("minLength", $minLength);
|
$queryBuilder->setParameter("minLength", $minLength);
|
||||||
$queryBuilder->setParameter("maxLength", $maxLength);
|
$queryBuilder->setParameter("maxLength", $maxLength);
|
||||||
$queryBuilder->setMaxResults(1);
|
$queryBuilder->setMaxResults(1);
|
||||||
$queryBuilder->setFirstResult(rand(0,$numberWords));
|
$queryBuilder->setFirstResult($offset);
|
||||||
|
|
||||||
$res = $queryBuilder->getQuery()->getResult();
|
$res = $queryBuilder->getQuery()->getResult();
|
||||||
if (is_array($res))
|
if (is_array($res))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user