Odpojení od FlexiBee.
2995
public function disconnect()
    {
        if (is_resource($this->curl)) {
            curl_close($this->curl);
        }
        $this->curl = null;
    }
1207365
public function init()
    {
        //wczytywanie sesji
        $session = new \Mmi\Session\SessionSpace(\Cms\Model\ConnectorModel::SESSION_SPACE);
        try {
            $data = (new \Cms\Model\ConnectorModel)->getData($session->url, 'exportFileObject', [], $session->identity, $session->credential);
        } catch (\Cms\Exception\ConnectorException $e) {
            //rollback - puste dane
            $data = [];
        }

        //obiekty do przesłania
        if (!empty($data)) {
            //lista obiektów
            $this->addElement((new Element\MultiCheckbox('fileObjects'))
                ->setLabel('form.connectorImportFilesForm.fileObjects.label')
                ->setMultioptions($data)
                ->setValue($data));

            //submit
            $this->addElement((new Element\Submit('submit'))
                ->setLabel('form.connectorImportFilesForm.submit.label'));
        }
    }
501456
public function deleteAction()
    {
        //szukamy rekordu pliku
        if (!$this->getPost()->cmsFileId || null === $record = (new CmsFileQuery)->findPk($this->getPost()->cmsFileId)) {
            return $this->_jsonError(178);
        }
        //sprawdzenie zgodności z obiektem formularza
        if ($record->object === $this->getPost()->object && $record->objectId == $this->getPost()->objectId) {
            //usuwanie
            if ($record->delete()) {
                //jeśli wykonać operację po usunięciu
                if ($this->getPost()->afterDelete) {
                    $this->_operationAfter($this->getPost()->afterDelete, $record);
                }
                return json_encode(['result' => 'OK']);
            }
        }
        return $this->_jsonError(178);
    }
1264171
public function isRoleAllowed($role, $resource)
    {
        //zmniejszanie liter
        $resource = strtolower($resource);
        //istnieje konkretne uprawnienie
        if (isset($this->_rights[$role . ':' . $resource])) {
            return $this->_rights[$role . ':' . $resource];
        }
        //uprawnienie do zasobu powyżej
        if (strrpos($resource, ':') !== false) {
            return $this->isRoleAllowed($role, substr($resource, 0, strrpos($resource, ':')));
        }
        //globalne dla roli
        if (isset($this->_rights[$role . ':'])) {
            return $this->_rights[$role . ':'];
        }
        return false;
    }
700141
public static function daily($object, $objectId, $year, $month)
    {
        $days = date('t', strtotime($year . '-' . $month . '01 00:00:00'));
        $statArray = [];
        $month = str_pad($month, 2, '0', STR_PAD_LEFT);
        //pobieranie wierszy
        foreach (self::getRows($object, $objectId, $year, $month, true, null) as $stat) {
            $stat->day = str_pad($stat->day, 2, '0', STR_PAD_LEFT);
            $statArray[$stat->year . '-' . $month . '-' . $stat->day] = $stat->count;
        }
        $stats = [];
        //układanie wierszy w kubełkach dni
        for ($i = 1; $i <= $days; $i++) {
            $day = str_pad($i, 2, '0', STR_PAD_LEFT);
            $count = 0;
            if (isset($statArray[$year . '-' . $month . '-' . $day])) {
                $count = $statArray[$year . '-' . $month . '-' . $day];
            }
            $stats[$year . '-' . $month . '-' . $day] = $count;
        }
        return $stats;
    }
1012280
public static function byObjectJoinedOriginal($object = null, $objectId = null)
    {
        //zapytanie o pliki po obiektach i id
        return (new self)
                ->joinLeft('cms_file', 'cms_file', 'original_file')
                ->on('cms_file_original_id', 'id')
                ->whereObject()->equals($object)
                ->andFieldObjectId()->equals($objectId)
                //posortowane po kolejności
                ->orderAscOrder()
                //sortowanie po ID, jeśli ordery są NULL
                ->orderAscId();
    }
