Projekt

Obecné

Profil

« Předchozí | Další » 

Revize e9926833

Přidáno uživatelem Jan Palcút před téměř 6 roky(ů)

Re #7507 skoro funkcni zpracovani formulare bez dodelani ajaxu pro vyber knizky

Zobrazit rozdíly:

app/model/facade/TransliterationFacade.php
4 4
namespace App\Model\Facade;
5 5

  
6 6

  
7
use App\Enum\EFlashMessage;
7 8
use App\Model\Repository\LineRepository;
9
use App\Model\Repository\LitReferenceRepository;
8 10
use App\Model\Repository\ObjectTypeRepository;
9 11
use App\Model\Repository\SurfaceRepository;
10 12
use App\Model\Repository\SurfaceTypeRepository;
13
use App\Model\Repository\TransliterationRepository;
11 14
use Nette\Application\UI\Form;
12 15
use Nette\Database\Context;
13 16
use Nette\Database\Table\ActiveRow;
14 17
use Nette\Utils\ArrayHash;
18
use Tracy\Debugger;
15 19

  
16 20
class TransliterationFacade
17 21
{
......
35 39
     * @var Context
36 40
     */
37 41
    private $context;
42
    /**
43
     * @var TransliterationRepository
44
     */
45
    private $transliterationRepository;
46
    /**
47
     * @var LitReferenceRepository
48
     */
49
    private $litReferenceRepository;
38 50

  
39 51
    public function __construct(SurfaceRepository $surfaceRepository,
40 52
                                LineRepository $lineRepository,
41 53
                                ObjectTypeRepository $objectTypeRepository,
42 54
                                SurfaceTypeRepository $surfaceTypeRepository,
55
                                TransliterationRepository $transliterationRepository,
56
                                LitReferenceRepository $litReferenceRepository,
43 57
                                Context $context
44 58
    )
45 59
    {
......
48 62
        $this->objectTypeRepository = $objectTypeRepository;
49 63
        $this->surfaceTypeRepository = $surfaceTypeRepository;
50 64
        $this->context = $context;
65
        $this->transliterationRepository = $transliterationRepository;
66
        $this->litReferenceRepository = $litReferenceRepository;
67
    }
68

  
69
    public function saveTransliterationInfo($id, Form $form)
70
    {
71

  
72
        $formValues = $form->getValues();
73

  
74
        $formValues = isset($formValues['infoContainer']) ? $formValues['infoContainer'] : $formValues;
75

  
76
        $references = $formValues['references'];
77

  
78
        if ($this->isAnyReferenceEmpty($references))
79
        {
80
            return null;
81
        }
82

  
83
        unset($formValues['references']);
84

  
85
        $newTransliteration = $this->transliterationRepository->save($formValues, $id);
86

  
87
        if($id != null){
88
            $this->deleteRemovedReferences($references, $id);
89
        }
90
        else{
91
            $id = $newTransliteration[TransliterationRepository::COLUMN_ID];
92
        }
93

  
94
        foreach ($references as $item)
95
        {
96
            $item[LitReferenceRepository::COLUMN_TRANSLITERATION_ID] = $id;
97
            $this->litReferenceRepository->save($item, (int)$item[LitReferenceRepository::COLUMN_ID]);
98
        }
99

  
100
        return $newTransliteration;
101
    }
102

  
103
    /**
104
     * Zkontroluje jestli není nějaká refence prázdná
105
     *
106
     * @param $references array referencí
107
     * @return bool
108
     */
109
    public function isAnyReferenceEmpty($references)
110
    {
111
        foreach ($references as $r)
112
        {
113
            if (empty($r[LitReferenceRepository::COLUMN_SERIES]) && empty($r[LitReferenceRepository::COLUMN_NUMBER])
114
                && empty($r[LitReferenceRepository::COLUMN_PLATE]))
115
            {
116
                return true;
117
            }
118
        }
119
        return false;
120
    }
121

  
122
    /**
123
     * Odstraní odebrané reference transliterace
124
     *
125
     * @param $newReferences array nových transliterací
126
     */
127
    public function deleteRemovedReferences($newReferences,$id)
128
    {
129
        $references = $this->litReferenceRepository->findByTransliterationId($id);
130

  
131
        foreach ($references as $ref)
132
        {
133
            if ($this->isRemovedReference($ref, $newReferences))
134
            {
135
                $this->litReferenceRepository->delete($ref[LitReferenceRepository::COLUMN_ID]);
136
            }
137
        }
138

  
139
    }
140

  
141
    /**
142
     * Zkontroluje jestli je refence v poli referencí
143
     *
144
     * @param $reference ActiveRow reference ke kontrole
145
     * @param $newReferences array pole referencí
146
     * @return bool
147
     */
148
    public function isRemovedReference($reference, $newReferences)
149
    {
150
        foreach ($newReferences as $ref)
151
        {
152
            if ($ref[LitReferenceRepository::COLUMN_ID] == $reference[LitReferenceRepository::COLUMN_ID])
153
            {
154
                return false;
155
            }
156
        }
157
        return true;
51 158
    }
52 159

  
53 160
    /**
......
61 168
    {
62 169
        $formValues = $form->getValues();
63 170

  
171
        $formValues = isset($formValues['dataContainer']) ? $formValues['dataContainer'] : $formValues;
172

  
64 173
        $this->removeDeletedLines($id, $formValues);
65 174

  
66 175
        // Škaredý zanoření hodnot z formuláře v kontainerech :(
......
92 201
                                        SurfaceRepository::COLUMN_TRANSLITERATION_ID => $id
93 202
                                    ]
94 203
                                );
95

  
96
                                // Z nějakýho důvodu insert vrací počet vložených řádků a ne ActiveRow, i když je v tabulce PK,
97
                                //  proto se ID načítá takhle zvlášť
98
                                $surfaceId = $this->context->getInsertId(SurfaceRepository::COLUMN_ID);
99 204
                            }
100 205

  
101
                            $values->{LineRepository::COLUMN_SURFACE_ID} = isset($surfaceId) ? $surfaceId : $surface->{SurfaceRepository::COLUMN_ID};
206
                            $values->{LineRepository::COLUMN_SURFACE_ID} = $surface->{SurfaceRepository::COLUMN_ID};
102 207
                            $this->lineRepository->insert($values);
103 208
                        }
104 209
                    } catch (\Exception $exception)

Také k dispozici: Unified diff