Spaces:
No application file
No application file
File size: 3,496 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
<?php
namespace Mautic\SmsBundle\Controller;
use Mautic\CoreBundle\Controller\AjaxController as CommonAjaxController;
use Mautic\CoreBundle\Controller\AjaxLookupControllerTrait;
use Mautic\CoreBundle\Helper\CacheStorageHelper;
use Mautic\EmailBundle\Model\EmailModel;
use Mautic\SmsBundle\Broadcast\BroadcastQuery;
use Mautic\SmsBundle\Event\TokensBuildEvent;
use Mautic\SmsBundle\Model\SmsModel;
use Mautic\SmsBundle\SmsEvents;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class AjaxController extends CommonAjaxController
{
use AjaxLookupControllerTrait;
public function getSmsCountStatsAction(Request $request, BroadcastQuery $broadcastQuery, CacheStorageHelper $cacheStorageHelper): JsonResponse
{
/** @var SmsModel $model */
$model = $this->getModel('sms');
$id = $request->get('id');
$ids = $request->get('ids');
// Support for legacy calls
if (!$ids && $id) {
$ids = [$id];
}
$data = [];
foreach ($ids as $id) {
if ($sms = $model->getEntity($id)) {
if ('list' !== $sms->getSmsType()) {
continue;
}
$pending = $broadcastQuery->getPendingCount($sms);
$cacheStorageHelper->set(sprintf('%s|%s|%s', 'sms', $sms->getId(), 'pending'), $pending);
if (!$pending) {
continue;
}
$data[] = [
'id' => $id,
'pending' => $this->translator->trans(
'mautic.sms.stat.leadcount',
['%count%' => $pending]
),
];
}
}
// Support for legacy calls
if ($request->get('id')) {
$data = $data[0];
} else {
$data = [
'success' => 1,
'stats' => $data,
];
}
return new JsonResponse($data);
}
public function getBuilderTokensAction(Request $request, EventDispatcherInterface $eventDispatcher = null): JsonResponse
{
$query = $request->get('query', '');
$tokens = $this->getBuilderTokens($query);
$event = new TokensBuildEvent($tokens);
$eventDispatcher->dispatch($event, SmsEvents::ON_SMS_TOKENS_BUILD);
return $this->sendJsonResponse(['tokens'=>$event->getTokens()]);
}
/**
* Just selected get tokens from email builder.
*
* @param string|null $query
*
* @return array<string,array<int|string>>
*/
protected function getBuilderTokens($query): array
{
/** @var EmailModel $model */
$model = $this->getModel('email');
$components = $model->getBuilderComponents(null, ['tokens'], $query);
$findTokens = ['{contactfield=', '{assetlink', '{pagelink'];
$returnTokens = [];
$tokens = $components['tokens'];
array_map(
function ($token, $value) use ($findTokens, &$returnTokens): void {
foreach ($findTokens as $findToken) {
if (str_starts_with($token, $findToken)) {
$returnTokens[$token] = $value;
}
}
}, array_keys($tokens), $tokens);
return $returnTokens;
}
}
|