public function adicionarAction() { $alBo = new AlBusiness(); $als = array('' => 'Selecione!'); $als += $alBo->fetchPairs(); $adeptoBo = new AdeptoBusiness(); $adeptos = $adeptoBo->fetchPairs(); // Inclui id ao nome do adepto para facilitar a visualizacao foreach ($adeptos as $id => $nome) { $adeptos[$id] = $id . " - " . $nome; } $postData = array(); $adeptosSelecionados = array(); $form = new Adicionar(); if ($this->isPost()) { if ($form->isValid()) { $data = $form->getData(); Database::beginTransaction(); try { $dataTratada = implode('-', array_reverse(explode('/', $data['data']))); // Cadastra Reuniao $reuniaoBo = new ReuniaoBusiness(); $idReuniao = $reuniaoBo->insert(array('data' => $dataTratada, 'fk_al' => $data['al'])); // Cadastra adeptos na reuniao $reuniaoAdeptoBo = new ReuniaoAdeptoBusiness(); foreach ($data['adeptos'] as $idAdepto) { $reuniaoAdeptoBo->insert(array('fk_reuniao' => $idReuniao, 'fk_adepto' => $idAdepto)); } Database::commit(); // Add mensagem e redireciona $this->addMsg("Reunião cadastrada com sucesso", MsgType::SUCCESS, true); return $this->redirect("/relatorio/anual?al=" . $data['al'] . "&ano=" . date('Y', strtotime($dataTratada))); } catch (Exception $ex) { Database::rollBack(); $this->addMsg("Erro inesperado, tente novamente", MsgType::DANGER); } } else { $this->addMsg("Verifique os erros no formulário", MsgType::DANGER); } // Retorna post para view $postData = $form->getData(); if ($postData['adeptos']) { // Separa lista de selecionados e não selecionados foreach ($postData['adeptos'] as $key) { $adeptosSelecionados[$key] = $adeptos[$key]; unset($adeptos[$key]); } } } $this->addViewVar(array('als' => $als, 'adeptos' => $adeptos, 'adeptosSelecionados' => $adeptosSelecionados, 'form' => $form, 'postData' => $postData)); }