Projekt

Obecné

Profil

Stáhnout (3.15 KB) Statistiky
| Větev: | Tag: | Revize:
1
<?php
2

    
3
namespace App\AdminModule\Presenters;
4

    
5
use App\AdminModule\Components\IExportFormFactory;
6
use App\AdminModule\Components\IImportFormFactory;
7
use App\Enum\EFlashMessage;
8
use App\Model\Facade\TransportFacade;
9
use App\Model\Repository\ObjectTypeRepository;
10
use App\Model\Repository\SurfaceTypeRepository;
11
use App\Utils\TextParser;
12

    
13
class TransportPresenter extends BaseUserPresenter
14
{
15
    /** @var IImportFormFactory */
16
    private $importFormFactory;
17

    
18
    /** @var IExportFormFactory */
19
    private $exportFormFactory;
20

    
21
    /** @var SurfaceTypeRepository */
22
    private $surfaceTypeRepository;
23

    
24
    /** @var ObjectTypeRepository */
25
    private $objectTypeRepository;
26

    
27
    /** @var TransportFacade */
28
    private $transportFacade;
29

    
30
    public function __construct(
31
        IImportFormFactory $importFormFactory,
32
        IExportFormFactory $exportFormFactory,
33
        SurfaceTypeRepository $surfaceTypeRepository,
34
        ObjectTypeRepository $objectTypeRepository,
35
        TransportFacade $transportFacade
36
    )
37
    {
38
        parent::__construct();
39
        $this->importFormFactory = $importFormFactory;
40
        $this->exportFormFactory = $exportFormFactory;
41
        $this->surfaceTypeRepository = $surfaceTypeRepository;
42
        $this->objectTypeRepository = $objectTypeRepository;
43
        $this->transportFacade = $transportFacade;
44
    }
45

    
46
    /**
47
     * View pro zobrazení importovaných dat před uložením do databáze
48
     * @param TextParser $parser
49
     */
50
    public function renderPreviewImport(TextParser $parser)
51
    {
52
        $objectTypes = $this->objectTypeRepository->fetchObjectTypes();
53
        $surfaceTypes = $this->surfaceTypeRepository->fetchSurfaceTypes();
54
        $parser->setTypes($objectTypes, $surfaceTypes);
55

    
56
        // Potřebuju to jako persistentní data do další akce presenteru
57
        $_SESSION['parsedText'] = $parser->parseText();
58

    
59
        $this->template->fileName = $parser->getTextFile()->getName();
60
        $this->template->parsedFile = $_SESSION['parsedText'];
61
        $this->template->transliterationNum = $this->countTransliterations();
62
        $this->template->surfaces = $surfaceTypes;
63
    }
64

    
65
    /** Uloží data z textového souboru do databáze
66
     * @throws \Nette\Application\AbortException
67
     */
68
    public function actionConfirmPreview()
69
    {
70
        $result = $this->transportFacade->saveImportedData($_SESSION['parsedText']);
71
        $_SESSION['parsedText'] = null;
72

    
73
        if ($result) {
74
            $this->presenter->flashMessage('All data were imported successfully.', EFlashMessage::SUCCESS);
75
        } else {
76
            $this->presenter->flashMessage('There was an error when importing data.', EFlashMessage::ERROR);
77
        }
78

    
79
        $this->redirect("Transport:");
80
    }
81

    
82
    /** Počítá počet importovaných transliterací */
83
    public function countTransliterations()
84
    {
85
        $num = 0;
86
        foreach ($this->template->parsedFile as $book) {
87
            $num += count($book);
88
        }
89
        return $num;
90
    }
91

    
92
    public function createComponentImportForm()
93
    {
94
        return $this->importFormFactory->create();
95
    }
96

    
97
    public function createComponentExportForm()
98
    {
99
        return $this->exportFormFactory->create();
100
    }
101
}
(11-11/12)