Loading app/Http/Controllers/InstitucionesController.php +44 −32 Original line number Diff line number Diff line Loading @@ -40,16 +40,29 @@ public function store(Request $request) 'codigo_postal' => 'nullable|integer', 'localidad' => 'nullable|string', 'imagen' => 'nullable|file|image|max:2048', 'red_social_inst' => 'nullable|array', 'link_inst' => 'nullable|array', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); $telefonosData = array_map(function ($item) { return array_map(function ($value) { return array_map(function ($value, $key) { if ($key === 'numero' && !is_null($value)) { // Elimina espacios y caracteres no numéricos $value = preg_replace('/[^0-9]/', '', $value); } return ($value === "null") ? null : $value; }, $item); }, $item, array_keys($item)); }, $telefonosData); $redesSocialesData = $request->only(['red_social_inst', 'link_inst', 'tipo_RS_inst']); $redesSocialesData = array_filter($redesSocialesData, function ($item) { // Solo incluir si no es nulo o vacío return !is_null($item) && !empty($item); }); $redesSocialesData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; Loading Loading @@ -195,10 +208,10 @@ public function update(Request $request, string $id) // Guardar auditoría de redes sociales $redesAnteriores = $institucion->redes->toArray(); $redes = collect($request->input('red_social_inst'))->map(function($url, $index) use ($request) { $redes = collect($request->input('red_social_inst'))->map(function($redSocial, $index) use ($request) { return [ 'link_inst' => $url, 'red_social_inst' => $request->input('red_social_inst')[$index], 'link_inst' => $request->input('link_inst')[$index], // Asignar correctamente el link 'red_social_inst' => $redSocial, 'tipo_RS_inst' => $request->input('tipo_RS_inst')[$index], ]; })->toArray(); Loading Loading @@ -343,25 +356,21 @@ private function storeRedesSociales($institucionesId, $redesSocialesData) { $redesSociales = []; if (isset($redesSocialesData['red_social_inst'])) { foreach ($redesSocialesData['red_social_inst'] as $index => $redSocial) { // Verificar si todos los campos de la red social están vacíos (null o "null") $isEmpty = true; foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } // Verificar si el campo de la red social está vacío (null o "null") $isEmpty = empty($redSocial) && empty($redesSocialesData['link_inst'][$index]) && empty($redesSocialesData['tipo_RS_inst'][$index]); if (!$isEmpty) { $redesSociales[] = [ 'instituciones_id' => $institucionesId, 'red_social_inst' =>$redesSocialesData['red_social_inst'][$index], 'link_inst' => $redesSocialesData['link_inst'][$index], 'tipo_RS_inst' => $redesSocialesData['tipo_RS_inst'][$index], 'red_social_inst' => $redSocial, 'link_inst' => $redesSocialesData['link_inst'][$index] ?? null, 'tipo_RS_inst' => $redesSocialesData['tipo_RS_inst'][$index] ?? null, ]; } } } if (!empty($redesSociales)) { RedesSocialesInst::insert($redesSociales); Loading @@ -371,15 +380,18 @@ private function storeRedesSociales($institucionesId, $redesSocialesData) return false; } private function redSocialDataPresent($redesSocialesData) { foreach ($redesSocialesData['red_social'] as $index => $redSocial) { if (isset($redesSocialesData['red_social_inst'])) { foreach ($redesSocialesData['red_social_inst'] as $index => $redSocial) { foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { if (isset($values[$index]) && !is_null($values[$index]) && $values[$index] !== "null") { return true; } } } } return false; } Loading resources/views/adminGen/instituciones/create.blade.php +32 −32 Original line number Diff line number Diff line Loading @@ -369,18 +369,18 @@ agregarBtnRed.addEventListener('click', function() { const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-4', 'gap-5', 'form-group', 'relative'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-4', 'gap-5', 'form-group', 'relative', 'mb-5'); newFormGroup.innerHTML = ` <div> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input w-full" /> </div> <div> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> <div class="col-span-4 md:col-span-1"> <label for="link_inst">URL o página web:</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input w-full" /> </div> <div> <label for="tipo_RS_inst">Tipo</label> <div class="col-span-4 md:col-span-1"> <label for="tipo_RS_inst">Tipo:</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null">Selecciona una opción</option> <option value="Facebook">Facebook</option> Loading @@ -399,7 +399,6 @@ </svg> </button> </div> <br> `; dynamicFormContainerRed.appendChild(newFormGroup); Loading @@ -409,6 +408,7 @@ }); }); // Añadir evento de clic para eliminar a los grupos iniciales document.querySelectorAll('.removeBtn').forEach(function(btn) { btn.addEventListener('click', function() { Loading resources/views/adminGen/instituciones/edit.blade.php +45 −47 Original line number Diff line number Diff line Loading @@ -226,17 +226,17 @@ <div id="dynamicFormContainerRed"> @foreach ($redes as $red) <div class="grid grid-cols-1 md:grid-cols-3 gap-5 form-group relative"> <div> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre de como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" value="{{ old('red_social_inst[]', isset($red['red_social_inst']) ? $red['red_social_inst'] : '') }}" /> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input same-width-input" value="{{ old('red_social_inst[]', isset($red['red_social_inst']) ? $red['red_social_inst'] : '') }}" /> </div> <div class="mb-5"> <div class="col-span-4 md:col-span-1 mb-5"> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" value="{{ old('link_inst[]', isset($red['link_inst']) ? $red['link_inst'] : '') }}" /> <input id="link_inst" name="link_inst[]" type="text" class="form-input same-width-input" value="{{ old('link_inst[]', isset($red['link_inst']) ? $red['link_inst'] : '') }}" /> </div> <div class="mb-5"> <div class="col-span-4 md:col-span-1 mb-5"> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm same-width-input"> <option value="null" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == null ? 'selected' : '' }}>Selecciona una opción</option> <option value="Facebook" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == 'Facebook' ? 'selected' : '' }}>Facebook</option> <option value="Instagram" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == 'Instagram' ? 'selected' : '' }}>Instagram</option> Loading Loading @@ -389,17 +389,17 @@ const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-3', 'gap-5', 'form-group', 'relative'); newFormGroup.innerHTML = ` <fieldset> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> </fieldset> <fieldset> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input same-width-input" /> </div> <div class="col-span-4 md:col-span-1"> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> </fieldset> <div> <input id="link_inst" name="link_inst[]" type="text" class="form-input same-width-input" /> </div> <div class="col-span-4 md:col-span-1"> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full same-width-input py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null">Selecciona una opción</option> <option value="Facebook">Facebook</option> <option value="Instagram">Instagram</option> Loading Loading @@ -458,6 +458,4 @@ function showToast(message, heading, icon) { }); </script> </x-layout.default> Loading
app/Http/Controllers/InstitucionesController.php +44 −32 Original line number Diff line number Diff line Loading @@ -40,16 +40,29 @@ public function store(Request $request) 'codigo_postal' => 'nullable|integer', 'localidad' => 'nullable|string', 'imagen' => 'nullable|file|image|max:2048', 'red_social_inst' => 'nullable|array', 'link_inst' => 'nullable|array', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); $telefonosData = array_map(function ($item) { return array_map(function ($value) { return array_map(function ($value, $key) { if ($key === 'numero' && !is_null($value)) { // Elimina espacios y caracteres no numéricos $value = preg_replace('/[^0-9]/', '', $value); } return ($value === "null") ? null : $value; }, $item); }, $item, array_keys($item)); }, $telefonosData); $redesSocialesData = $request->only(['red_social_inst', 'link_inst', 'tipo_RS_inst']); $redesSocialesData = array_filter($redesSocialesData, function ($item) { // Solo incluir si no es nulo o vacío return !is_null($item) && !empty($item); }); $redesSocialesData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; Loading Loading @@ -195,10 +208,10 @@ public function update(Request $request, string $id) // Guardar auditoría de redes sociales $redesAnteriores = $institucion->redes->toArray(); $redes = collect($request->input('red_social_inst'))->map(function($url, $index) use ($request) { $redes = collect($request->input('red_social_inst'))->map(function($redSocial, $index) use ($request) { return [ 'link_inst' => $url, 'red_social_inst' => $request->input('red_social_inst')[$index], 'link_inst' => $request->input('link_inst')[$index], // Asignar correctamente el link 'red_social_inst' => $redSocial, 'tipo_RS_inst' => $request->input('tipo_RS_inst')[$index], ]; })->toArray(); Loading Loading @@ -343,25 +356,21 @@ private function storeRedesSociales($institucionesId, $redesSocialesData) { $redesSociales = []; if (isset($redesSocialesData['red_social_inst'])) { foreach ($redesSocialesData['red_social_inst'] as $index => $redSocial) { // Verificar si todos los campos de la red social están vacíos (null o "null") $isEmpty = true; foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } // Verificar si el campo de la red social está vacío (null o "null") $isEmpty = empty($redSocial) && empty($redesSocialesData['link_inst'][$index]) && empty($redesSocialesData['tipo_RS_inst'][$index]); if (!$isEmpty) { $redesSociales[] = [ 'instituciones_id' => $institucionesId, 'red_social_inst' =>$redesSocialesData['red_social_inst'][$index], 'link_inst' => $redesSocialesData['link_inst'][$index], 'tipo_RS_inst' => $redesSocialesData['tipo_RS_inst'][$index], 'red_social_inst' => $redSocial, 'link_inst' => $redesSocialesData['link_inst'][$index] ?? null, 'tipo_RS_inst' => $redesSocialesData['tipo_RS_inst'][$index] ?? null, ]; } } } if (!empty($redesSociales)) { RedesSocialesInst::insert($redesSociales); Loading @@ -371,15 +380,18 @@ private function storeRedesSociales($institucionesId, $redesSocialesData) return false; } private function redSocialDataPresent($redesSocialesData) { foreach ($redesSocialesData['red_social'] as $index => $redSocial) { if (isset($redesSocialesData['red_social_inst'])) { foreach ($redesSocialesData['red_social_inst'] as $index => $redSocial) { foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { if (isset($values[$index]) && !is_null($values[$index]) && $values[$index] !== "null") { return true; } } } } return false; } Loading
resources/views/adminGen/instituciones/create.blade.php +32 −32 Original line number Diff line number Diff line Loading @@ -369,18 +369,18 @@ agregarBtnRed.addEventListener('click', function() { const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-4', 'gap-5', 'form-group', 'relative'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-4', 'gap-5', 'form-group', 'relative', 'mb-5'); newFormGroup.innerHTML = ` <div> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input w-full" /> </div> <div> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> <div class="col-span-4 md:col-span-1"> <label for="link_inst">URL o página web:</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input w-full" /> </div> <div> <label for="tipo_RS_inst">Tipo</label> <div class="col-span-4 md:col-span-1"> <label for="tipo_RS_inst">Tipo:</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null">Selecciona una opción</option> <option value="Facebook">Facebook</option> Loading @@ -399,7 +399,6 @@ </svg> </button> </div> <br> `; dynamicFormContainerRed.appendChild(newFormGroup); Loading @@ -409,6 +408,7 @@ }); }); // Añadir evento de clic para eliminar a los grupos iniciales document.querySelectorAll('.removeBtn').forEach(function(btn) { btn.addEventListener('click', function() { Loading
resources/views/adminGen/instituciones/edit.blade.php +45 −47 Original line number Diff line number Diff line Loading @@ -226,17 +226,17 @@ <div id="dynamicFormContainerRed"> @foreach ($redes as $red) <div class="grid grid-cols-1 md:grid-cols-3 gap-5 form-group relative"> <div> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre de como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" value="{{ old('red_social_inst[]', isset($red['red_social_inst']) ? $red['red_social_inst'] : '') }}" /> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input same-width-input" value="{{ old('red_social_inst[]', isset($red['red_social_inst']) ? $red['red_social_inst'] : '') }}" /> </div> <div class="mb-5"> <div class="col-span-4 md:col-span-1 mb-5"> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" value="{{ old('link_inst[]', isset($red['link_inst']) ? $red['link_inst'] : '') }}" /> <input id="link_inst" name="link_inst[]" type="text" class="form-input same-width-input" value="{{ old('link_inst[]', isset($red['link_inst']) ? $red['link_inst'] : '') }}" /> </div> <div class="mb-5"> <div class="col-span-4 md:col-span-1 mb-5"> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm same-width-input"> <option value="null" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == null ? 'selected' : '' }}>Selecciona una opción</option> <option value="Facebook" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == 'Facebook' ? 'selected' : '' }}>Facebook</option> <option value="Instagram" {{ old('tipo_RS_inst[]', $red->tipo_RS_inst) == 'Instagram' ? 'selected' : '' }}>Instagram</option> Loading Loading @@ -389,17 +389,17 @@ const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-3', 'gap-5', 'form-group', 'relative'); newFormGroup.innerHTML = ` <fieldset> <div class="col-span-4 md:col-span-1"> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> </fieldset> <fieldset> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input same-width-input" /> </div> <div class="col-span-4 md:col-span-1"> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> </fieldset> <div> <input id="link_inst" name="link_inst[]" type="text" class="form-input same-width-input" /> </div> <div class="col-span-4 md:col-span-1"> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <select id="tipo_RS_inst" name="tipo_RS_inst[]" class="block w-full same-width-input py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null">Selecciona una opción</option> <option value="Facebook">Facebook</option> <option value="Instagram">Instagram</option> Loading Loading @@ -458,6 +458,4 @@ function showToast(message, heading, icon) { }); </script> </x-layout.default>