254187
public function afterSave()
    {
        //brak obiektu
        if (!$this->_saveToObject) {
            return parent::afterSave();
        }
        //czyszczenie relacji
        (new AttributeValueRelationModel($this->_saveToObject, $this->getRecord()->id))->deleteAttributeValueRelations();
        //iteracja po elementach
        foreach ($this->_cmsAttributeElements as $attributeId => $element) {
            //zapis relacji
            $this->_createValueRelationByElement($attributeId, $element);
        }
        //iteracja po atrybutach
        foreach ($this->_cmsAttributes as $attribute) {
            //nie jest zmaterializowany, odziedziczony
            if (!$attribute->getJoined('cms_attribute_relation')->isMaterializedInherited()) {
                continue;
            }
            //brak obiektu do dziedziczenia
            if (null === $element = $this->getElement($attribute->key)) {
                throw new \Exception('No inherited attribute: ' . $attribute->key);
            }
            //zapis relacji z odziedziczonego elementu formularza (występującego w oryginalnym formularzu)
            $this->_createValueRelationByElement($attribute->id, $element);
        }
        //zapis udany
        return parent::afterSave();
    }
27948
public static function postInstall(Event $event) 
    { 
        //inicjalizacja autoloadera 
        self::_initAutoload($event); 
        //kopiowanie plików z dystrybucji 
        self::_copyDistFiles(); 
        //linkowanie zasobów web 
        self::_linkModuleWebResources(); 
        //kopiowanie binariów z modułów 
        self::_copyModuleBinaries(); 
    }
267821
public final function fetchBegin()
    {
        $class = get_class($this);
        //dodawanie klasy z klasą forma
        $this->addClass(strtolower(substr($class, strrpos($class, '\\') + 1)));
        //dodawanie klasy błędu jeśli wystąpiły
        if ($this->getErrors()) {
            $this->addClass('error');
        }
        //element do widoku
        \Mmi\App\FrontController::getInstance()->getView()->_element = $this;
        //render szablonu
        return \Mmi\App\FrontController::getInstance()->getView()->renderTemplate(static::TEMPLATE_BEGIN);
    }
657
public function invoicesMatchingByInvoices()
    {
        foreach ($this->getInvoicesToProcess() as $invoiceData) {
            $payments = $this->findPayments($invoiceData);
            if (!empty($payments) && count(current($payments))) {
                $typDokl                = $invoiceData['typDokl'][0];
                $docType                = $typDokl['typDoklK'];
                $invoiceData['typDokl'] = \FlexiPeeHP\FlexiBeeRO::code($typDokl['kod']);
                $invoice                = new \FlexiPeeHP\FakturaVydana($invoiceData,
                    $this->config);
                $this->invoicer->setMyKey($invoiceData['id']);
                /*
                 *    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)
                 */

                foreach ($payments as $paymentData) {
                    $payment = new \FlexiPeeHP\Banka($paymentData, $this->config);
                    switch ($docType) {
                        case 'typDokladu.zalohFaktura':
                        case 'typDokladu.faktura':
                            if ($this->settleInvoice($invoice, $payment)) {
                                
                            }
                            break;
                        case 'typDokladu.proforma':
                            $this->settleProforma($invoice, $payments);
                            break;
                        case 'typDokladu.dobropis':
                            $this->settleCreditNote($invoice, $payments);
                            break;
                        default:
                            $this->addStatusMessage(
                                sprintf(_('Unsupported document type: %s %s'),
                                    $typDokl['typDoklK@showAs'].' ('.$docType.'): '.$invoiceData['typDokl'],
                                    $invoice->getApiURL()
                                ), 'warning');
                            break;
                    }
                }
            }
        }
    }
138286
public function editAction()
    {
        $this->getResponse()->setTypeJson();
        $error = json_encode(['error' => 'Edycja nie powiodła się, brak pliku']);
        //brak id
        if (!$this->id) {
            return $error;
        }
        //brak pliku
        if (null === ($file = (new CmsFileQuery)->findPk($this->id))) {
            return $error;
        }
        //błędny plik
        if ($this->hash != $file->getHashName()) {
            return $error;
        }
        //zapis
        $postData = $this->getPost()->toArray();
        if (!empty($postData)) {
            $file->setFromArray($postData)
                ->save();
        }
        //json na potrzeby wyświetlenia formularza
        return $file->toJson();
    }
