Podglad treści maila
518412
public function previewAction()
    {
        //wyszukiwanie wiadomości
        if (null === $mail = (new \Cms\Orm\CmsMailQuery)->findPk($this->id)) {
            $this->getResponse()->redirect('cmsAdmin', 'mail', 'index');
        }
        $this->view->message = $mail->message;
    }
898837
protected function _getData()
    {
        //pobranie kolekcji rekordów
        $rawCollection = $this->_grid->getState()
            ->setupQuery($this->_grid->getQuery())
            //eksport maksimum 100k rekordów
            ->limit(100000)
            ->offset(null)
            ->find();
        $exportTable = [];
        //iteracja po kolekcji
        foreach ($rawCollection as $record) {
            $recordTable = [];
            //iteracja po kolumnach
            foreach ($this->_grid->getColumns() as $column) {
                if ('?' === $value = $column->getValueFromRecord($record)) {
                    //jeśli kolumna typu custom i eksportowalna
                    if ($column instanceof Column\CustomColumn && $column->getExporting()) {
                        $recordTable[] = $column->renderCell($record);
                    }
                    continue;
                }
                //kolumna to select ale nie checkbox
                if ($column instanceof Column\SelectColumn && !($column instanceof Column\CheckboxColumn)) {
                    $recordTable[] = html_entity_decode($column->renderCell($record));
                    continue;
                }
                //domyślnie przepisujemy wartość z rekordu
                $recordTable[] = $value;
            }
            $exportTable[] = $recordTable;
        }
        return $exportTable;
    }
248744
public function _insert()
    {
        //data dodania
        $this->dateAdd = date('Y-m-d H:i:s');
        //adres IP
        $this->ip = \Mmi\App\FrontController::getInstance()->getEnvironment()->remoteAddress;
        $this->active = 1;
        //zapis znanego użytkownika
        if (\App\Registry::$auth->hasIdentity()) {
            $this->cmsAuthId = \App\Registry::$auth->getId();
        }
        //namespace w sesji
        $namespace = new \Mmi\Session\SessionSpace('contact');
        $this->uri = $namespace->referer;
        //wysyłka do maila zdefiniowanego w opcjach
        $option = (new CmsContactOptionQuery)->findPk($this->cmsContactOptionId);
        //niepoprawna opcja
        if (!$option) {
            return false;
        }
        //wysyłka maila
        if ($option->sendTo) {
            \Cms\Model\Mail::pushEmail('admin_cms_contact', $option->sendTo, ['contact' => $this, 'option' => $option], null, $this->email);
        }
        return parent::_insert();
    }
310072
public function handleRequest()
    {
        //obsługa danych z POST
        $post = FrontController::getInstance()->getRequest()->getPost();
        //brak posta
        if ($post->isEmpty()) {
            return;
        }
        //niedozwolone na ACL (w edycji na polu operacje)
        if ($this->_checkbox->getGrid()->getColumn('_operation_') && !(new AclAllowed)->aclAllowed($this->_checkbox->getGrid()->getColumn('_operation_')->getOption('editParams'))) {
            return;
        }
        if ($this->_changeRecord($post)) {
            exit;
        }
    }
1301635
public function createComponentLoginForm() : Form
    {
        $form = new Form;

        $form->addText('email')
            ->setRequired('E-mail je povinný.')
            ->addRule(Form::EMAIL, 'E-mail není ve správném formátu.');

        $form->addPassword('password')
            ->setRequired('Heslo je povinné.');

        $form->addSubmit('login');

        $form->onValidate[] = function (Form $form) { $this->validate($form); };
        $form->onSuccess[] = function (Form $form) { $this->success($form); };

        return $form;
    }
