Other various changes

This commit is contained in:
2025-04-04 15:27:16 -04:00
parent 6af5f2a3f8
commit f114843e4c
20 changed files with 231 additions and 190 deletions

View File

@ -12,9 +12,11 @@ use App\Entity\Bible;
use App\Entity\Speaker;
use App\Entity\Series;
use App\Entity\Note;
use App\Entity\NoteShares;
use App\Entity\SharedNote;
use App\Utils\Utils;
use Doctrine\DBAL\Exception\ReadOnlyException;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@ -54,7 +56,7 @@ class AjaxController extends AbstractController
$user = $this->getUser();
if($template_id) {
if ($template_id) {
$template = $emi->getRepository(Template::class)->find($template_id);
$template->setName($template_name);
$template->setContent($template_value);
@ -166,8 +168,12 @@ class AjaxController extends AbstractController
$ref = new Reference();
$ref->setType($data->type);
if(is_numeric($data->book)) {
if (is_numeric($data->book)) {
$ref->setNdx($data->book);
} elseif ($data->type == 'ld' || $data->type == 'hc') {
$type = substr($data->book, 0, 2);
$ref->setType($type);
$ref->setLabel($data->book);
}
ReferenceController::$emi = $emi;
@ -191,13 +197,27 @@ class AjaxController extends AbstractController
'note' => ReferenceController::retrieveNote($user)
};
if (!is_a($ret, Reference::class)) {
$ret = new Reference();
$ref = new Reference();
if (is_a($ret, Reference::class)) {
$ref = $ret;
}
if ($data->type == 'hc' && is_array($ret)) {
$ref->setLabel(
substr($ret[0]->getLabel(), 0, strpos($ret[0]->getLabel(), '-'))
);
$content = null;
foreach ($ret as $row) {
$content .= $row->getContent().PHP_EOL.PHP_EOL;
}
$ref->setContent($content);
}
$res->setContent(json_encode([
'text' => $ret->getContent(),
'title' => "{$ret->getLabel()}",
'text' => $ref->getContent(),
'title' => $ref->getLabel(),
]));
return $res;
@ -223,28 +243,12 @@ class AjaxController extends AbstractController
{
$res = new Response();
$data = json_decode($req->getContent());
$path = match($data->type) {
'creed' => 'Creeds',
'bc' => 'Belgic',
'hc' => 'Heidelberg',
'cd' => 'Dort',
'wcf' => 'Westminster/Confessions',
'wsc' => 'Westminster/Shorter Catechism',
'wlc' => 'Westminster/Larger Catechism',
'lbc' => 'London',
'39a' => '39 Articles',
'1hc' => '1 Helvetic Catechism',
'2hc' => '2 Helvetic Catechism',
'sd' => 'Savor Declaration',
'agc' => 'Augsburg Confession'
};
$ref = $emi->getRepository(Reference::class)->find($data->refId);
$ret = file_put_contents(dirname(dirname(__DIR__))."/references/{$path}/{$data->file}", $data->text);
if($ret !== false) {
$res->setContent(json_encode(['msg' => 'File Saved']));
} else {
$res->setContent(json_encode(['msg' => 'Failed to save file']));
if ($ref) {
$ref->setContent($data->text);
$emi->persist($ref);
$res = $this->json(['msg' => 'Reference updated.']);
}
return $res;
@ -371,10 +375,10 @@ class AjaxController extends AbstractController
}
if (is_array($shared) && count($shared) > 0) {
$ns = new NoteShares();
$ns = new SharedNote();
$ns->setNote($note)
->setOwner($user)
->setShare($shared[0]);
->setOwnerId($user->getId())
->setSharedUserId($shared[0]->getId());
$emi->persist($ns);
$emi->flush();
@ -434,7 +438,7 @@ class AjaxController extends AbstractController
if (is_array($ret)) {
$text = null;
foreach($ret as $b) {
foreach ($ret as $b) {
$text .= "{$b->getVerse()}. {$b->getContent()}".PHP_EOL;
}
$bible->setContent($text);
@ -477,16 +481,20 @@ class AjaxController extends AbstractController
$data->trackSaveSize = false;
}
$meta = $user->getMetaData();
$meta['saveInterval'] = $data->saveInterval;
$meta['saveReferences'] = $data->saveReferences;
$meta['noteTextSize'] = $data->noteTextSize;
$meta['trackSaveSize'] = $data->trackSaveSize;
$meta['saveTimeout'] = $data->saveTimeout;
$meta['save-failure-count'] = $data->saveFailureCount;
$user->setMetaData($meta);
$emi->persist($user);
$emi->flush();
try {
$meta = $user->getMetaData();
$meta['saveInterval'] = $data->saveInterval;
$meta['saveReferences'] = $data->saveReferences;
$meta['noteTextSize'] = $data->noteTextSize;
$meta['trackSaveSize'] = $data->trackSaveSize;
$meta['saveTimeout'] = $data->saveTimeout;
$meta['save-failure-count'] = $data->saveFailureCount;
$user->setMetaData($meta);
$emi->persist($user);
$emi->flush();
} catch (ReadOnlyException $e) {
return new Response('Read Only '.$_ENV['DATABASE_URL'], 403);
}
$res = new Response();
$res->setContent(json_encode([

View File

@ -4,6 +4,7 @@ namespace App\Controller;
use App\Entity\Note;
use App\Entity\User;
use App\Entity\SharedNote;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@ -17,9 +18,9 @@ class DefaultController extends AbstractController
public function index(): Response
{
if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->redirect('/index.php/home');
return $this->redirect('/home');
}
return $this->render('default/index.html.twig');
return $this->render('default/index.html.twig', ['onLoad' => null]);
}
#[Route('/home', name: 'app_home')]
@ -31,6 +32,7 @@ class DefaultController extends AbstractController
$meta = $user->getMetaData();
return $this->render('default/home.html.twig', [
'onLoad' => 'setHeight()',
'last4Notes' => $last4Notes,
'reverseNoteSort' => $openNotes,
'isAdmin' => $this->isGranted('ROLE_ADMIN'),
@ -45,7 +47,7 @@ class DefaultController extends AbstractController
}
#[Route('/profile', name: 'app_profile')]
public function profile(): Response
public function profile(EntityManagerInterface $emi): Response
{
/** @var User $user */
$user = $this->getUser();
@ -55,6 +57,7 @@ class DefaultController extends AbstractController
$meta = $user->getMetaData();
if (!$meta) {
$meta = [
'onLoad' => null,
'saveInterval' => 15,
'saveReferences' => 'checked',
'noteTextSize' => 12,
@ -67,8 +70,16 @@ class DefaultController extends AbstractController
$meta['trackSaveSize'] = $meta['trackSaveSize'] ? 'checked' : null;
}
$sharedWithMe = $emi->getRepository(SharedNote::class)->getNotesSharedWithMe($user);
$shared = $emi->getRepository(SharedNote::class)->getNotesSharedByMe($user);
dump($shared);
return $this->render('default/profile.html.twig', [
'onLoad' => 'rollUp("user");rollUp("settings")',
'meta' => $meta,
'sharedWithMe' => $sharedWithMe,
'shared' => $shared,
'user' => $this->getUser(),
]);
}

View File

@ -41,7 +41,7 @@ class ReferenceController extends AbstractController
$bible = self::$emi->getRepository(Bible::class)->findRange($bible, [$passage_start, $passage_end]);
$passage = "{$passage_start}-{$passage_end}";
$label = "{$bible[0]->getLabel()}\n{$bible[0]->getChapter()}:{$passage}";
$label = "{$bible[0]->getLabel()}\n{$bible[0]->getChapter()}\n{$passage}";
} elseif (is_int($passage)) {
$bible = self::$emi->getRepository(Bible::class)->findBy(['book' => $book, 'chapter' => $chapter, 'verse' => $passage]);
$label = "{$bible[0]->getLabel()}\n{$bible[0]->getChapter()}:{$passage}";
@ -52,9 +52,9 @@ class ReferenceController extends AbstractController
$passage = null;
}
if(is_array($bible)) {
if (is_array($bible)) {
$text = [];
foreach($bible as $b) {
foreach ($bible as $b) {
$text[] = "{$b->getVerse()}. {$b->getContent()}";
}
} else {
@ -93,15 +93,16 @@ class ReferenceController extends AbstractController
*
* @param Reference $ref
*
* @return Reference
* @return Reference|array
*/
public static function retrieveHC($ref): Reference
public static function retrieveHC(Reference $ref): Reference|array
{
$r = self::$emi->getRepository(Reference::class)->findBy(['type' => 'hc', 'ndx' => $ref->getNdx()]);
$r = self::$emi->getRepository(Reference::class)->findHeidelberg($ref->getLabel());
if (!$r) {
return new Reference();
}
return $r[0];
return $r;
}
/**
@ -114,7 +115,7 @@ class ReferenceController extends AbstractController
public static function retrieveBC($ref): Reference
{
$r = self::$emi->getRepository(Reference::class)->findBy(['type' => 'belgic', 'ndx' => $ref->getNdx()]);
if(!$r) {
if (!$r) {
return new Reference();
}
return $r[0];

View File

@ -19,6 +19,7 @@ class SecurityController extends AbstractController
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', [
'onLoad' => null,
'last_username' => $lastUsername,
'error' => $error,
]);

View File

@ -68,12 +68,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface, JsonSer
#[ORM\OneToMany(targetEntity: Note::class, mappedBy: 'user')]
private Collection $notes;
/**
* @var Collection<int, NoteShares>
*/
#[ORM\OneToMany(targetEntity: NoteShares::class, mappedBy: 'ownerId', orphanRemoval: true)]
private Collection $noteShares;
#[ORM\Column(nullable: true)]
private ?array $metaData = null;
@ -83,7 +77,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface, JsonSer
$this->speakers = new ArrayCollection();
$this->templates = new ArrayCollection();
$this->notes = new ArrayCollection();
$this->noteShares = new ArrayCollection();
}
public function getId(): ?Uuid
@ -319,36 +312,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface, JsonSer
];
}
/**
* @return Collection<int, NoteShares>
*/
public function getNoteShares(): Collection
{
return $this->noteShares;
}
public function addNoteShare(NoteShares $noteShare): static
{
if (!$this->noteShares->contains($noteShare)) {
$this->noteShares->add($noteShare);
$noteShare->setOwner($this);
}
return $this;
}
public function removeNoteShare(NoteShares $noteShare): static
{
if ($this->noteShares->removeElement($noteShare)) {
// set the owning side to null (unless already changed)
if ($noteShare->getOwner() === $this) {
$noteShare->setOwner(null);
}
}
return $this;
}
public function getMetaData(): ?array
{
return $this->metaData;

View File

@ -25,6 +25,35 @@ class ReferenceRepository extends ServiceEntityRepository
->getResult();
}
public function findHeidelberg($ref): array|Reference
{
if (substr($ref, 0, 2) == 'ld') {
$num = substr($ref, 2);
$qb = $this->createQueryBuilder('r');
$r = $qb->where($qb->expr()->like('r.label', ':ld'))
->setParameter('ld', "ld{$num}-%")
->getQuery()
->getResult()
;
} elseif (substr($ref, 0, 2) == 'hc') {
$num = substr($ref, 2);
$qb = $this->createQueryBuilder('r');
$r = $qb->where($qb->expr()->like('r.label', ':hc'))
->setParameter('hc', "%-hc{$num}")
->getQuery()
->getResult()
;
if(count($r) > 0) {
$r = $r[0];
$r->setLabel(implode("\n", explode("-", $r->getLabel())));
}
}
return $r;
}
// /**
// * @return Reference[] Returns an array of Reference objects
// */