340200
public function connect()
    {
        //pdo do zapisu
        $this->_upstreamPdo = new \PDO(
            $this->_config->driver . ':' . $this->_config->host, null, null, [\PDO::ATTR_PERSISTENT => $this->_config->persistent]
        );
        //odczyt identycznie
        $this->_downstreamPdo = $this->_upstreamPdo;
        //połączono
        $this->_connected = true;
        //włączenie funkcjonalności kluczy obcych - domyślnie
        $this->query('PRAGMA foreign_keys = ON');
    }
650528
public function handleRequest()
    {
        //obsługa eksportera
        $this->_handleCsvExporter(FrontController::getInstance()->getRequest());
        //obsługa danych z POST
        $post = FrontController::getInstance()->getRequest()->getPost();
        //brak posta
        if ($post->isEmpty()) {
            return;
        }
        //jeśli przebudowano filtry lub sortowania render grida
        if ($this->_rebuildFilter($post) || $this->_rebuildOrder($post)) {
            $this->_render();
        }
    }
757616
public function describeAction()
    {
        //sprawdzamy, czy jest id pliku i form
        if (!$this->getPost()->cmsFileId || !is_array($this->getPost()->form)) {
            return $this->_jsonError(186);
        }
        //szukamy rekordu pliku
        if (null === $record = (new CmsFileQuery)->findPk($this->getPost()->cmsFileId)) {
            return $this->_jsonError(186);
        }
        //pobranie danych
        $form = array_merge(['active' => 0, 'sticky' => null], $this->getPost()->form);
        foreach ($form as $field) {
            $form[$field['name']] = $field['value'];
            if ($field['name'] == 'active' || $field['name'] == 'sticky') {
                continue;
            }
            if ($field['name'] == 'original') {
                //dodajemy rozszerzenie
                //pozycja ostatniej kropki w nazwie - rozszerzenie pliku
                $pointPosition = strrpos($record->name, '.');
                if ($pointPosition !== false) {
                    $form['original'] .= substr($record->name, $pointPosition);
                }
                $record->data->original = $form['original'];
                continue;
            }
            $record->data->{$field['name']} = $field['value'];
        }
        //próba zapisu postera
        if (isset($form['poster']) && $form['poster']) {
            $form['posterFileName'] = $this->_savePoster($form['poster'], $record);
        }
        unset($form['poster']);
        if ($record->data instanceof \Mmi\DataObject) {
            //czyszczenie nieprzesłanych checkboxów
            foreach (array_keys($record->data->toArray()) as $name) {
                //nie czyścimy postera jeśli był wgrany
                if ($name == 'posterFileName') {
                    continue;
                }
                if (!isset($form[$name])) {
                    $record->data->{$name} = null;
                }
            }
        }
        $record->active = isset($form['active']) ? $form['active'] : $record->active;
        $record->sticky = isset($form['sticky']) ? $form['sticky'] : $record->sticky;
        $record->original = isset($form['original']) ? $form['original'] : $record->original;
        if ($record->sticky) {
            $result = $record->setSticky();
        } else {
            $result = $record->save();
        }
        if ($result) {
            //jeśli wykonać operację po edycji
            if ($this->getPost()->afterEdit) {
                $this->_operationAfter($this->getPost()->afterEdit, $record);
            }
            return json_encode(['result' => 'OK']);
        }
        return $this->_jsonError(186);
    }
1027884
public function getWidth()
    {
        //jeśli podana explicit
        if (isset($this->_exif['ExifImageWidth'])) {
            return round($this->_exif['ExifImageWidth']);
        }
        //obliczenia z COMPUTED
        return isset($this->_exif['COMPUTED']['Width']) ? round($this->_exif['COMPUTED']['Width']) : null;
    }
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;
    }
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();
    }