Commit 1ec71e82dec2c6ce271809800f266ec266a905e4

Authored by Андрей Ларионов
Exists in master

Правки на сервере форма образования

Showing 5 changed files Side-by-side Diff

app/Http/Controllers/Admin/EducationController.php
... ... @@ -121,11 +121,20 @@ class EducationController extends Controller
121 121 return redirect()->route('admin.education.edit', ['education' => $education]);
122 122 }
123 123  
  124 + public function edit_program(ProgramEducation $program, Education $education) {
  125 + $id_education = $education->id;
  126 + return view('admin.education.program-edit', compact('id_education', 'education', 'program'));
  127 + }
  128 +
  129 + public function update_program(ProgramEducationRequest $request, ProgramEducation $program, Education $education) {
  130 + $program->update($request->all());
  131 + return redirect()->route('admin.education.edit', ['education' => $education]);
  132 + }
  133 +
124 134 public function delete_program(ProgramEducation $program, Education $education) {
125 135 $education = $education->id;
126 136 $program->delete();
127 137  
128 138 return redirect()->route('admin.education.edit', ['education' => $education]);
129 139 }
130   -
131 140 }
resources/views/admin/education/form.blade.php
... ... @@ -101,61 +101,116 @@
101 101 </form>
102 102  
103 103 @isset($education)
104   - <hr>
105   - <h5 class="text-gray-700 dark:text-gray-400">Специалитеты и категории:</h5>
106   - <form method="GET" action="{{ route('admin.add-program-education') }}">
107   - <label class="block text-sm">
108   - <span class="text-gray-700 dark:text-gray-400">Категория образования</span>
109   - <input type="hidden" name="id" value="{{ $education->id }}"/>
110   - <input name="level" id="level"
111   - class="block w-full mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray form-input"
112   - placeholder="Новое образование" value=""
113   - /><br>
114   - <button type="submit" id="btn_education" name="btn_education" class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">
115   - Добавить
116   - </button>
117   - </label><br>
118   - </form>
119   - <hr>
120   - @if ($program->count())
121   - @php $bool = true;
122   - $i = 1;
123   - $level = "";
124   - @endphp
125   -
126   - @foreach ($program as $pro)
127   - @if ((!empty($level)) && ($level <> $pro->level ))
128   - </div>
129   - </div><br>
130   - @php $bool = true; $i++; @endphp
131   - @endif
132   - @if ($bool == true)
133   - <div class="tabs">
134   - <input type="radio" name="tab-btn" id="tab-btn-{{$i}}" value="" checked>
135   - <label for="tab-btn-{{$i}}">{{ $pro->level }}</label>
136   - <div id="content-{{$i}}">
137   -
138   - @php $bool = false;
139   - $level = $pro->level;
140   - @endphp
141   - @endif
142   - <label class="block text-sm">
143   - <h4 class="mb-4 text-lg font-semibold text-gray-600 dark:text-gray-300">Специальность: {{$pro->name}}</h4>
144   - <span class="text-gray-700 dark:text-gray-400">Описание: {{$pro->text}}</span>
145   - <a href="{{ route('admin.delete-program-education', ['program' => $pro->id, 'education' => $education->id]) }}">Удалить</a>
146   - </label><br><hr>
147   - @endforeach
  104 + <div class="tabs_ js_tabs px-4 py-3 bg-white rounded-lg shadow-md dark:bg-gray-800">
  105 + <h2 class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200">
  106 + Программы образования
  107 + </h2>
  108 + <form class="tabs__form js_tabs_form" method="GET" action="{{ route('admin.add-program-education') }}">
  109 + <label class="tabs__label block mt-4 text-sm">
  110 + <div class="relative text-gray-500 focus-within:text-purple-600">
  111 + <input type="hidden" name="id" value="{{ $education->id }}"/>
  112 + <input name="level" class="tabs__input js_tabs_input block w-full pr-20 text-sm text-black dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" placeholder="Введите название таба"/>
  113 + <!-- For disabled buttons ADD these classes: opacity-50 cursor-not-allowed
  114 + And REMOVE these classes: active:bg-purple-600 hover:bg-purple-700 focus:shadow-outline-purple -->
  115 + <button class="tabs__submit-btn js_tabs_submit_btn absolute inset-y-0 right-0 px-4 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-r-md focus:outline-none opacity-50 cursor-not-allowed" disabled>+</button>
  116 + <!-- <button class="tabs__submit-btn js_tabs_submit_btn absolute inset-y-0 right-0 px-4 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-r-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">+</button> -->
