Usuwa wybrany rekord pliku
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);
    }
235763
public function gc($maxLifetime)
    {
        //iteracja po plikach sesyjnych
        foreach (glob($this->_namespace . '*') as $sessionFile) {
            //próba określenia daty pliku
            try {
                $fileTime = filemtime($sessionFile);
            } catch (\Exception $e) {
                //plik już skasowany
                continue;
            }
            //sprawdzenie czy plik jest stary
            if ($fileTime > (time() - $maxLifetime)) {
                //nie jest
                continue;
            }
            //próba usunięcia pliku
            try {
                unlink($sessionFile);
            } catch (\Exception $e) {
                //nie udało się usunąć (usunięty przez inny proces)
            }
        }
        return true;
    }
29524
public function editAction()
    {
        $form = new \CmsAdmin\Form\Text(new \Cms\Orm\CmsTextRecord($this->id));
        $this->view->textForm = $form;
        //brak wysłanych danych
        if (!$form->isMine()) {
            return;
        }
        //zapisany
        if ($form->isSaved()) {
            $this->getMessenger()->addMessage('messenger.text.text.saved', true);
            $this->getResponse()->redirect('cmsAdmin', 'text');
        }
        $this->getMessenger()->addMessage('messenger.text.text.error', false);
    }
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);
    }
1011625
public function beforeSave()
    {
        //brak loginu lub hasła
        if (!$this->getElement('username')->getValue() || !$this->getElement('password')->getValue()) {
            return false;
        }
        //autoryzacja
        $auth = \App\Registry::$auth;
        \App\Registry::$auth->setIdentity($this->getElement('username')->getValue());
        \App\Registry::$auth->setCredential($this->getElement('password')->getValue());
        return \App\Registry::$auth->authenticate();
    }
1206451
public function toggleAction()
    {
        //wyszukiwanie relacji do edycji
        if (null === $widgetRelation = (new \Cms\Orm\CmsCategoryWidgetCategoryQuery)
            ->whereCmsCategoryId()->equals($this->categoryId)
            ->findPk($this->id)) {
            return '';
        }
        //zmiana widoczności relacji
        $widgetRelation->toggle();
        return '';
    }
1114629
public function write($id, $data)
    {
        //dane nie uległy zmianie
        if ($data == $this->_data) {
            return true;
        }
        //niepoprawne ID
        if (!$this->_validate($id)) {
            return true;
        }
        //wyszukiwanie rekordu
        if (null === $record = (new Orm\SessionQuery)->findPk($id)) {
            //tworzenie nowego rekordu
            $record = new Orm\SessionRecord;
        }
        //puste dane sesyjne
        if (!$data) {
            //jeśli istniał rekord - usuwamy
            $record->id ? $record->delete() : null;
            return true;
        }
        //ustawianie danych i czasu
        $record->id = $id;
        $record->data = $data;
        $record->timestamp = time();
        //zapis rekordu
        return $record->save();
    }
1275164
protected function _changeRecord(\Mmi\Http\RequestPost $post)
    {
        //brak danych dla tego checkboxa
        if ($post->name != $this->_checkbox->getFormColumnName()) {
            return;
        }
        //brak id
        if (!$post->id || !$post->value) {
            return;
        }
        //wybór rekordu
        $record = $this->_checkbox->getGrid()
            ->getQuery()
            ->findPk($post->id);
        //pole leży w tabeli dołączonej
        if (false !== strpos($fieldName = $this->_checkbox->getName(), '.')) {
            $recordField = explode('.', $this->_checkbox->getName());
            //nadpisanie wartości
            $record = $record->getJoined($recordField[0]);
            $fieldName = $recordField[1];
        }
        //brak property z checkboxa
        if (!property_exists($record, $fieldName)) {
            return;
        }
        //ustawianie property
        $record->$fieldName = ($post->checked == 'true') ? $post->value : 0;
        return $record->save();
    }
