Passed
Push — main ( 52a7ec...5410b3 )
by Torben
03:32
created

CountViewHelper::render()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 45
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 33
nc 1
nop 0
dl 0
loc 45
rs 9.392
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Extension "sf_event_mgt" for TYPO3 CMS.
7
 *
8
 * For the full copyright and license information, please read the
9
 * LICENSE.txt file that was distributed with this source code.
10
 */
11
12
namespace DERHANSEN\SfEventMgt\ViewHelpers\Category;
13
14
use TYPO3\CMS\Core\Context\Context;
15
use TYPO3\CMS\Core\Database\Connection;
16
use TYPO3\CMS\Core\Database\ConnectionPool;
17
use TYPO3\CMS\Core\Utility\GeneralUtility;
18
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
19
20
/**
21
 * Get usage count
22
 *
23
 * Example usage
24
 * {e:category.count(categoryUid:category.uid) -> f:variable(name: 'categoryUsageCount')}
25
 * {categoryUsageCount}
26
 */
27
class CountViewHelper extends AbstractViewHelper
28
{
29
    /**
30
     * Initialize arguments
31
     */
32
    public function initializeArguments(): void
33
    {
34
        parent::initializeArguments();
35
        $this->registerArgument('categoryUid', 'int', 'Uid of the category', true);
36
    }
37
38
    public function render(): int
39
    {
40
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
41
            ->getQueryBuilderForTable('tx_sfeventmgt_domain_model_event');
42
43
        $categoryUid = $this->arguments['categoryUid'];
44
        $languageUid = GeneralUtility::makeInstance(Context::class)->getAspect('language')->getId();
45
46
        return $queryBuilder
47
            ->count('tx_sfeventmgt_domain_model_event.title')
48
            ->from('tx_sfeventmgt_domain_model_event')
49
            ->rightJoin(
50
                'tx_sfeventmgt_domain_model_event',
51
                'sys_category_record_mm',
52
                'sys_category_record_mm',
53
                $queryBuilder->expr()->eq('tx_sfeventmgt_domain_model_event.uid', $queryBuilder->quoteIdentifier('sys_category_record_mm.uid_foreign'))
54
            )
55
            ->rightJoin(
56
                'sys_category_record_mm',
57
                'sys_category',
58
                'sys_category',
59
                $queryBuilder->expr()->eq('sys_category.uid', $queryBuilder->quoteIdentifier('sys_category_record_mm.uid_local'))
60
            )
61
            ->where(
62
                $queryBuilder->expr()->and(
63
                    $queryBuilder->expr()->eq(
64
                        'sys_category.uid',
65
                        $queryBuilder->createNamedParameter($categoryUid, Connection::PARAM_INT)
66
                    ),
67
                    $queryBuilder->expr()->eq(
68
                        'sys_category_record_mm.tablenames',
69
                        $queryBuilder->createNamedParameter('tx_sfeventmgt_domain_model_event')
70
                    ),
71
                    $queryBuilder->expr()->eq(
72
                        'sys_category_record_mm.fieldname',
73
                        $queryBuilder->createNamedParameter('category')
74
                    ),
75
                    $queryBuilder->expr()->in(
76
                        'tx_sfeventmgt_domain_model_event.sys_language_uid',
77
                        $queryBuilder->createNamedParameter([-1, $languageUid], Connection::PARAM_INT_ARRAY)
78
                    )
79
                )
80
            )
81
            ->executeQuery()
82
            ->fetchOne();
83
    }
84
}
85