148 117 </div>
149   - </div><br>
150   - @else
151   - <span class="text-gray-700 dark:text-gray-400">Нет записей</span>
152   - @endif
153   - @endisset
  118 + </label>
  119 + </form>
  120 + <div class="tabs__buttons js_tabs_buttons flex flex-col flex-wrap mb-4 md:flex-row md:space-x-4">
  121 + @if ($program->count())
  122 + @php $bool = true;
  123 + $i = 1;
  124 + $level = "";
  125 + @endphp
  126 +
  127 + @foreach ($program as $pro)
  128 + @if ((!empty($level)) && ($level <> $pro->level ))
  129 + @php $bool = true; $i++; @endphp
  130 + @endif
  131 + @if ($bool == true)
  132 + <div>
  133 + <button class="tabs__btn js_tabs_btn mt-4 px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple" data-btn="{{ $pro->level }}" data-id="{{$i}}">{{ $pro->level }}</button>
  134 + </div>
  135 + @php $bool = false;
  136 + $level = $pro->level;
  137 + @endphp
  138 + @endif
  139 + @endforeach
  140 + @endif
  141 + </div>
  142 + <div class="tabs__content js_tabs_content">
  143 + @if ($program->count())
  144 + @php $bool = true;
  145 + $i = 1;
  146 + $level = "";
  147 + @endphp
  148 +
  149 + @foreach ($program as $pro)
  150 + @php $name_tab = $pro->level; @endphp
  151 + @if ((!empty($level)) && ($level <> $pro->level))
  152 + </tbody>
  153 + </table>
  154 + </div>
  155 + @php $bool = true; $i++; @endphp
  156 + @endif
154 157  
  158 + @if ($bool == true)
  159 + <div class="tabs__item js_tabs_item @php echo($i>1) ? 'hidden' : ''; @endphp" data-id="{{$i}}">
  160 + <form action="{{ route('admin.add-program-education') }}" method="GET" class="flex flex-col flex-wrap mb-4 md:flex-row md:space-x-4">
  161 + <div>
  162 + <input type="hidden" name="id" value="{{ $education->id }}"/>
  163 + <input type="hidden" name="level" value="{{$name_tab}}"/>
  164 + <button type="submit" class="mt-4 px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">Добавить</button>
  165 + </div>
  166 + </form>
  167 + <table class="mb-4 w-full whitespace-no-wrap">
  168 + <thead>
  169 + <tr
  170 + class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800"
  171 + >
  172 + <th class="px-4 py-3">Специализация</th>
  173 + <th class="px-4 py-3">Описание</th>
  174 + <th class="px-4 py-3">Редактирование</th>
  175 +
  176 + </tr>
  177 + </thead>
  178 + <tbody
  179 + class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800"
  180 + >
  181 + @php $bool = false;
  182 + $level = $pro->level;
  183 + @endphp
  184 + @endif
  185 + <tr class="text-gray-700 dark:text-gray-400">
  186 + <td class="px-4 py-3">
  187 + <div class="flex items-center text-sm">
  188 + <div>
  189 + <p class="font-semibold">Специальность: </p>
  190 + <p class="text-xs text-gray-600 dark:text-gray-400">
  191 + {{ mb_strimwidth($pro->name, 0, 50, "...") }}
  192 + </p>
  193 + </div>
  194 + </div>
  195 + </td>
  196 + <td class="px-4 py-3 text-sm">
  197 + <span class="text-gray-700 dark:text-gray-400">Описание: {{ mb_strimwidth($pro->text, 0, 100, "...")}}</span>
  198 + </td>
  199 + <td class="px-4 py-3 text-xs">
  200 + <a href="{{ route('admin.edit-program-education', ['program' => $pro->id, 'education' => $education->id]) }}">Изменить</a> |
  201 + <a href="{{ route('admin.delete-program-education', ['program' => $pro->id, 'education' => $education->id]) }}">Удалить</a>
  202 + </td>
  203 + </tr>
  204 + @endforeach
  205 + @endif
  206 + </div>
  207 + </div>
  208 + @endisset
155 209 </div>
156   -<script src="//cdn.ckeditor.com/4.14.0/standard/ckeditor.js"></script>
157 210  
158   -<!--<script src="{{ asset('./ckeditor/ckeditor.js') }}"></script>-->
  211 +<!--<script src="//cdn.ckeditor.com/4.14.0/standard/ckeditor.js"></script>-->
  212 +
  213 +<script src="{{ asset('./ckeditor/ckeditor.js') }}"></script>