1165756
public function afterSave()
    {
        //sprawdzenie istnienia rekordu
        if ($this->hasRecord()) {
            $this->_appendFiles($this->_record->getPk(), $this->getFiles());
        }
        //po uploadzie
        $this->afterUpload();
        return true;
    }
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();
        }
    }
1075658
public static function send()
    {
        //rezultat wysyłania
        $result = ['error' => 0, 'success' => 0];
        //pobieranie maili
        $emails = (new Orm\CmsMailQuery)
            ->join('cms_mail_definition')->on('cms_mail_definition_id')
            ->join('cms_mail_server', 'cms_mail_definition')->on('cms_mail_server_id')
            ->whereActive()->equals(0)
            ->andFieldDateSendAfter()->lessOrEquals(date('Y-m-d H:i:s'))
            ->orderAscDateSendAfter()
            ->limit(500)
            ->find();
        //brak maili do wysyłki
        if (count($emails) == 0) {
            return $result;
        }
        //tymczasowy stan (w wysyłce)
        foreach ($emails as $email) {
            $email->active = 2;
            $email->save();
        }
        //wysyłka pojedynczego maila
        foreach ($emails as $email) {
            //instancja PHPMailer'a
            $mail = new \PHPMailer(true);
            try {
                $mail->CharSet = 'utf-8';
                //ustawiam SMTP
                $mail->isSMTP();
                //ustawianie hosta
                $mail->Host = $email->getJoined('cms_mail_server')->address;
                //ustawianie portu
                $mail->Port = $email->getJoined('cms_mail_server')->port;
                //jezeli podana nazwa uzytkownika i haslo to wlaczamy uwierzytelnienie
                if ($email->getJoined('cms_mail_server')->username && $email->getJoined('cms_mail_server')->password) {
                    //uwierzytelnianie serwera
                    $mail->SMTPAuth = true;
                    //typ uwierzytelniania
                    $mail->AuthType = 'LOGIN';
                    //uzytkownik SMTP
                    $mail->Username = $email->getJoined('cms_mail_server')->username;
                    //haslo SMTP
                    $mail->Password = $email->getJoined('cms_mail_server')->password;
                }
                if ($email->getJoined('cms_mail_server')->ssl != 'plain') {
                    //szyfrowanie polaczenia
                    $mail->SMTPSecure = $email->getJoined('cms_mail_server')->ssl;
                }
                //ustawianie treści wiadomości
                $mail->Body = strip_tags($email->message);
                //jezeli HTML to ustawiam typ wiadomości na HTML
                if ($email->getJoined('cms_mail_definition')->html) {
                    $mail->isHTML(true);
                    $mail->Body = $email->message;
                }
                //ustawianie "from"
                $mail->setFrom($email->getJoined('cms_mail_server')->from, $email->fromName);
                //ustawianie "do"
                $recipients = explode(';', $email->to);
                foreach ($recipients as $recipient) {
                    $mail->addAddress(trim($recipient));
                }
                //ustawianie reply
                if ($email->replyTo) {
                    $mail->addReplyTo($email->replyTo);
                }
                //ustawianie tematu
                $mail->Subject = $email->subject;
                //dołączanie załączników
                $attachments = unserialize($email->attachements);
                if (!empty($attachments)) {
                    foreach ($attachments as $fileName => $filePath) {
                        if (!file_exists($filePath)) {
                            continue;
                        }
                        $file = [
                            'content' => base64_encode(file_get_contents($filePath)),
                            'type' => \Mmi\FileSystem::mimeType($filePath)
                        ];
                        $mail->addStringAttachment(base64_decode($file['content']), $fileName, 'base64', $file['type'], 'attachment');
                    }
                }
                //wysyłka maila
                $mail->send();
                //logowanie wysyłki
                \Mmi\App\FrontController::getInstance()->getLogger()->info('Sent: ' . $email->to . ' ' . $email->subject);
                //czyszczenie załączników
                $email->attachements = null;
                //ustawienie pol po wysłaniu
                $email->active = 1;
                $email->dateSent = date('Y-m-d H:i:s');
                $email->save();
                //podwyzszenie licznika udanych
                $result['success'] ++;
            } catch (\Exception $e) {
                //bład wysyłki
                \Mmi\App\FrontController::getInstance()->getLogger()->warning($e->getMessage());
                //podwyzszenie licznika nieudanych
                $result['error'] ++;
            }
        }
        return $result;
    }
