update to pc
This commit is contained in:
parent
7fc54547c4
commit
56d17ca07d
1
.idea/php.xml
generated
1
.idea/php.xml
generated
@ -91,4 +91,5 @@
|
|||||||
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
|
<component name="PhpProjectSharedConfiguration" php_language_level="7" />
|
||||||
</project>
|
</project>
|
||||||
@ -41,7 +41,8 @@
|
|||||||
"ainias/pwa-zf-core":"dev-es6 as 0.0.10",
|
"ainias/pwa-zf-core":"dev-es6 as 0.0.10",
|
||||||
"ainias/pwa-zf-contact": "dev-master as 0.0.10",
|
"ainias/pwa-zf-contact": "dev-master as 0.0.10",
|
||||||
"ainias/pwa-lib": "dev-es6 as 0.0.10",
|
"ainias/pwa-lib": "dev-es6 as 0.0.10",
|
||||||
"ainias/pwa-assets": "dev-es6 as 0.0.10"
|
"ainias/pwa-assets": "dev-es6 as 0.0.10",
|
||||||
|
"ext-json": "*"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|||||||
30890
orga/Word.sql
Normal file
30890
orga/Word.sql
Normal file
File diff suppressed because it is too large
Load Diff
@ -50,3 +50,8 @@ INSERT INTO RoleAccess(RoleId, AccessId) VALUES (1,3); -- gast - default
|
|||||||
INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,2); -- user - online
|
INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,2); -- user - online
|
||||||
INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,3); -- user - default
|
INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,3); -- user - default
|
||||||
INSERT INTO `RoleAccess` (`RoleId`, `AccessId`) VALUES (3, 4); -- admin - admin
|
INSERT INTO `RoleAccess` (`RoleId`, `AccessId`) VALUES (3, 4); -- admin - admin
|
||||||
|
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
ALTER TABLE Word ADD used TINYINT(1) NOT NULL;
|
||||||
@ -53,6 +53,7 @@ ALTER TABLE UserAccess ADD CONSTRAINT FK_26623A76A1A046DD FOREIGN KEY (AccessId)
|
|||||||
ALTER TABLE RequestNewPasswordCode ADD CONSTRAINT FK_27CF9C8BBF396750 FOREIGN KEY (id) REFERENCES Code (id) ON DELETE CASCADE;
|
ALTER TABLE RequestNewPasswordCode ADD CONSTRAINT FK_27CF9C8BBF396750 FOREIGN KEY (id) REFERENCES Code (id) ON DELETE CASCADE;
|
||||||
ALTER TABLE Rating ADD CONSTRAINT FK_D1189E24D9801611 FOREIGN KEY (levelId) REFERENCES Level (id);
|
ALTER TABLE Rating ADD CONSTRAINT FK_D1189E24D9801611 FOREIGN KEY (levelId) REFERENCES Level (id);
|
||||||
ALTER TABLE Rating ADD CONSTRAINT FK_D1189E24A1F3197E FOREIGN KEY (authTokenId) REFERENCES AuthToken (id);
|
ALTER TABLE Rating ADD CONSTRAINT FK_D1189E24A1F3197E FOREIGN KEY (authTokenId) REFERENCES AuthToken (id);
|
||||||
|
ALTER TABLE Word ADD used TINYINT(1) NOT NULL;
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO Role (name, beschreibung) VALUES ('gast', 'Kein aktives oder eingeloggtes Mitglied'); -- 1
|
INSERT INTO Role (name, beschreibung) VALUES ('gast', 'Kein aktives oder eingeloggtes Mitglied'); -- 1
|
||||||
@ -72,6 +73,7 @@ INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,3); -- user - default
|
|||||||
INSERT INTO `RoleAccess` (`RoleId`, `AccessId`) VALUES (3, 4); -- admin - admin
|
INSERT INTO `RoleAccess` (`RoleId`, `AccessId`) VALUES (3, 4); -- admin - admin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO `Level` (`id`, `words`, `positions`, `renderer`, `lastUpdated`, `lang`, `deleted`, `difficulty`) VALUES
|
INSERT INTO `Level` (`id`, `words`, `positions`, `renderer`, `lastUpdated`, `lang`, `deleted`, `difficulty`) VALUES
|
||||||
(15, '["ARCHIV","CHARME"]', '[1,1,3]', 20, '2018-07-14 17:01:18', 1, 0, 2),
|
(15, '["ARCHIV","CHARME"]', '[1,1,3]', 20, '2018-07-14 17:01:18', 1, 0, 2),
|
||||||
(26, '["BODENSEE","ALARMRUF"]', '[3,2,0,3]', 40, '2018-07-14 17:01:18', 1, 0, 40),
|
(26, '["BODENSEE","ALARMRUF"]', '[3,2,0,3]', 40, '2018-07-14 17:01:18', 1, 0, 40),
|
||||||
|
|||||||
1
orga/updateUsedFlagsSql.sql
Normal file
1
orga/updateUsedFlagsSql.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
UPDATE Word SET Word.used = 1 WHERE (SELECT count(*) FROM Level WHERE words LIKE CONCAT("%", Word.word, "%") AND deleted = 0) > 0
|
||||||
@ -7069,6 +7069,62 @@ InitPromise.addPromise(app => {
|
|||||||
}, null, null, "admin"));
|
}, null, null, "admin"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
class DeleteWordsSite extends UserSite {
|
||||||
|
constructor(siteManager) {
|
||||||
|
super(siteManager, "version/1/html/deleteLevels.html", null, "admin");
|
||||||
|
}
|
||||||
|
|
||||||
|
async onConstruct(args) {
|
||||||
|
let res = super.onConstruct(args);
|
||||||
|
this.words = (await DataManager.load("getDoubleUsedWordsAction"))["result"];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
onFirstStart() {
|
||||||
|
super.onFirstStart();
|
||||||
|
|
||||||
|
let levelTemplate = this.findBy("#level-template");
|
||||||
|
let wordTemplate = this.findBy("#word-template");
|
||||||
|
let wordContainer = this.findBy("#word-container");
|
||||||
|
|
||||||
|
levelTemplate.id = null;
|
||||||
|
levelTemplate.remove();
|
||||||
|
|
||||||
|
wordTemplate.id = null;
|
||||||
|
wordTemplate.remove();
|
||||||
|
|
||||||
|
for (let k in this.words) {
|
||||||
|
let wordElem = Helper.cloneNode(wordTemplate);
|
||||||
|
wordElem.querySelector(".name").appendChild(document.createTextNode(k));
|
||||||
|
let levelContainer = wordElem.querySelector(".level-container");
|
||||||
|
for (let j = 0; j < this.words[k].length; j++) {
|
||||||
|
let level = this.words[k][j];
|
||||||
|
let levelElem = Helper.cloneNode(levelTemplate);
|
||||||
|
levelElem.querySelector(".id").appendChild(document.createTextNode(level["id"]));
|
||||||
|
levelElem.querySelector(".words").appendChild(document.createTextNode(level["words"]));
|
||||||
|
levelElem.querySelector(".positions").appendChild(document.createTextNode(level["rotations"]));
|
||||||
|
|
||||||
|
levelElem.querySelector(".delete-button").addEventListener("click", async () => {
|
||||||
|
let res = await DataManager.send("deleteLevel", {"levelId": level["id"]});
|
||||||
|
if (res["success"]){
|
||||||
|
levelElem.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
levelContainer.appendChild(levelElem);
|
||||||
|
}
|
||||||
|
wordContainer.appendChild(wordElem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InitPromise.addPromise(app => {
|
||||||
|
app.addDefaultAction(new UserAction("delete-levels", () => {
|
||||||
|
app.startSite(DeleteWordsSite);
|
||||||
|
},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/"))
|
||||||
{
|
{
|
||||||
|
|||||||
1
public/version/1/html/deleteLevels.html
Normal file
1
public/version/1/html/deleteLevels.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<div><div id=level-template class=row><div class="columns small-3">id:</div><div class="column small-6 id"></div><div class="column small-3"><button class="clickable margin-0 delete-button">X</button></div><div class="columns small-3">words:</div><div class="column small-9 words"></div><div class="columns small-3">rotations:</div><div class="column small-9 positions"></div><div class="columns small-12" style="border-bottom: 1px solid black"> </div></div><div id=word-template style="margin-bottom: 1.5rem"><span class=name></span>:<br><div class=level-container></div></div><div id=word-container></div></div>
|
||||||
@ -26,6 +26,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";
|
import {SelectWordsSite} from "../module/Application/pwa/js/site/SelectWordsSite";
|
||||||
|
import {DeleteWordsSite} from "../module/Application/pwa/js/site/DeleteWordsSite";
|
||||||
|
|
||||||
applyPolyfills();
|
applyPolyfills();
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,28 @@ return array(
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'getDoubleWords' => [
|
||||||
|
'type' => Segment::class,
|
||||||
|
'options' => [
|
||||||
|
'route' => '/getDoubleUsedWordsAction',
|
||||||
|
'defaults' => [
|
||||||
|
'controller' => IndexController::class,
|
||||||
|
'action' => 'getDoubleUsedWords',
|
||||||
|
'resource' => 'admin',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'deleteLevel' => [
|
||||||
|
'type' => Segment::class,
|
||||||
|
'options' => [
|
||||||
|
'route' => '/deleteLevel',
|
||||||
|
'defaults' => [
|
||||||
|
'controller' => IndexController::class,
|
||||||
|
'action' => 'deleteLevel',
|
||||||
|
'resource' => 'admin',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
59
src/module/Application/pwa/js/site/DeleteWordsSite.js
Normal file
59
src/module/Application/pwa/js/site/DeleteWordsSite.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
import {UserAction, UserSite} from "../../../../../js/lib/pwa-user-management";
|
||||||
|
import {Helper, InitPromise} from "../../../../../js/lib/pwa-lib";
|
||||||
|
import {DataManager} from "../../../../../js/lib/pwa-core";
|
||||||
|
|
||||||
|
export class DeleteWordsSite extends UserSite {
|
||||||
|
constructor(siteManager) {
|
||||||
|
super(siteManager, "version/1/html/deleteLevels.html", null, "admin");
|
||||||
|
}
|
||||||
|
|
||||||
|
async onConstruct(args) {
|
||||||
|
let res = super.onConstruct(args);
|
||||||
|
this.words = (await DataManager.load("getDoubleUsedWordsAction"))["result"];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
onFirstStart() {
|
||||||
|
super.onFirstStart();
|
||||||
|
|
||||||
|
let levelTemplate = this.findBy("#level-template");
|
||||||
|
let wordTemplate = this.findBy("#word-template");
|
||||||
|
let wordContainer = this.findBy("#word-container");
|
||||||
|
|
||||||
|
levelTemplate.id = null;
|
||||||
|
levelTemplate.remove();
|
||||||
|
|
||||||
|
wordTemplate.id = null;
|
||||||
|
wordTemplate.remove();
|
||||||
|
|
||||||
|
for (let k in this.words) {
|
||||||
|
let wordElem = Helper.cloneNode(wordTemplate);
|
||||||
|
wordElem.querySelector(".name").appendChild(document.createTextNode(k));
|
||||||
|
let levelContainer = wordElem.querySelector(".level-container");
|
||||||
|
for (let j = 0; j < this.words[k].length; j++) {
|
||||||
|
let level = this.words[k][j];
|
||||||
|
let levelElem = Helper.cloneNode(levelTemplate);
|
||||||
|
levelElem.querySelector(".id").appendChild(document.createTextNode(level["id"]));
|
||||||
|
levelElem.querySelector(".words").appendChild(document.createTextNode(level["words"]));
|
||||||
|
levelElem.querySelector(".positions").appendChild(document.createTextNode(level["rotations"]));
|
||||||
|
|
||||||
|
levelElem.querySelector(".delete-button").addEventListener("click", async () => {
|
||||||
|
let res = await DataManager.send("deleteLevel", {"levelId": level["id"]});
|
||||||
|
if (res["success"]){
|
||||||
|
levelElem.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
levelContainer.appendChild(levelElem);
|
||||||
|
}
|
||||||
|
wordContainer.appendChild(wordElem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InitPromise.addPromise(app => {
|
||||||
|
app.addDefaultAction(new UserAction("delete-levels", () => {
|
||||||
|
app.startSite(DeleteWordsSite);
|
||||||
|
},null, null, "admin"))
|
||||||
|
});
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<div>
|
||||||
|
<div id = "level-template" class = "row">
|
||||||
|
<div class = "columns small-3">id:</div><div class="column small-6 id"></div><div class = 'column small-3'><button class = 'clickable margin-0 delete-button'>X</button></div>
|
||||||
|
<div class = "columns small-3">words:</div><div class="column small-9 words"></div>
|
||||||
|
<div class = "columns small-3">rotations:</div><div class="column small-9 positions"></div>
|
||||||
|
<div class = "columns small-12" style = 'border-bottom: 1px solid black'> </div>
|
||||||
|
</div>
|
||||||
|
<div id = "word-template" style="margin-bottom: 1.5rem">
|
||||||
|
<span class = "name"></span>:<br/>
|
||||||
|
<div class = "level-container"></div>
|
||||||
|
</div>
|
||||||
|
<div id = "word-container"></div>
|
||||||
|
</div>
|
||||||
@ -3,6 +3,7 @@
|
|||||||
namespace Application\Controller;
|
namespace Application\Controller;
|
||||||
|
|
||||||
use Ainias\Core\Controller\OnlineController;
|
use Ainias\Core\Controller\OnlineController;
|
||||||
|
use Application\Model\Manager\LevelManager;
|
||||||
use Application\Model\Manager\WordManager;
|
use Application\Model\Manager\WordManager;
|
||||||
use Application\Model\Word;
|
use Application\Model\Word;
|
||||||
use Zend\View\Model\ViewModel;
|
use Zend\View\Model\ViewModel;
|
||||||
@ -75,4 +76,36 @@ class IndexController extends OnlineController
|
|||||||
WordManager::wordToArray($randomWordNotChecked),
|
WordManager::wordToArray($randomWordNotChecked),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDoubleUsedWordsAction(){
|
||||||
|
/** @var LevelManager $levelManager */
|
||||||
|
$levelManager = $this->get(LevelManager::class);
|
||||||
|
return $levelManager->getDoubleUsedWords();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteLevelAction(){
|
||||||
|
$request = $this->getRequest();
|
||||||
|
|
||||||
|
if (!$request->isPost()) {
|
||||||
|
return $this->triggerDispatchError(403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$levelId = $request->getPost("levelId", "");
|
||||||
|
|
||||||
|
/** @var LevelManager $levelManager */
|
||||||
|
$levelManager = $this->get(LevelManager::class);
|
||||||
|
$level = $levelManager->getEntityById($levelId);
|
||||||
|
$level->setDeleted(true);
|
||||||
|
$level->setLastUpdated(new \DateTime());
|
||||||
|
|
||||||
|
$levelManager->save($level);
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateLevelsAction(){
|
||||||
|
/** @var LevelManager $levelManager */
|
||||||
|
$levelManager = $this->get(LevelManager::class);
|
||||||
|
$levelManager->generateLevels();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: silas
|
||||||
|
* Date: 17.10.18
|
||||||
|
* Time: 16:47
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Application\Factory\Model\Manager;
|
||||||
|
|
||||||
|
use Application\Model\Level;
|
||||||
|
use Application\Model\Manager\LevelManager;
|
||||||
|
use Application\Model\Manager\WordManager;
|
||||||
|
use Interop\Container\ContainerInterface;
|
||||||
|
use Zend\ServiceManager\Factory\FactoryInterface;
|
||||||
|
|
||||||
|
class LevelManagerFactory implements FactoryInterface
|
||||||
|
{
|
||||||
|
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
|
||||||
|
{
|
||||||
|
return $this->createService($container, $requestedName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createService(ContainerInterface $serviceLocator, $managerName)
|
||||||
|
{
|
||||||
|
$em = $serviceLocator->get('doctrine.entitymanager.orm_default');
|
||||||
|
/** @var WordManager $wordManager */
|
||||||
|
$wordManager = $serviceLocator->get(WordManager::class);
|
||||||
|
return new LevelManager($em->getRepository(Level::class), $wordManager);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -8,12 +8,16 @@ use Application\Model\Level;
|
|||||||
|
|
||||||
class LevelManager extends StandardManager
|
class LevelManager extends StandardManager
|
||||||
{
|
{
|
||||||
/** @var LevelRepository */
|
/** @var LevelRepository */
|
||||||
protected $repository;
|
protected $repository;
|
||||||
|
|
||||||
public function __construct(LevelRepository $repository, Level $entity = null)
|
/** @var WordManager */
|
||||||
|
protected $wordManager;
|
||||||
|
|
||||||
|
public function __construct(LevelRepository $repository, WordManager $wordManager, Level $entity = null)
|
||||||
{
|
{
|
||||||
$this->repository = $repository;
|
$this->repository = $repository;
|
||||||
|
$this->wordManager = $wordManager;
|
||||||
parent::__construct($repository, $entity);
|
parent::__construct($repository, $entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,12 +55,12 @@ class LevelManager extends StandardManager
|
|||||||
return $this->repository->countNewerThanDate($dateTime);
|
return $this->repository->countNewerThanDate($dateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function levelToArray(Level $level)
|
static function levelToArray(Level $level)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
"id" => $level->getId(),
|
"id" => $level->getId(),
|
||||||
"words" => json_decode($level->getWords()),
|
"words" => json_decode($level->getWords()),
|
||||||
"rotations"=> json_decode($level->getPositions()),
|
"rotations" => json_decode($level->getPositions()),
|
||||||
"lastUpdated" => $level->getLastUpdated()->format("Y-m-d"),
|
"lastUpdated" => $level->getLastUpdated()->format("Y-m-d"),
|
||||||
"language" => $level->getLang(),
|
"language" => $level->getLang(),
|
||||||
"rendererType" => $level->getRenderer(),
|
"rendererType" => $level->getRenderer(),
|
||||||
@ -65,14 +69,68 @@ class LevelManager extends StandardManager
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function levelsToArray($levels)
|
static function levelsToArray($levels)
|
||||||
{
|
{
|
||||||
$returnArray = [];
|
$returnArray = [];
|
||||||
/** @var Level $level */
|
/** @var Level $level */
|
||||||
foreach ($levels as $level)
|
foreach ($levels as $level) {
|
||||||
{
|
$returnArray[] = LevelManager::levelToArray($level);
|
||||||
$returnArray[] = $this->levelToArray($level);
|
|
||||||
}
|
}
|
||||||
return $returnArray;
|
return $returnArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDoubleUsedWords()
|
||||||
|
{
|
||||||
|
$words = [];
|
||||||
|
$sameWords = [];
|
||||||
|
|
||||||
|
/** @var Level[] $level */
|
||||||
|
$level = $this->findBy(["deleted" => 0]);
|
||||||
|
|
||||||
|
$levelNumber = count($level);
|
||||||
|
for ($i = 0; $i < $levelNumber; $i++) {
|
||||||
|
$words[$i] = $words[$i] ?? json_decode($level[$i]->getWords());
|
||||||
|
$wordLength = count($words[$i]);
|
||||||
|
for ($j = $i + 1; $j < $levelNumber; $j++) {
|
||||||
|
$words[$j] = $words[$j] ?? json_decode($level[$j]->getWords());
|
||||||
|
for ($k = 0; $k < $wordLength; $k++){
|
||||||
|
if (in_array($words[$i][$k], $words[$j])){
|
||||||
|
|
||||||
|
$sameWords[$words[$i][$k]] = ($sameWords[$words[$i][$k]] ?? []);
|
||||||
|
$sameWords[$words[$i][$k]][] = $level[$i];
|
||||||
|
$sameWords[$words[$i][$k]][] = $level[$j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($sameWords as $key => &$levels){
|
||||||
|
$sameWords[$key] = array_unique(LevelManager::levelsToArray($levels), SORT_REGULAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sameWords;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateLevels()
|
||||||
|
{
|
||||||
|
$levelsToGenerate = [
|
||||||
|
[
|
||||||
|
"wordLength" => 12,
|
||||||
|
"numWords" => 6,
|
||||||
|
"numPositions" => 21
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"wordLength" => 12,
|
||||||
|
"numWords" => 4,
|
||||||
|
"numPositions" => 15
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$words = [];
|
||||||
|
do {
|
||||||
|
$currentIndex = rand(0, count($levelsToGenerate) -1);
|
||||||
|
$words[$levelsToGenerate[$currentIndex]] = $words[$levelsToGenerate[$currentIndex]] ?? $this->wordManager->findWordsForLength($levelsToGenerate[$currentIndex]["wordLength"]);
|
||||||
|
|
||||||
|
}while(1 == 2);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -125,4 +125,9 @@ class WordManager extends StandardManager
|
|||||||
{
|
{
|
||||||
return $this->repository->countUnsure($minLength, $maxLength);
|
return $this->repository->countUnsure($minLength, $maxLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findWordsForLength($length)
|
||||||
|
{
|
||||||
|
$this->repository->findWordsForLength($length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -128,4 +128,16 @@ class WordRepository extends StandardRepository
|
|||||||
$queryBuilder->setMaxResults(1);
|
$queryBuilder->setMaxResults(1);
|
||||||
return $queryBuilder->getQuery()->getSingleScalarResult();
|
return $queryBuilder->getQuery()->getSingleScalarResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findWordsForLength($length)
|
||||||
|
{
|
||||||
|
$queryBuilder = $this->_em->createQueryBuilder();
|
||||||
|
$queryBuilder->select("w")->from(Word::class, "w");
|
||||||
|
|
||||||
|
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1"));
|
||||||
|
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "0"));
|
||||||
|
$queryBuilder->andWhere($queryBuilder->expr()->eq($queryBuilder->expr()->length("w.word"), ":length"));
|
||||||
|
$queryBuilder->setParameter("length", $length);
|
||||||
|
return $queryBuilder->getQuery()->getResult();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -60,6 +60,12 @@ class Word extends StandardModel
|
|||||||
*/
|
*/
|
||||||
protected $checked;
|
protected $checked;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="boolean")
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $used;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Word constructor.
|
* Word constructor.
|
||||||
*/
|
*/
|
||||||
@ -72,6 +78,7 @@ class Word extends StandardModel
|
|||||||
$this->lang = self::LANGUAGE_DE;
|
$this->lang = self::LANGUAGE_DE;
|
||||||
$this->word = "";
|
$this->word = "";
|
||||||
$this->checked = -1;
|
$this->checked = -1;
|
||||||
|
$this->used = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,4 +192,20 @@ class Word extends StandardModel
|
|||||||
{
|
{
|
||||||
$this->checked = $checked;
|
$this->checked = $checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isUsed()
|
||||||
|
{
|
||||||
|
return $this->used;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bool $used
|
||||||
|
*/
|
||||||
|
public function setUsed($used)
|
||||||
|
{
|
||||||
|
$this->used = $used;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user