159 214 <script>
160 215 CKEDITOR.replace( 'text', {
161 216 filebrowserUploadUrl: "{{route('ckeditor.image-upload', ['_token' => csrf_token() ])}}",
... ... @@ -163,3 +218,251 @@
163 218 filebrowserUploadMethod: 'form'
164 219 });
165 220 </script>
  221 +<script>
  222 + window.addEventListener('DOMContentLoaded', () => {
  223 +
  224 + setTabs(3);
  225 +
  226 + function setTabs(qty) {
  227 +
  228 + const tabs = document.querySelector('.js_tabs');
  229 + const tabsForm = tabs.querySelector('.js_tabs_form');
  230 + const tabsInput = tabs.querySelector('.js_tabs_input');
  231 + const tabsSubmitBtn = tabs.querySelector('.js_tabs_submit_btn');
  232 + const tabsButtons = tabs.querySelector('.js_tabs_buttons');
  233 + const tabsContent = tabs.querySelector('.js_tabs_content');
  234 +
  235 + tabsForm.addEventListener('submit', (e) => {
  236 +
  237 + //e.preventDefault();
  238 +
  239 + const tabsInputValue = tabsInput.value;
  240 + const tabsBtns = tabsButtons.querySelectorAll('.js_tabs_btn');
  241 + const id = Date.now();
  242 +
  243 +
  244 + if (tabsBtns.length >= qty) {
  245 + console.log('Ветка выполнена');
  246 + e.preventDefault();
  247 + }
  248 +
  249 + /*if (tabsInput.dataset.edit) {
  250 +
  251 + tabsBtns.forEach(btn => {
  252 + if (tabsInput.dataset.edit === btn.dataset.id) {
  253 + btn.textContent = tabsInputValue;
  254 + btn.dataset.btn = tabsInputValue;
  255 + }
  256 + });
  257 + console.log('Эта ветка выполнилась');
  258 + tabsInput.removeAttribute('data-edit');
  259 +
  260 + } else {
  261 +
  262 + if (!tabsBtns.length) {
  263 + tabsButtons.innerHTML += getTabsBtnTemplate(tabsInputValue, id);
  264 + tabsContent.innerHTML += getTabsItemTemplate(id);
  265 + }
  266 +
  267 + if (tabsBtns.length && tabsBtns.length < qty) {
  268 +
  269 + let isMatch = false;
  270 +
  271 + tabsBtns.forEach(btn => {
  272 + if (tabsInputValue === btn.dataset.btn) {
  273 + isMatch = true;
  274 + }
  275 + });
  276 +
  277 + console.log('Альтернативная ветка!');
  278 + if (!isMatch) {
  279 + tabsButtons.innerHTML += getTabsBtnTemplate(tabsInputValue, id);
  280 + tabsContent.innerHTML += getTabsItemTemplate(id, 'hidden');
  281 + }
  282 + }
  283 + }*/
  284 +
  285 + tabsInput.value = '';
  286 + addDisabledBtnStatus(tabsSubmitBtn);
  287 +
  288 + });
  289 +
  290 + tabsInput.addEventListener('input', () => {
  291 + if (tabsInput.value !== '') {
  292 + removeDisabledBtnStatus(tabsSubmitBtn);
  293 + } else {
  294 + addDisabledBtnStatus(tabsSubmitBtn);
  295 + }
  296 + });
  297 +
  298 + tabsButtons.addEventListener('click', (e) => {
  299 +
  300 + const target = e.target.closest('.js_tabs_btn');
  301 +
  302 + if (target) {
  303 +
  304 + const tabsItems = tabs.querySelectorAll('.js_tabs_item');
  305 +
  306 + tabsItems.forEach(item => {
  307 +
  308 + item.classList.add('hidden');
  309 +
  310 + if (target.dataset.id === item.dataset.id) {
  311 + item.classList.remove('hidden');
  312 + }
  313 + });
  314 + }
  315 +
  316 + });
  317 +
  318 + tabsButtons.addEventListener('dblclick', (e) => {
  319 + const target = e.target.closest('.js_tabs_btn');
  320 +
  321 + if (target) {
  322 + tabsInput.value = target.dataset.btn;
  323 + tabsInput.dataset.edit = target.dataset.id;
  324 + removeDisabledBtnStatus(tabsSubmitBtn);
  325 + }
  326 + });
  327 +
  328 + function getTabsBtnTemplate(btnName, id) {
  329 + return `
  330 + <div>
  331 + <button class="tabs__btn js_tabs_btn mt-4 px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple" data-btn="${btnName}" data-id="${id}">${btnName}</button>
  332 + </div>
  333 + `;
  334 + }
  335 +
  336 + function getTabsItemTemplate(id, className = '') {
  337 + return `
  338 + <div class="tabs__item js_tabs_item ${className}" data-id="${id}">
  339 + <div class="mb-4">${id}</div>
  340 + <table class="mb-4 w-full whitespace-no-wrap">
  341 + <thead>
  342 + <tr
  343 + class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800"
  344 + >
  345 + <th class="px-4 py-3">Client</th>
  346 + <th class="px-4 py-3">Amount</th>
  347 + <th class="px-4 py-3">Status</th>
  348 + <th class="px-4 py-3">Date</th>
  349 + </tr>
  350 + </thead>
  351 + <tbody
  352 + class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800"
  353 + >
  354 + <tr class="text-gray-700 dark:text-gray-400">
  355 + <td class="px-4 py-3">
  356 + <div class="flex items-center text-sm">
  357 + <!-- Avatar with inset shadow -->
  358 + <div
  359 + class="relative hidden w-8 h-8 mr-3 rounded-full md:block"
  360 + >
  361 + <img
  362 + class="object-cover w-full h-full rounded-full"
  363 + src="https://images.unsplash.com/flagged/photo-1570612861542-284f4c12e75f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ"
  364 + alt=""
  365 + loading="lazy"
  366 + />
  367 + <div
  368 + class="absolute inset-0 rounded-full shadow-inner"
  369 + aria-hidden="true"
  370 + ></div>
  371 + </div>
  372 + <div>
  373 + <p class="font-semibold">Hans Burger</p>
  374 + <p class="text-xs text-gray-600 dark:text-gray-400">
  375 + 10x Developer
  376 + </p>
  377 + </div>
  378 + </div>
  379 + </td>
  380 + <td class="px-4 py-3 text-sm">
  381 + $ 863.45
  382 + </td>
  383 + <td class="px-4 py-3 text-xs">
  384 + <span
  385 + class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100"
  386 + >
  387 + Approved
  388 + </span>
  389 + </td>
  390 + <td class="px-4 py-3 text-sm">
  391 + 6/10/2020
  392 + </td>
  393 + </tr>
  394 +
  395 + <tr class="text-gray-700 dark:text-gray-400">
  396 + <td class="px-4 py-3">
  397 + <div class="flex items-center text-sm">
  398 + <!-- Avatar with inset shadow -->
  399 + <div
  400 + class="relative hidden w-8 h-8 mr-3 rounded-full md:block"
  401 + >
  402 + <img
  403 + class="object-cover w-full h-full rounded-full"
  404 + src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&facepad=3&fit=facearea&s=707b9c33066bf8808c934c8ab394dff6"
  405 + alt=""
  406 + loading="lazy"
  407 + />
  408 + <div
  409 + class="absolute inset-0 rounded-full shadow-inner"
  410 + aria-hidden="true"
  411 + ></div>
  412 + </div>
  413 + <div>
  414 + <p class="font-semibold">Jolina Angelie</p>
  415 + <p class="text-xs text-gray-600 dark:text-gray-400">
  416 + Unemployed
  417 + </p>
  418 + </div>
  419 + </div>
  420 + </td>
  421 + <td class="px-4 py-3 text-sm">
  422 + $ 369.95
  423 + </td>
  424 + <td class="px-4 py-3 text-xs">
  425 + <span
  426 + class="px-2 py-1 font-semibold leading-tight text-orange-700 bg-orange-100 rounded-full dark:text-white dark:bg-orange-600"
  427 + >
  428 + Pending
  429 + </span>
  430 + </td>
  431 + <td class="px-4 py-3 text-sm">
  432 + 6/10/2020
  433 + </td>
  434 + </tr>
  435 + </tbody>
  436 + </table>
  437 +
  438 + <div class="flex flex-col flex-wrap mb-4 md:flex-row md:space-x-4">
  439 + <div>
  440 + <a href="#" class="mt-4 px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">Редактировать</a>
  441 + </div>
  442 + <div>
  443 + <a href="#" class="mt-4 px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">Удалить</a>
  444 + </div>
  445 + </div>
  446 + </div>
  447 + `;
  448 + }
  449 +
  450 + function addDisabledBtnStatus(btn) {
  451 + btn.disabled = true;
  452 + btn.classList.add('opacity-50', 'cursor-not-allowed');
  453 + btn.classList.remove('active:bg-purple-600', 'hover:bg-purple-700', 'focus:shadow-outline-purple');
  454 + }
  455 +
  456 + function removeDisabledBtnStatus(btn) {
  457 + btn.disabled = false;
  458 + btn.classList.remove('opacity-50', 'cursor-not-allowed');
  459 + btn.classList.add('active:bg-purple-600', 'hover:bg-purple-700', 'focus:shadow-outline-purple');
  460 + }
  461 +
  462 + }
  463 + console.log('main.js init');
  464 +
  465 + });
  466 +
  467 +</script>
  468 +