1004280
public function configAction()
    {
        //wyszukiwanie kategorii
        if ((null === $category = (new \Cms\Orm\CmsCategoryQuery)->findPk($this->categoryId)) || $category->status != \Cms\Orm\CmsCategoryRecord::STATUS_DRAFT) {
            return;
        }
        //wyszukiwanie widgeta
        if (null === $widgetRecord = (new \Cms\Orm\CmsCategoryWidgetQuery)->findPk($this->widgetId)) {
            //brak widgeta
            return;
        }
        //wyszukiwanie relacji do edycji
        if (null === $widgetRelationRecord = (new \Cms\Orm\CmsCategoryWidgetCategoryQuery)
            ->whereCmsCategoryId()->equals($this->categoryId)
            ->andFieldCmsCategoryWidgetId()->equals($widgetRecord->id)
            ->findPk($this->id)) {
            //nowy rekord relacji
            $widgetRelationRecord = new \Cms\Orm\CmsCategoryWidgetCategoryRecord();
            //parametry relacji
            $widgetRelationRecord->cmsCategoryWidgetId = $widgetRecord->id;
            $widgetRelationRecord->cmsCategoryId = $this->categoryId;
            //maksymalna wartość posortowania
            $maxOrder = (new \Cms\Orm\CmsCategoryWidgetCategoryQuery)
                ->whereCmsCategoryId()->equals($this->categoryId)
                ->findMax('order');
            $widgetRelationRecord->order = $maxOrder !== null ? $maxOrder + 1 : 0;
        }
        //rekord widgeta do widoku
        $this->view->widgetRecord = $widgetRecord;
        //rekord do formularza to rekord wiązania
        $record = $widgetRelationRecord;
        //domyślna klasa formularza
        $widgetRecord->formClass = $widgetRecord->formClass ? : '\CmsAdmin\Form\CategoryAttributeWidgetForm';
        //instancja formularza
        $form = new $widgetRecord->formClass($record, ['widgetId' => $widgetRecord->id]);
        //wartości z zapisanej konfiguracji
        $formValues = $widgetRelationRecord->getConfig()->toArray();
        //nadpisanie wartościami z POSTA, jeśli zosały przesłane
        if (!$this->getPost()->isEmpty() && is_array($this->getPost()->__get($form->getBaseName()))) {
            $formValues = array_merge($formValues, $this->getPost()->__get($form->getBaseName()));
        }
        $form->setFromArray($formValues);
        //form zapisany
        if ($form->isSaved()) {
            //zapis konfiguracji
            $widgetRelationRecord->setConfigFromArray($record->getOptions());
            $this->getResponse()->redirect('cmsAdmin', 'categoryWidgetRelation', 'config');
        }
        //form do widoku
        $this->view->widgetRelationForm = $form;
    }
102318
public function indexAction()
    {
        $config = clone (\App\Registry::$config);
        //za długie dane do wyświetlenia
        $config->navigation = self::THREE_DOTS;
        $config->router = self::THREE_DOTS;
        $this->view->config = \Mmi\Http\ResponseDebugger\Colorify::colorify(print_r($config, true));
        $this->view->server = \Mmi\Http\ResponseDebugger\Colorify::colorify(print_r($_SERVER, true));
    }