280516
public function validateAction()
    {
        //typ odpowiedzi: plain
        $this->getResponse()->setTypePlain();
        //wyłączenie layoutu
        $this->view->setLayoutDisabled();

        //sprawdzenie obecności obowiązkowych pól w poscie
        if (!$this->getPost()->class || !$this->getPost()->field) {
            return '';
        }
        //nazwa klasy forma
        $className = $this->getPost()->class;
        //klasa rekordu
        $recordClassName = $this->getPost()->recordClass;
        //powoływanie forma
        $form = new $className($recordClassName ? new $recordClassName($this->getPost()->recordId ? $this->getPost()->recordId : null) : null);
        /* @var $form \Mmi\Form\Form */
        //pobieranie elementu do walidacji
        $element = $form->getElement($this->getPost()->field);
        //jeśli brak elementu - wyjście
        if (!$element instanceof \Mmi\Form\Element\ElementAbstract) {
            return '';
        }
        //ustawienie wartości elementu
        $element->setValue(urldecode($this->getPost()->value));
        //walidacja i zwrot wyniku
        if (!$element->isValid()) {
            $this->view->errors = $element->getErrors();
            return;
        }
        //poprawna walidacja
        return '';
    }
105839
public function indexAction()
    {
        $this->view->roles = (new \Cms\Orm\CmsRoleQuery)->find();
        //jeśli niewybrana rola - przekierowanie na pierwszą istniejącą
        if (!$this->roleId && count($this->view->roles)) {
            $this->getResponse()->redirect('cmsAdmin', 'categoryAcl', 'index', ['roleId' => $this->view->roles[0]->id]);
        }
        //formularz edycji uprawnień
        $form = new Form\CategoryAclForm(null, ['roleId' => $this->roleId]);
        //po zapisie
        if ($form->isSaved()) {
            $this->getMessenger()->addMessage('messenger.categoryAcl.permissions.saved', true);
            //przekierowanie na zapisaną stronę
            $this->getResponse()->redirect('cmsAdmin', 'categoryAcl', 'index', ['roleId' => $this->roleId]);
        }
        $this->view->categoryAclForm = $form;
    }
311636
public function lock()
    {
        //wyszukiwanie blokady dla kategorii
        if (null === $lockRecord = (new CacheQuery)->findPk($lockKey = self::CACHE_PREFIX . $this->_categoryId)) {
            $lockRecord = new CacheRecord;
            $lockRecord->id = $lockKey;
            $lockRecord->data = true;
        }
        //brak możliwości założenia blokady
        if ($lockRecord->ttl > time()) {
            return false;
        }
        //zakładanie blokady
        $lockRecord->ttl = time() + self::LOCK_TIMEOUT;
        return $lockRecord->save();
    }
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);
    }
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;
            }
        }
    }
362004
public function pluploadAction()
    {
        set_time_limit(5 * 60);
        //obiekt handlera plupload
        $pluploadHandler = new Model\PluploadHandler();
        //jeśli wystąpił błąd
        if (!$pluploadHandler->handle()) {
            return $this->_jsonError($pluploadHandler->getErrorCode(), $pluploadHandler->getErrorMessage());
        }
        //jeśli wykonać operację po przesłaniu całego pliku i zapisaniu rekordu
        if ($this->getPost()->afterUpload && null !== $record = $pluploadHandler->getSavedCmsFileRecord()) {
            $this->_operationAfter($this->getPost()->afterUpload, $record);
        }
        return json_encode(['result' => 'OK', 'cmsFileId' => $pluploadHandler->getSavedCmsFileId()]);
    }