Zaznam odchodu ze stranky
502456
public function leave(): void
	{
		if ($this->canTrack()) {
			$track = $this->orm->tracking->getLatest($this->user->getUid());

			if ($track) {
				$timeOnPage = time() - $track->inserted->getTimestamp();

				if ($timeOnPage < ($this->minTimeBetweenVisits * 60)) {
					$track->timeOnPage = $timeOnPage;
					$this->orm->persistAndFlush($track);
				}
			}
		}
	}
1179840
public function previewAction()
    {
        //wyłączenie layout
        $this->view->setLayoutDisabled();
        //wyszukiwanie kategorii
        if (null === $this->view->category = (new \Cms\Orm\CmsCategoryQuery)->findPk($this->categoryId)) {
            $this->getResponse()->redirect('cmsAdmin', 'category', 'tree');
        }
    }
150953
public function deleteRoleAction()
    {
        //wyszukiwanie i usuwanie roli
        if ((null !== $role = (new \Cms\Orm\CmsRoleQuery)->findPk($this->id))) {
            $this->getMessenger()->addMessage(($deleteResult = (bool) $role->delete()) ? 'messenger.acl.role.deleted' : 'messenger.acl.role.delete.error', $deleteResult);
        }
        //redirect
        $this->getResponse()->redirect('cmsAdmin', 'acl', 'index', ['roleId' => $this->id]);
    }
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;
    }
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;
    }
103721
private function _buildFlatTree($prefix, array &$flatTree, array $categories, $categoryTypeKey)
    {
        //iteracja po kategoriach
        foreach ($categories as $id => $leaf) {
            if (null === $categoryTypeKey || $leaf['record']->getJoined('cms_category_type')->key === $categoryTypeKey) {
                //dodanie rekordu z prefixem i nazwą
                $flatTree[$id] = ltrim($prefix . ' > ' . $leaf['record']->name, ' >');
            }
            //zejście rekurencyjne
            $this->_buildFlatTree($prefix . ' > ' . $leaf['record']->name, $flatTree, $leaf['children'], $categoryTypeKey);
        }
    }
519222
public function run()
    {
        $request = new \Mmi\Http\Request;
        //ustawianie domyślnego języka jeśli istnieje
        if (isset(\App\Registry::$config->languages[0])) {
            $request->lang = \App\Registry::$config->languages[0];
        }
        $request->setModuleName('mmi')
            ->setControllerName('index')
            ->setActionName('index');
        //ustawianie żądania
        FrontController::getInstance()->setRequest($request)
            ->getView()->setRequest($request);
        FrontController::getInstance()->getResponse()->clearHeaders();
    }
1358776
public function redactorPreviewAction()
    {
        //żądanie o wersję artykułu (rola redaktora)
        if (!$this->_hasRedactorRole()) {
            throw new \Mmi\Mvc\MvcForbiddenException('Preview not allowed');
        }
        //wyszukiwanie kategorii
        if (null === $category = (new Orm\CmsCategoryQuery)
            ->withType()
            ->whereCmsCategoryOriginalId()->equals($this->originalId ? $this->originalId : null)
            ->findPk($this->versionId)) {
            //404
            throw new \Mmi\Mvc\MvcNotFoundException('Version not found');
        }
        //kategoria do widoku
        $this->view->category = $category;
        //nadpisanie tytułu i opisu (gdyż inaczej brany jest z kategorii oryginalnej)
        $this->view->navigation()->setTitle($category->title)
            ->setDescription($category->description);
        //renderowanie docelowej akcji
        return $this->_decorateHtmlWithEditButton(\Mmi\Mvc\ActionHelper::getInstance()->forward($this->_prepareForwardRequest($category)), $category);
    }
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;
            }
        }
    }
417186
protected final function _prepareFields()
    {
        //jeśli pusty schemat połączeń
        if (empty($this->_query->getQueryCompile()->joinSchema)) {
            return '*';
        }
        $fields = '';
        //pobranie struktury tabeli
        $mainStructure = DbConnector::getTableStructure($this->_query->getTableName());
        //przygotowanie tabeli
        $table = DbConnector::getAdapter()->prepareTable($this->_query->getTableName());
        //iteracja po polach tabeli głównej
        foreach ($mainStructure as $fieldName => $info) {
            //dodawanie pola
            $fields .= $table . '.' . DbConnector::getAdapter()->prepareField($fieldName) . ', ';
        }
        //pola z tabel dołączonych
        foreach ($this->_query->getQueryCompile()->joinSchema as $schema) {
            //pobranie struktury tabeli dołączonej
            $structure = DbConnector::getTableStructure($schema[0]);
            //alias połączenia
            $joinAlias = isset($schema[5]) ? $schema[5] : $schema[0];
            //pola tabeli dołączonej
            foreach ($structure as $fieldName => $info) {
                $fields .= DbConnector::getAdapter()->prepareTable($joinAlias) . '.' . DbConnector::getAdapter()->prepareField($fieldName) . ' AS ' . DbConnector::getAdapter()->prepareField($joinAlias . '__' . $schema[0] . '__' . $fieldName) . ', ';
            }
        }
        return rtrim($fields, ', ');
    }