527239
public function template($input)
    {
        //buforowanie renderowanie szablonu
        $input = preg_replace_callback('/\{\'([a-zA-Z\-\/]+)\'\}/', [&$this, '_render'], $input);

        /**
         * obsługa klamr
         * obsługa zakończeń linii windows
         * komentarzy
         */
        $input = str_replace([
            '{{$',
            '{{',
            '}}',
            "\r\n",
            '{*',
            '*}',
        ], [
            '__-angular-controller-__',
            '__-angular-start-__',
            '__-angular-end-__',
            "\n",
            '<?php /*',
            '*/ ?>',
        ], $input);

        //buforowanie linkowanie aplikacji
        $input = preg_replace_callback('/\{@([\*]+)?(.[^@\^]+)?[\^]?(.[^@\^]+)?@\}/', [&$this, '_url'], $input);

        //zmiana zmiennych obiektowych w linkach np. $request->test
        $input = preg_replace_callback('/%7B((%3E|%28|%29|%24)?([a-zA-Z\.\-\_\[\]\'\"\(\)]+)?)+%7D/', [&$this, '_routerLinks'], $input);

        //zmiana zmiennych skalarnych lub tablicowych w linkach np. $requestTest
        $input = preg_replace('/%7B%24([a-z0-9A-Z\.\-\_\[\]\'\"\(\)]+)%7D/', '{$$1}', $input);

        //buforowanie tłumaczeń
        $input = preg_replace_callback('/\{\#(.[^#]+)#\}/', [&$this, '_translate'], $input);

        //buforowanie wstawień tekstów statycznych
        $input = preg_replace_callback('/\{\=(.[^=]+)\=\}/', [&$this, '_text'], $input);

        //filtry na zmiennych (filtry widoku)
        $input = preg_replace_callback('/(\$[a-z0-9_\[\]\'\"\-\>]+)(\|(.[^}^{^)^(]+))+/i', [&$this, '_filter'], $input);

        //obsługa tagów Mmi
        $input = preg_replace([
            '/\$([a-z0-9_-]+)/i', //$zmienna -> $this->zmienna
            '/\{\/(if|for|foreach|while)\}/', //końcówki struktur językowych
            '/\{(break|continue)\}/', //break continue
            '/\{return\}/', //wyjście
            '/\{(if|elseif|foreach|for|while)([^\}]+)\}/', //struktury językowe
            '/([a-z0-9_-]+)\(/i', //funkcja( -> $this->funkcja(
            '/\$this->(array)\(/', //naprawianie array
            '/\$this->([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)/i', //tabele po kropce
            '/\$this->([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)/i', //tabele po kropce
            '/\$this->([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)/i', //tabele po kropce
            '/\->\$this->/', //naprawianie metod
            '/\:\:\$this->/', //naprawianie staticów
            '/\{else\}/', //else
            '/\{\$this->([a-z0-9_-]+)([\s]?\=)/i', //przypisanie wartości do zmiennej
            '/\{\$this->([a-z0-9_-]+)([\s]?\+\=|\-\=|\+\+|\-\-|\*\=)/i', //przypisanie wartości do zmiennej
            '/\{\$this->([a-z0-9_-]+)/i', //wyświetlanie pól
            '/\{\$this->php_([a-z0-9_-]+)\(/i', //wyświetlanie funkcji php
            '/\$this->php_([a-z0-9_-]+)\(/i', //zamiana na funkcje php wbudowane
            '/\{\$this->system_([a-z0-9_-]+)\(/i', //wyświetlanie funkcji php
            '/\$this->system_([a-z0-9_-]+)\(/i', //zamiana na funkcje php wbudowane
            '/\{\$this->([a-z0-9_-]+)\(/i', //wyświetlanie helperów
            '/([a-z0-9)\]\'\+\-])}/i', //obsługa zamknięcia
            '/\{\$\$this->([a-z0-9_-]+)/i', //$nazwa -> $this->{$this->nazwa}
        ], [
            '$this->${1}',
            '<?php end${1}; ?>',
            '<?php ${1}; ?>',
            '<?php return; ?>',
            '<?php ${1} (${2}): ?>',
            '$this->${1}(',
            '${1}(',
            '$this->${1}[\'${2}\'][\'${3}\'][\'${4}\']',
            '$this->${1}[\'${2}\'][\'${3}\']',
            '$this->${1}[\'${2}\']',
            '->',
            '::$',
            '<?php else: ?>',
            '<?php \$this->${1} ${2} ',
            '<?php \$this->${1}${2}',
            '<?php echo \$this->${1}',
            '<?php echo ${1}(',
            '${1}(',
            '<?php echo ${1}(',
            '${1}(',
            '<?php echo \$this->${1}(',
            '${1}; ?>',
            '<?php echo \$this->{$this->${1}}',
        ], $input);

        /**
         * first i last w pętlach foreach
         * uwaga: source i count są zmiennymi lokalnymi niewidocznymi z poziomu view
         */
        $input = preg_replace([
            '/\<\?php foreach[\s]+?\([\s]+?name=[\'\"]?([a-z0-9]+)[\'\"]? (\$this[\>\(\)a-z0-9_\-\[\]\'\"]+) as (\$this->[a-z0-9_\-]+)\):/i',
            '/\<\?php foreach[\s]+?\([\s]+?name=[\'\"]?([a-z0-9]+)[\'\"]? (\$this[\>\(\)a-z0-9_\-\[\]\'\"]+) as (\$this->[a-z0-9_\-]+) => (\$this->[a-z0-9_\-]+)\):/i'
        ], [
            '<?php $_${1}Source = ${2}; $_${1}Count = count((array)$_${1}Source); $this->_${1}Index = 0; foreach ( $_${1}Source as ${3}): $this->_${1}Index++; $this->_${1}First = false; $this->_${1}Last = false; if ($this->_${1}Index == 1) { $this->_${1}First = true; } else { $this->_${1}First = false; } if ($this->_${1}Index == $_${1}Count) { $this->_${1}Last = true; } else { $this->_${1}Last = false; } if($this->_${1}Index % 2 == 0) { $this->_${1}Even = true; } else { $this->_${1}Even = false; }',
            '<?php $_${1}Source = ${2}; $_${1}Count = count((array)$_${1}Source); $this->_${1}Index = 0; foreach ( $_${1}Source as ${3} => ${4}): $this->_${1}Index++; $this->_${1}First = false; if ($this->_${1}Index == 1) { $this->_${1}First = true; } else { $this->_${1}First = false; } if ($this->_${1}Index == $_${1}Count) { $this->_${1}Last = true; } else { $this->_${1}Last = false; }'
        ], $input);

        /**
         * odzyskuje klamry
         */
        $input = str_replace([
            '__-angular-controller-__',
            '__-angular-start-__',
            '__-angular-end-__',
        ], [
            '{{$',
            '{{',
            '}}',
        ], $input);

        //fix dla funkcji JS'owych - badanie krótkich pod-ciągów
        $output = '';
        $php = false;
        for ($i = 0, $length = strlen($input); $i < $length; $i++) {
            if ($length > ($i + 5) && substr($input, $i, 5) == '<?php') {
                $php = true;
            } elseif ($length > ($i + 2) && substr($input, $i, 2) == '?>') {
                $php = false;
            }
            if (!$php && $length > ($i + 7) && substr($input, $i, 7) == '$this->') {
                $i += 7;
            }
            $output .= $input[$i];
        }
        return $output;
    }