resources/views/admin/education/program-edit.blade.php
... ... @@ -0,0 +1,50 @@
  1 +@extends('layout.admin', ['title' => 'Админка - Образование - Редактирование программы обучения'])
  2 +
  3 +@section('content')
  4 + <form method="POST" action="{{ route('admin.update-program-education', ['program' => $program, 'education' => $education]) }}">
  5 + @csrf
  6 +
  7 + <div class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800">
  8 + <input type="hidden" id="education_id" name="education_id" value="{{ $id_education }}"/>
  9 + <input type="hidden" id="level" name="level" value="{{ $program->level }}"/>
  10 +
  11 + <label class="block text-sm">
  12 + <span class="text-gray-700 dark:text-gray-400">Название специализации</span>
  13 + <input name="name" id="name"
  14 + class="block w-full mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray form-input"
  15 + placeholder="Название специализации" required value="{{ old('name') ?? $program->name ?? '' }}"
  16 + />
  17 + @error('name')
  18 + <span class="text-xs text-red-600 dark:text-red-400">
  19 + {{ $message }}
  20 + </span>
  21 + @enderror
  22 + </label><br>
  23 +
  24 + <label class="block text-sm">
  25 + <span class="text-gray-700 dark:text-gray-400">Текст</span>
  26 + <textarea class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray ckeditor" name="text" placeholder="Текст (html)" required
  27 + rows="10">{{ old('text') ?? $program->text ?? '' }}</textarea>
  28 + @error('text')
  29 + <span class="text-xs text-red-600 dark:text-red-400">
  30 + {{ $message }}
  31 + </span>
  32 + @enderror
  33 + </label><br>
  34 +
  35 + <div class="flex flex-col flex-wrap mb-4 space-y-4 md:flex-row md:items-end md:space-x-4">
  36 + <div>
  37 + <button type="submit" class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">
  38 + Сохранить
  39 + </button>
  40 +
  41 + <a href="{{ route('admin.education.edit', ['education' => $id_education]) }}"
  42 + class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"
  43 + style="display: -webkit-inline-box; height: 30px!important;"
  44 + >Назад</a>
  45 + </div>
  46 + </div>
  47 + </div>
  48 + </form>
  49 +
  50 +@endsection
resources/views/admin/education/program.blade.php
... ... @@ -37,6 +37,11 @@
37 37 <button type="submit" class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">
38 38 Сохранить
39 39 </button>
  40 +
  41 + <a href="{{ route('admin.education.edit', ['education' => $id_education]) }}"
  42 + class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"
  43 + style="display: -webkit-inline-box; height: 30px!important;"
  44 + >Назад</a>
40 45 </div>
41 46 </div>
42 47 </div>
... ... @@ -228,6 +228,10 @@ Route::group([
228 228  
229 229 Route::get('program-education', [EducationController::class, 'add_program'])->name('add-program-education');
230 230 Route::post('program-education', [EducationController::class, 'store_program'])->name('store-program-education');
  231 +
  232 + Route::get('program-education/edit/{program}/{education}', [EducationController::class, 'edit_program'])->name('edit-program-education');
  233 + Route::post('program-education/edit/{program}/{education}', [EducationController::class, 'update_program'])->name('update-program-education');
  234 +
231 235 Route::get('program-education/delete/{program}/{education}', [EducationController::class, 'delete_program'])->name('delete-program-education');
232 236  
233 237 //Route::get('job-titles', [AdminController::class, 'index'])->name('job-titles');