Files
2025-08-02 16:30:27 +02:00

123 lines
4.1 KiB
PHP

<?php
namespace KupShop\CommentsBundle\Admin;
use KupShop\AdminBundle\Util\LegacyAdminCredentials;
use KupShop\CommentsBundle\Comment;
use KupShop\CommentsBundle\Util\CommentsUtil;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use Query\Operator;
class Comments extends \Window
{
/** @var CommentsUtil */
private $commentsUtil;
/** @var LegacyAdminCredentials */
private $adminCredentials;
protected $nameField = 'id';
private $objectId;
public function __construct()
{
$this->commentsUtil = ServiceContainer::getService(CommentsUtil::class);
$this->adminCredentials = ServiceContainer::getService(LegacyAdminCredentials::class);
}
public function get_vars()
{
$vars = parent::get_vars();
$vars['body']['type'] = empty($vars['body']['data']['id_article']) ? Comment::TYPE_PRODUCT : Comment::TYPE_ARTICLE;
$vars['body']['objectId'] = empty($vars['body']['data']['id_article']) ? $vars['body']['data']['id_product'] : $vars['body']['data']['id_article'];
$this->objectId = $vars['body']['objectId'];
switch ($vars['body']['type']) {
case Comment::TYPE_PRODUCT:
$this->show_on_web = Comment::TYPE_PRODUCT;
$product = new \Product();
$product->createFromDB($vars['body']['objectId']);
$vars['body']['object'] = $product;
break;
case Comment::TYPE_ARTICLE:
$this->show_on_web = Comment::TYPE_ARTICLE;
$vars['body']['object'] = sqlQueryBuilder()->select('title')->from('articles')
->where(Operator::equals(['id' => $vars['body']['data']['id_article']]))
->execute()->fetchOne();
break;
}
$vars['body']['children'] = sqlQueryBuilder()->select("id, CONCAT(SUBSTRING(REPLACE(content, '&nbsp;', ''), 1, 100), '...') content")
->from('comments')
->where(Operator::equals(['id_parent' => $this->getID()]))
->orderBy('date_add', 'ASC')
->execute()->fetchAllAssociative();
if (!empty($this->getCustomData()['history'])) {
$vars['body']['history'] = array_reverse($this->getCustomData()['history']);
}
if ($vars['body']['data']['id_user']) {
$vars['body']['data']['user'] = sqlQueryBuilder()->select('id, name, surname, email')
->from('users')->where(Operator::equals(['id' => $vars['body']['data']['id_user']]))
->execute()->fetchAssociative();
}
return $vars;
}
public function handleUpdate()
{
if ($this->getID()) {
$data = $this->getData();
$content = sqlQueryBuilder()->select('content')->from('comments')
->andWhere(Operator::equals(['id' => $this->getID()]))
->execute()->fetchOne();
if ($content != $data['content']) {
$custom_data = $this->getCustomData();
$format = \Settings::getDateFormat().' '.\Settings::getTimeFormat();
$custom_data['history'][] = ['date_updated' => date($format), 'admin' => $this->adminCredentials->getAdminName()];
$this->setCustomData($custom_data);
}
}
$SQL = parent::handleUpdate();
if ($SQL) {
$data = $this->getData();
if (!empty($data['reply'])) {
$this->commentsUtil->addComment(
(int) $data['objectId'],
$data['type'],
$data['reply'],
(int) $this->getID(),
null,
$data['id_language'],
$this->adminCredentials->getAdminID(),
Comment::STATUS_CONFIRMED
);
}
}
return $SQL;
}
public function getShowOnWeb()
{
$return = parent::getShowOnWeb();
if (!$this->objectId || !$return) {
return null;
}
$return['id'] = $this->objectId;
return $return;
}
}
return Comments::class;