update to pc
This commit is contained in:
@@ -26,6 +26,7 @@ import {WordRotatorSettingFragment} from "../module/Application/pwa/js/Fragment/
|
||||
import {PrivacyPolicySite} from "../module/Application/pwa/js/site/PrivacyPolicySite";
|
||||
import {CreditsSite} from "../module/Application/pwa/js/site/CreditsSite";
|
||||
import {SelectWordsSite} from "../module/Application/pwa/js/site/SelectWordsSite";
|
||||
import {DeleteWordsSite} from "../module/Application/pwa/js/site/DeleteWordsSite";
|
||||
|
||||
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;
|
||||
|
||||
use Ainias\Core\Controller\OnlineController;
|
||||
use Application\Model\Manager\LevelManager;
|
||||
use Application\Model\Manager\WordManager;
|
||||
use Application\Model\Word;
|
||||
use Zend\View\Model\ViewModel;
|
||||
@@ -75,4 +76,36 @@ class IndexController extends OnlineController
|
||||
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
|
||||
{
|
||||
/** @var LevelRepository */
|
||||
/** @var LevelRepository */
|
||||
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->wordManager = $wordManager;
|
||||
parent::__construct($repository, $entity);
|
||||
}
|
||||
|
||||
@@ -51,12 +55,12 @@ class LevelManager extends StandardManager
|
||||
return $this->repository->countNewerThanDate($dateTime);
|
||||
}
|
||||
|
||||
public function levelToArray(Level $level)
|
||||
static function levelToArray(Level $level)
|
||||
{
|
||||
return [
|
||||
"id" => $level->getId(),
|
||||
"words" => json_decode($level->getWords()),
|
||||
"rotations"=> json_decode($level->getPositions()),
|
||||
"rotations" => json_decode($level->getPositions()),
|
||||
"lastUpdated" => $level->getLastUpdated()->format("Y-m-d"),
|
||||
"language" => $level->getLang(),
|
||||
"rendererType" => $level->getRenderer(),
|
||||
@@ -65,14 +69,68 @@ class LevelManager extends StandardManager
|
||||
];
|
||||
}
|
||||
|
||||
public function levelsToArray($levels)
|
||||
static function levelsToArray($levels)
|
||||
{
|
||||
$returnArray = [];
|
||||
/** @var Level $level */
|
||||
foreach ($levels as $level)
|
||||
{
|
||||
$returnArray[] = $this->levelToArray($level);
|
||||
foreach ($levels as $level) {
|
||||
$returnArray[] = LevelManager::levelToArray($level);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
public function findWordsForLength($length)
|
||||
{
|
||||
$this->repository->findWordsForLength($length);
|
||||
}
|
||||
}
|
||||
@@ -128,4 +128,16 @@ class WordRepository extends StandardRepository
|
||||
$queryBuilder->setMaxResults(1);
|
||||
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;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="boolean")
|
||||
* @var bool
|
||||
*/
|
||||
protected $used;
|
||||
|
||||
/**
|
||||
* Word constructor.
|
||||
*/
|
||||
@@ -72,6 +78,7 @@ class Word extends StandardModel
|
||||
$this->lang = self::LANGUAGE_DE;
|
||||
$this->word = "";
|
||||
$this->checked = -1;
|
||||
$this->used = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -185,4 +192,20 @@ class Word extends StandardModel
|
||||
{
|
||||
$this->checked = $checked;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isUsed()
|
||||
{
|
||||
return $this->used;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $used
|
||||
*/
|
||||
public function setUsed($used)
|
||||
{
|
||||
$this->used = $used;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user