first commit
This commit is contained in:
198
bundles/KupShop/PreordersBundle/Admin/preordersUsers.php
Normal file
198
bundles/KupShop/PreordersBundle/Admin/preordersUsers.php
Normal file
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
|
||||
namespace KupShop\PreordersBundle\Admin;
|
||||
|
||||
use KupShop\AdminBundle\Admin\UserMessagesAdminInterface;
|
||||
use KupShop\KupShopBundle\Email\UserMessagesInterface;
|
||||
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
|
||||
use KupShop\PreordersBundle\Email\UserPreorderEmail;
|
||||
use KupShop\PreordersBundle\Email\UserPreorderMessageEmail;
|
||||
use KupShop\PreordersBundle\Entity\NotifyState;
|
||||
use KupShop\PreordersBundle\Entity\UserPreorder;
|
||||
use KupShop\PreordersBundle\Entity\UserPreorderMessage;
|
||||
use KupShop\PreordersBundle\Service\DynamicContexts;
|
||||
use Query\Operator as Op;
|
||||
|
||||
class preordersUsers extends \Window implements UserMessagesAdminInterface
|
||||
{
|
||||
protected $tableName = 'preorders_items';
|
||||
private ?UserPreorder $userPreorder = null;
|
||||
private readonly DynamicContexts $contextsService;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->contextsService = ServiceContainer::getService(DynamicContexts::class);
|
||||
}
|
||||
|
||||
private function getUserPreorder(): UserPreorder
|
||||
{
|
||||
if ($this->userPreorder === null) {
|
||||
[$userId, $preorderDateId] = explode('-', $this->getID());
|
||||
$this->userPreorder = new UserPreorder((int) $userId, (int) $preorderDateId);
|
||||
}
|
||||
|
||||
return $this->userPreorder;
|
||||
}
|
||||
|
||||
protected function getObject(): array
|
||||
{
|
||||
$up = $this->getUserPreorder()->getTemplateVars();
|
||||
|
||||
usort($up['items'], fn ($i, $j) => $i['title'] <=> $j['title']);
|
||||
|
||||
return $up;
|
||||
}
|
||||
|
||||
public function get_vars(): array
|
||||
{
|
||||
$updateKeys = array_intersect(array_keys($_POST), ['SaveItemPieces', 'AddNewMessage']);
|
||||
|
||||
if (!empty($updateKeys)) {
|
||||
$this->forceUpdate();
|
||||
}
|
||||
|
||||
$vars = parent::get_vars();
|
||||
$body = &$vars['body'];
|
||||
$data = &$body['data'];
|
||||
|
||||
$userPreorder = $this->getUserPreorder();
|
||||
$this->contextsService->activateUserPreorder($userPreorder);
|
||||
|
||||
$body['isClosed'] = \DateTimeImmutable::createFromFormat('Y-m-d', $data['date_end'])
|
||||
<= (new \DateTimeImmutable())->sub(\DateInterval::createFromDateString('1 day'));
|
||||
|
||||
$body['messages'] = $userPreorder->getMessages();
|
||||
$body['custom_data'] = $userPreorder->getCustomData();
|
||||
$body['errors'] = $this->getItemErrors($data['items']);
|
||||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
private function getItemErrors(array $items): array
|
||||
{
|
||||
$errors = [];
|
||||
|
||||
foreach ($items as $item) {
|
||||
if (($item['has_variations'] ?? false) && empty($item['id_variation'])) {
|
||||
$errors[] = sprintf(
|
||||
translate('variationNotSelected', 'preordersUsers'),
|
||||
(int) $item['id'],
|
||||
$item['product_title'],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
public function hasRights($name = null): bool
|
||||
{
|
||||
switch ($name) {
|
||||
case \Window::RIGHT_DUPLICATE:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function handleUpdate(): void
|
||||
{
|
||||
$userPreorder = $this->getUserPreorder();
|
||||
|
||||
$data = $this->getData();
|
||||
if (!empty($data['user_address'])) {
|
||||
$customData = $userPreorder->getCustomData();
|
||||
$customData->set('user_address', $data['user_address']);
|
||||
$customData->save();
|
||||
}
|
||||
|
||||
if (getVal('SaveItemPieces', null, false) && $items = getVal('items')) {
|
||||
foreach ($items as $id => $item) {
|
||||
$userPreorder->setItem(
|
||||
$id,
|
||||
null,
|
||||
null,
|
||||
$item['pieces'],
|
||||
$item['pieces_sent'],
|
||||
);
|
||||
}
|
||||
|
||||
$this->returnOK('Kusy produktů uloženy.');
|
||||
}
|
||||
|
||||
if (getVal('AddNewMessage')) {
|
||||
$this->handleSendMessage();
|
||||
}
|
||||
|
||||
$this->returnOK();
|
||||
}
|
||||
|
||||
private function handleSendMessage(): void
|
||||
{
|
||||
$userMessages = $this->getUserPreorder()->getMessages();
|
||||
$text = getVal('new_message');
|
||||
if (!$text) {
|
||||
$this->returnError('Zpráva nebyla odeslána - žádný text.');
|
||||
}
|
||||
|
||||
$admin = getAdminUser();
|
||||
$newMessage = new UserPreorderMessage(
|
||||
text: $text,
|
||||
admin: $admin['login'] ?? 'NEZNÁMÝ ADMIN',
|
||||
);
|
||||
|
||||
$userMessages->add($newMessage);
|
||||
|
||||
if ($exception = $userMessages->save()) {
|
||||
$this->returnError('Nepodařilo se uložit zprávu. '.$exception->getMessage());
|
||||
}
|
||||
|
||||
if (!getVal('message_do_not_notify')) {
|
||||
if ($statusMessage = getVal('status_message')) {
|
||||
$emailService = ServiceContainer::getService(UserPreorderMessageEmail::class);
|
||||
$emailService->setUserMessage($statusMessage);
|
||||
} else {
|
||||
$emailService = ServiceContainer::getService(UserPreorderEmail::class);
|
||||
}
|
||||
|
||||
$email = $emailService->setUserPreorder($this->getUserPreorder())->setMessage($newMessage);
|
||||
|
||||
$emailRes = $emailService->sendEmail($email->getEmail());
|
||||
if (!$emailRes) {
|
||||
$this->returnError('Nepodařilo se poslat e-mail uživateli.');
|
||||
}
|
||||
|
||||
$newMessage->notified = NotifyState::EmailNotified;
|
||||
$userMessages->save();
|
||||
}
|
||||
|
||||
$this->returnOK('Zpráva úspěšně odeslána.');
|
||||
}
|
||||
|
||||
public function handleDelete(): void
|
||||
{
|
||||
$userPreorder = $this->getUserPreorder();
|
||||
$items = $userPreorder->getItems(true);
|
||||
$ids = array_column($items, 'id');
|
||||
|
||||
sqlQueryBuilder()->delete('preorders_items')
|
||||
->andWhere(Op::inIntArray($ids, 'id'))
|
||||
->execute();
|
||||
|
||||
sqlQueryBuilder()->delete('preorders_users_data')
|
||||
->andWhere(Op::equals([
|
||||
'id_preorder_date' => $userPreorder->preorderDateId,
|
||||
'id_user' => $userPreorder->userId,
|
||||
]))
|
||||
->execute();
|
||||
|
||||
redirect('launch.php?s=preordersUsers.php&acn=erased');
|
||||
}
|
||||
|
||||
public function getUserEmails(): UserMessagesInterface
|
||||
{
|
||||
return ServiceContainer::getService(UserPreorderMessageEmail::class)->setUserPreorder($this->userPreorder);
|
||||
}
|
||||
}
|
||||
|
||||
return preordersUsers::class;
|
||||
Reference in New Issue
Block a user