Example #1
0
    /**
     * Display a textarea with validation for the entered aliases and expressions
     *
     * @param array          $arFieldInfo Information about the current input field
     * @param t3lib_tceforms $tceforms    Form rendering library object
     * @return string HTML code
     */
    public function textCombinations($arFieldInfo, t3lib_tceforms $tceforms)
    {
        $text = $tceforms->getSingleField_typeText($arFieldInfo['table'], $arFieldInfo['field'], $arFieldInfo['row'], $arFieldInfo);
        $evaluator = new Tx_Contexts_Context_Type_Combination_LogicalExpressionEvaluator();
        $arTokens = $evaluator->tokenize($arFieldInfo['itemFormElValue']);
        $arNotFound = array();
        $arUnknownTokens = array();
        foreach ($arTokens as $token) {
            if (is_array($token) && $token[0] === Tx_Contexts_Context_Type_Combination_LogicalExpressionEvaluator::T_VAR) {
                $contexts = Tx_Contexts_Context_Container::get()->initAll();
                $bFound = false;
                foreach ($contexts as $context) {
                    if ($context->getAlias() == $token[1]) {
                        $bFound = true;
                    }
                }
                if (!$bFound) {
                    $arNotFound[] = $token[1];
                }
            } elseif (is_array($token) && $token[0] === Tx_Contexts_Context_Type_Combination_LogicalExpressionEvaluator::T_UNKNOWN) {
                $arUnknownTokens[] = $token[1];
            }
        }
        if (!$arNotFound && !$arUnknownTokens) {
            return $text;
        }
        $html = <<<HTM
{$text}<br />
<div class="typo3-message message-error">
    <div class="message-body">
HTM;
        if ($arNotFound) {
            $strNotFound = implode(', ', $arNotFound);
            $html .= <<<HTM
<div>
    {$GLOBALS['LANG']->sL('LLL:EXT:contexts/Resources/Private/Language' . '/flexform.xml:aliasesNotFound')}: {$strNotFound}
</div>
HTM;
        }
        if ($arUnknownTokens) {
            $strUnknownTokens = implode(', ', $arUnknownTokens);
            $html .= <<<HTM
<div>
    {$GLOBALS['LANG']->sL('LLL:EXT:contexts/Resources/Private/Language' . '/flexform.xml:unknownTokensFound')}: {$strUnknownTokens}
</div>
HTM;
        }
        $html .= <<<HTM
    </div>
</div>
HTM;
        return $html;
    }
 /**
  * @dataProvider expressionValueProvider
  */
 public function testRebuild($expression, $rebuiltExpression, $values)
 {
     $evaluator = new Tx_Contexts_Context_Type_Combination_LogicalExpressionEvaluator();
     $evaluator->parse($evaluator->tokenize($expression));
     self::assertSame('(' . $rebuiltExpression . ')', $evaluator->rebuild(), 'Rebuild must be revised');
 }