520316
public function versionCleanupAction()
    {
        //zapytanie wyszukujące drafty i wersje robocze
        $query = (new \Cms\Orm\CmsCategoryQuery)
            ->whereCmsCategoryOriginalId()->notEquals(null)
            ->andFieldStatus()->notEquals(\Cms\Orm\CmsCategoryRecord::STATUS_ACTIVE);
        //obliczanie z ilu tygodni usunąć
        $weeks = $this->weeks ? intval($this->weeks) : 53;
        if ($weeks > 0) {
            $query->andFieldDateAdd()->less(date('Y-m-d H:i:s', strtotime('-' . $weeks . ' weeks')));
        }
        //usuwa wersje robocze
        return 'Deleted: ' . $query->find()->delete() . ' archival versions';
    }
1055877
public function decodeUrl($url)
    {
        //parsowanie url'a z zamianą hasha
        $parsedUrl = parse_url($url);
        //inicjalizacja pustych parametrów
        $params = [];
        //dekodowanie ścieżki
        if (isset($parsedUrl['path'])) {
            $parsedUrl['path'] = urldecode($parsedUrl['path']);
        }
        //parsowanie query string (GET)
        if (isset($parsedUrl['query'])) {
            //funkcja parse_str dekoduje przez urldecode
            parse_str($parsedUrl['query'], $params);
        }
        //domyślne parametry
        $params['controller'] = isset($params['controller']) ? $params['controller'] : 'index';
        $params['action'] = isset($params['action']) ? $params['action'] : 'index';
        //jeśli nieustawiony moduł, url nie jest analizowany
        if (isset($params['module'])) {
            return $params;
        }
        //filtrowanie URL
        $filteredUrl = html_entity_decode(
            trim((isset($parsedUrl['path']) ? $parsedUrl['path'] : ''), '/ '),
            ENT_HTML401 | ENT_HTML5 | ENT_QUOTES,
            'UTF-8'
        );
        //próba aplikacji rout
        foreach ($this->getRoutes() as $route) {
            /* @var $route \Mmi\Mvc\RouterConfigRoute */
            $result = (new RouterMatcher)->tryRouteForUrl($route, $filteredUrl);
            //dopasowano routę
            if ($result['matched']) {
                //łączenie parametrów
                $params = array_merge($params, $result['params']);
                break;
            }
        }
        //zwrot parametrów
        return $params;
    }
336306
public function commitVersion()
    {
        //sprawdzenie czy posiada rodzica (oryginał)
        if (!$this->cmsCategoryOriginalId) {
            return true;
        }
        //wyszukiwanie oryginału
        $originalRecord = (new CmsCategoryQuery)->findPk($this->cmsCategoryOriginalId);
        //tworzenie wersji
        $versionModel = new \Cms\Model\CategoryVersion($originalRecord);
        $versionModel->create();
        //zmiana miejscami draftu z oryginałem
        return $versionModel->exchangeOriginal($this);
    }
1057314
public function thumbnailAction()
    {
        if (!$this->getPost()->cmsFileId) {
            return $this->_jsonError(179);
        }
        //szukamy rekordu pliku
        if (null !== $record = (new CmsFileQuery)->findPk($this->getPost()->cmsFileId)) {
            //sprawdzenie czy obrazek
            if ($record->class === 'image') {
                try {
                    $thumb = new \Cms\Mvc\ViewHelper\Thumb();
                    $url = $thumb->thumb($record, 'scaley', '60');
                    if (!empty($url)) {
                        return json_encode(['result' => 'OK', 'url' => $url]);
                    }
                } catch (\Exception $ex) {
                    
                }
            }
        }
        return $this->_jsonError(179);
    }
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;
        }
    }
417795
protected static function _linkModuleWebResources() 
    { 
        //iteracja po modułach 
        foreach (\Mmi\Mvc\StructureParser::getModules() as $module) { 
            //kalkulacja ścieżki linku 
            $linkName = BASE_PATH . '/web/resource/' . lcfirst(basename($module)); 
            //link istnieje 
            if (is_link($linkName)) { 
                continue; 
            } 
            //czyszczenie katalogu który ma być linkiem 
            if (file_exists($linkName)) { 
                //usuwanie kaskadowe 
                \Mmi\FileSystem::rmdirRecursive($linkName); 
            } 
            //istnieje resource web 
            if (file_exists($module . '/Resource/web')) { 
                //tworzenie linku 
                symlink(realpath($module . '/Resource/web'), $linkName); 
            } 
        } 
    }
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;
    }