964130
public function getTagRelations()
    {
        //pobranie relacji
        return (new CmsTagRelationQuery)
                ->join('cms_tag')->on('cms_tag_id')
                ->whereObject()->equals($this->_object)
                ->andFieldObjectId()->equals($this->_objectId)
                ->findPairs('cms_tag.id', 'cms_tag.tag');
    }
1195956
public function passCsv()
    {
        $csv = fopen('php://output', 'w');
        //nagłówek CSV
        fputcsv($csv, $this->_getHeader());
        //iteracja po danych
        foreach ($this->_getData() as $data) {
            //zapis linii CSV
            fputcsv($csv, $data);
        }
        fclose($csv);
    }
1047125
public function updateAction()
    {
        $msg = $this->view->getTranslate()->_('Zmiana właściwości nie powiodła się.');
        $this->getResponse()->setTypePlain();
        $params = explode('-', $this->id);

        //błędne dane wejściowe
        if (!($this->getPost()->selected) || count($params) != 3) {
            return $msg;
        }
        $record = (new \Cms\Orm\CmsAclQuery)->findPk($params[2]);
        if (!$record) {
            return $msg;
        }
        //zmiana zasobu
        if ($params[1] == 'resource') {
            $resource = [];
            parse_str($this->getPost()->selected, $resource);
            $record->module = strtolower($resource['module']);
            $record->controller = isset($resource['controller']) ? strtolower($resource['controller']) : null;
            $record->action = isset($resource['action']) ? strtolower($resource['action']) : null;
        } else {
            //zmiana uprawnienia z allow na deny lub odwrotnie
            $record->access = $this->getPost()->selected == 'allow' ? 'allow' : 'deny';
        }
        $record->save();
        return 1;
    }
1243994
public function isVisible()
    {
        //jeśli nie jest aktywna
        if (!$this->active) {
            return false;
        }
        //jeśli status różny od aktywna (bieżąca)
        if ($this->status != \Cms\Orm\CmsCategoryRecord::STATUS_ACTIVE) {
            return false;
        }
        //nie osiągnięto czasu publikacji
        if (null !== $this->dateStart && $this->dateStart > date('Y-m-d H:i:s')) {
            return false;
        }
        //przekroczono czas publikacji
        if (null !== $this->dateEnd && $this->dateEnd < date('Y-m-d H:i:s')) {
            return false;
        }
        return true;
    }
