/* skontroluje, ci aspon jeden taky zaznam existuje
196375
public static function c($table, $where) {
        $row = DB::qbr($table, array("where" => $where, "cols" => "id"));
        if (!$row) return false;
        return $row["id"];
    }
837815
public function detailsAction()
    {
        if (!$this->getPost()->cmsFileId) {
            return $this->_jsonError(185);
        }
        //szukamy rekordu pliku
        if (null == $record = (new CmsFileQuery)->findPk($this->getPost()->cmsFileId)) {
            return $this->_jsonError(185);
        }
        //wycinamy rozszerzenie z nazwy oryginalnego pliku do edycji
        //pozycja ostatniej kropki w nazwie
        $pointPosition = strrpos($record->original, '.');
        if ($pointPosition !== false) {
            $record->original = substr($record->original, 0, $pointPosition);
        }
        $data = [];
        if ($record->data instanceof \Mmi\DataObject) {
            //parametry
            $data = $record->data->toArray();
        }
        $data['urlFile'] = ((\App\Registry::$config->cdn) ? : $record->getUrl());
        if ($record->data->posterFileName) {
            $data['poster'] = $record->getPosterUrl();
        }    
        return json_encode(['result' => 'OK', 'record' => $record, 'data' => $data]);
    }
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;
    }
1219276
public function save()
    {
        if (!parent::save()) {
            return false;
        }
        //zapis reguły dostępu do defaulta dla zapisanej roli
        $rule = new \Cms\Orm\CmsAclRecord;
        $rule->cmsRoleId = $this->id;
        $rule->module = 'mmi';
        $rule->access = 'allow';
        //zapis reguły acl
        return $rule->save();
    }
1224253
public function getAperture()
    {
        //brak przysłony
        if (!isset($this->_exif['FNumber'])) {
            return;
        }
        //obliczanie przysłony do eleganckiej postaci
        $arr = explode('/', $this->_exif['FNumber']);
        if (count($arr) == 2 && $arr[1] > 0) {
            return round(($arr[0] / $arr[1]), 1);
        }
        return round($this->_exif['FNumber'], 1);
    }
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;
    }
530586
private static function _configureLogger()
    {
        //brak konfiguracji
        if (!self::$_config) {
            //tworzy pustą konfigurację
            return new \Psr\Log\NullLogger;
        }
        //nowy obiekt loggera
        $logger = new Logger(self::$_config->getName());
        //iteracja po konfiguracjach instancji
        foreach (self::$_config as $config) {
            self::_configureInstance($config, $logger);
        }
        return $logger;
    }
1171767
public function load($key)
    {
        //bufor nieaktywny
        if (!$this->isActive()) {
            return;
        }
        //pobranie z rejestru aplikacji jeśli istnieje
        if ($this->getRegistry()->issetOption($key)) {
            return $this->getRegistry()->getOption($key);
        }
        //zwrot zwalidowanych danych
        return $this->validateAndPrepareBackendData($key, $this->_handler->load($key));
    }
650539
public function beforeSave()
    {
        //brak domyślnej wartości
        if (null === $defaultValue = $this->getElement('defaultValue')->getValue()) {
            return true;
        }
        //wszukiwanie rekordu z domyślną wartością
        if (null === $record = (new \Cms\Orm\CmsAttributeValueQuery)
            ->whereCmsAttributeId()->equals($this->getRecord()->cmsAttributeId)
            ->whereValue()->equals($defaultValue)
            ->findFirst()) {
            //tworzenie rekordu domyślnej wartości
            $record = new \Cms\Orm\CmsAttributeValueRecord;
            $record->value = $defaultValue;
            $record->cmsAttributeId = $this->getRecord()->cmsAttributeId;
            $record->save();
        }
        //ustawianie domyślnej wartości
        $this->getRecord()->cmsAttributeValueId = $record->id;
        return true;
    }
1010706
public function headMeta(array $params = [], $replace = false, $conditional = '')
    {
        //jeśli brak parametrów - wyjście
        if (empty($params)) {
            return $this;
        }
        //warunek
        $params['conditional'] = $conditional;
        if (!array_key_exists(reset($params), $this->_data) || $replace) {
            //wstawienie pod danym kluczem
            $this->_data[reset($params)] = $params;
        }
        return '';
    }
1038428
public function isValid($value)
    {
        //znaki do usuniącia
        $trims = [' ', '-', '_', '.', ',', '/', '|'];
        //wielkie litery
        $tmp = strtoupper(str_replace($trims, '', $value));
        //brak pierwszego znaku
        if (!isset($tmp[0])) {
            $this->_error(self::INVALID);
            return false;
        }
        //brak kodu kraju - doklejanie
        if (is_numeric($tmp[0])) {
            $tmp = $this->getCountry() . $tmp;
        }
        //algorytm sumy kontrolnej
        $tmp = substr($tmp, 4) . substr($tmp, 0, 4);
        $tmp = str_replace([
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
        ], [
            '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'
        ], $tmp);
        //błąd sumy kontrolnej
        if (bcmod($tmp, 97) != 1) {
            $this->_error(self::INVALID);
            return false;
        }
        return true;
    }
268337
public function afterUpload()
    {
        //domyślnie objectId NULL dla elementów bez rekordu
        $objectId = null;
        //jeśli mamy rekord, to bierzemy z niego objectId
        if ($this->hasRecord() && $this->getRecord()->getPk()) {
            $objectId = $this->getRecord()->getPk();
        }
        //lista kluczy Cms File dla elementów TinyMce
        $tinyObjects = [];
        //dla każdego elementu formularza
        foreach ($this->getElements() as $element) {
            //dla każdego elementu Plupload
            if ($element instanceof \Cms\Form\Element\Plupload && $element->getObject()) {
                //zastępowanie plików
                \Cms\Model\File::deleteByObject($element->getObject(), $objectId);
                \Cms\Model\File::move('tmp-' . $element->getObject(), $element->getUploaderId(), $element->getObject(), $objectId);
                continue;
            }
            //dla każdego elementu TinyMce
            if ($element instanceof \Cms\Form\Element\TinyMce && $element->getUploaderObject()) {
                //jeśli już obsłużono klucz Cms File
                if (in_array($element->getUploaderObject(), $tinyObjects)) {
                    continue;
                }
                array_push($tinyObjects, $element->getUploaderObject());
                //zastępowanie plików
                \Cms\Model\File::deleteByObject($element->getUploaderObject(), $objectId);
                \Cms\Model\File::move('tmp-' . $element->getUploaderObject(), $element->getUploaderId(), $element->getUploaderObject(), $objectId);
                continue;
            }
        }
    }
132624
private function checkLocale()
    {
        if (!isset($this->locales[$this->selectLocale])) {
            // pokud neexistuje jazky hleda v aliasech
            if (isset($this->aliasLocale[$this->selectLocale])) {
                $this->selectLocale = $this->aliasLocale[$this->selectLocale];
            } else {
                $this->selectLocale = $this->defaultLocale;
            }
        }
    }
532447
public function headScript(array $params = [], $prepend = false, $conditional = '')
    {
        //jeśli brak parametrów - wyjście
        if (empty($params)) {
            return $this;
        }
        //warunek
        $params['conditional'] = $conditional;
        //skrypt już dodany
        if (array_search($params, $this->_data) !== false) {
            return '';
        }
        //wstawienie przed lub po
        $prepend ? array_unshift($this->_data, $params) : array_push($this->_data, $params);
        return '';
    }
633327
public function indexAction()
    {
        //formularz
        $form = new Form\ConnectorImportContentForm;
        //formularz zapisany + przejście do importu plików
        if ($form->isSaved() && $form->getElement('file')) {
            $this->getMessenger()->addMessage('messenger.connector.import.success', true);
            $this->getResponse()->redirect('cmsAdmin', 'connector', 'files');
        }
        //form zapisany bez importu plików
        if ($form->isSaved()) {
            $this->getMessenger()->addMessage('messenger.connector.import.ended', true);
            $this->getResponse()->redirect('cmsAdmin', 'index', 'index');
        }
        //form do widoku
        $this->view->form = $form;
    }
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);
    }
95729
public function getLongitude()
    {
        //brak tagu GPS
        if (!isset($this->_exif['GPSLongitude']) || !isset($this->_exif['GPSLongitudeRef'])) {
            return;
        }
        //tag źle sformatowany
        if (!is_array($this->_exif['GPSLongitude']) || count($this->_exif['GPSLongitude']) != 3) {
            return;
        }
        //obliczanie do eleganckiej postaci
        $hours = round($this->_gpsValue($this->_exif['GPSLongitude'][0]));
        $minutes = round($this->_gpsValue($this->_exif['GPSLongitude'][1])) / 60;
        $seconds = $this->_gpsValue($this->_exif['GPSLongitude'][1]) / 3600;
        $sign = 1;
        if (strtolower($this->_exif['GPSLongitudeRef']) != 'e') {
            $sign = -1;
        }
        //zwrot w formie ułamka
        return $sign * ($hours + $minutes + $seconds);
    }