742233
public function callbackSubmit()
    {
        // Get values from the submitted form
        $title          = $this->form->value("title");
        $tags           = $this->getHashtags($this->form->value("tags"));
        $text       = $this->form->value("text");

        if (!$this->di->get('session')->has("user")) {
            $this->form->addOutput("Du behöver logga in");
            return false;
        }

        if ($text == "") {
            $this->form->addOutput("Du skrev aldrig något. Skriv gärna något.");
            return false;
        }

        if (!$tags) {
            $this->form->addOutput("
            <p>Din fråga skickades inte:</p>
            <p>Antingen så angav du inga taggar, eller så angav du en ogiltig.</p>
            <p>Nordiska bokstäver är ej tillåtna i tags, använd istället a för ä t.ex.</p>
            <p>Tips:</p>
            <p>Du taggar genom att göra en hashtag, #mintag.</p>
            <p>#hej pa dig #kaffe <--- kommer att bli #hej #kaffe</p>

            <input type='submit' id='accept' value=Ok>
            <script>
            $( document ).ready(function() {
                $('#accept').click(function () {
                    $('output').remove();
                });

            });
            </script>
            ");
            return false;
        }


        $user = $this->di->get('session')->get("user"); # get user name

        $question = new Question($this->di->get("db"));
        $question->user       = $user;
        $question->title      = $title;
        $question->tags       = $tags;
        $question->save();


        $post     = new Post($this->di->get("db"));
                $post->user       = $user;
        $post->questionId = $question->id;
        $post->text       = $text;
        $post->type       = "question";
        $post->accepted   = "no";
        $post->save();


        $this->form->addOutput("Du skapade en fråga! Du bör se den nedan");
        return true;
    }
1221769
function getBodyItems (privateKey, currentDate, uid, items) {
  return {
    Hlavicka: getHeaderItems(uid, currentDate, items.prvniZaslani, items.overeni),
    Data: getDataItems(items),
    KontrolniKody: getFooterItems(privateKey, items)
  }
}
389268
public function send($headers = true)
    {
        //wysłanie nagłówków
        $headers ? $this->sendHeaders() : null;
        //opcjonalne uruchomienie panelu deweloperskiego
        if ($this->_debug) {
            //debugger wykonuje zmianę w contencie
            new \Mmi\Http\ResponseDebugger;
        }
        //zwrot zawartości
        echo $this->_content;
        //usunięcie zawartości
        return $this->setContent('');
    }
31090
public function outInvoicesMatchingByBank()
    {
        $this->getInvoicer();
        foreach ($this->getPaymentsToProcess($this->daysBack, 'in') as $paymentData) {

            $this->addStatusMessage(sprintf('Processing Payment %s %s %s vs: %s ss: %s %s',
                    $paymentData['kod'], $paymentData['sumCelkem'],
                    \FlexiPeeHP\FlexiBeeRO::uncode($paymentData['mena']),
                    $paymentData['varSym'], $paymentData['specSym'],
                    $this->banker->url.'/c/'.$this->banker->company.'/'.$this->banker->getEvidence().'/'.$paymentData['id']),
                'info');


            $invoices = $this->findInvoices($paymentData);
//  kdyz se vrati jedna faktura:
//     kdyz  je prijata castka mensi nebo rovno tak zlikviduji celou
//     kdyz sedi castka, nebo castecne
//  kdyz se vrati vic faktur  tak kdyz sedi castka uhrazuje se ta nejstarsi
//  jinak se uhrazuje castecne

            if (count($invoices) && count(current($invoices))) {
                $prijatoCelkem = floatval($paymentData['sumCelkem']);
                $payment       = new \FlexiPeeHP\Banka($paymentData,
                    $this->config);

                foreach ($invoices as $invoiceID => $invoiceData) {

                    $typDokl                = $invoiceData['typDokl'][0];
                    $docType                = $typDokl['typDoklK'];
                    $invoiceData['typDokl'] = \FlexiPeeHP\FlexiBeeRO::code($typDokl['kod']);

                    $invoice = new \FlexiPeeHP\FakturaVydana($invoiceData,
                        $this->config);

                    /*
                     *    Standardní faktura (typDokladu.faktura)
                     *    Dobropis/opravný daň. d. (typDokladu.dobropis)
                     *    Zálohová faktura (typDokladu.zalohFaktura)
                     *    Zálohový daňový doklad (typDokladu.zdd)
                     *    Dodací list (typDokladu.dodList)
                     *    Proforma (neúčetní) (typDokladu.proforma)
                     *    Pohyb Kč / Zůstatek Kč (typBanUctu.kc)
                     *    Pohyb měna / Zůstatek měna (typBanUctu.mena)
                     */
                    $matched = false;
                    switch ($docType) {
                        case 'typDokladu.zalohFaktura':
                        case 'typDokladu.faktura':
                            $matched = $this->settleInvoice($invoice, $payment);
                            break;
                        case 'typDokladu.proforma':
                            $matched = $this->settleProforma($invoice,
                                $paymentData);
                            break;
                        case 'typDokladu.dobropis':
                            $matched = $this->settleCreditNote($invoice,
                                $paymentData);
                            break;

                        default:
                            $this->addStatusMessage(
                                sprintf(_('Unsupported document type: %s %s'),
                                    $typDokl['typDoklK@showAs'].' ('.$docType.'): '.$invoiceData['typDokl'],
                                    $invoice->getApiURL()
                                ), 'warning');
                            break;
                    }

                    if ($matched && $this->savePayerAccount($invoice->getDataValue('firma'),
                            $payment)) {
                        $this->addStatusMessage(sprintf(_('new Bank account %s assigned to Address %s'),
                                $payment->getDataValue('buc').'/'.\FlexiPeeHP\FlexiBeeRO::uncode($payment->getDataValue('smerKod')),
                                $invoice->getDataValue('firma@showAs')));
                    }

                    $this->banker->loadFromFlexiBee($paymentData['id']);
                    if ($this->banker->getDataValue('sparovano') == true) {
                        break;
                    }
                }
            } else {

                if (!empty($paymentData['varSym'])) {
                    if (!empty($paymentData['varSym'])) {
                        $vInvoices = $this->searchInvoices(['varSym' => $paymentData['varSym']]);
                    }
                }
                if (!empty($paymentData['specSym'])) {
                    if (!empty($paymentData['specSym'])) {
                        $sInvoices = $this->searchInvoices(['specSym' => $paymentData['specSym']]);
                    }
                }

//                if ($vInvoices || $sInvoices) {
////                    $zdd = $this->paymentToZDD($payment);
////                    if ($zdd) {
////                        $this->addStatusMessage(sprinf(_('advance tax document created'),
////                                \FlexiPeeHP\FlexiBeeRO::uncode($zdd)));
////                    }
//
//                    $this->addStatusMessage(_('Invoice found: - overdue?'),
//                        'warning');
//                }
            }
        }
    }
1129372
public function dispatchAction()
    {
        //pobranie kategorii
        $category = $this->_getPublishedCategoryByUri($this->uri);
        //wpięcie kategorii do głównego widoku aplikacji
        FrontController::getInstance()->getView()->category = $category;
        //klucz bufora
        $cacheKey = 'category-html-' . $category->id;
        //buforowanie dozwolone
        $bufferingAllowed = $this->_bufferingAllowed();
        //wczytanie zbuforowanej strony (dla niezalogowanych i z pustym requestem)
        if ($bufferingAllowed && (null !== $html = \App\Registry::$cache->load($cacheKey))) {
            //wysyłanie nagłówka o buforowaniu strony
            $this->getResponse()->setHeader('X-Cache', 'HIT');
            //zwrot html
            return $this->_decorateHtmlWithEditButton($html, $category);
        }
        //wysyłanie nagłówka o braku buforowaniu strony
        $this->getResponse()->setHeader('X-Cache', 'MISS');
        //przekazanie rekordu kategorii do widoku
        $this->view->category = $category;
        //renderowanie docelowej akcji
        $html = \Mmi\Mvc\ActionHelper::getInstance()->forward($this->_prepareForwardRequest($category));
        //buforowanie niedozwolone
        if (!$bufferingAllowed || 0 == $cacheLifetime = $this->_getCategoryCacheLifetime($category)) {
            //zwrot html
            return $this->_decorateHtmlWithEditButton($html, $category);
        }
        //zapis html kategorii do cache
        \App\Registry::$cache->save($html, $cacheKey, $cacheLifetime);
        //zwrot html
        return $this->_decorateHtmlWithEditButton($html, $category);
    }