public function __construct($configIds = [], $classNames = [])
 {
     parent::__construct($configIds, $classNames);
     $nextyear = date("Y") + 1;
     $this->add(array('name' => 'expiry_date', 'attributes' => array('type' => 'text', 'class' => 'datepicker text-center', 'value' => '01/03/' . $nextyear), 'options' => array('label' => 'Data de expiração', 'add-on-prepend' => '<i class="glyphicon glyphicon-calendar"></i>')));
 }
 /**
  * Exibe um formulário para geração do mural de alunos 
  * Quando o formulário é submetido o mural é gerado e exibido no navegador
  * 
  * @return ViewModel
  */
 public function studentsBoardAction()
 {
     $message = null;
     $pdf = null;
     $form = null;
     $request = $this->getRequest();
     try {
         //  Pega todas as configurações de fundo cadastradas e seleciona os id's
         //  para mandar para o formulário
         $bgConfigs = $this->getBackgroundConfigs($message);
         $configsIds = array();
         foreach ($bgConfigs as $bgConfig) {
             $configsIds[$bgConfig['id']] = $bgConfig['id'];
         }
         //  Pega todas as turmas cadastradas e seleciona os nomes para mandar
         //  para o formulário
         $studentClasses = $this->getStudentClasses($message);
         $classNames = array();
         foreach ($studentClasses as $studentClass) {
             $classNames[$studentClass['id']] = $studentClass['name'];
         }
     } catch (Exception $ex) {
         $message = $message . '<br>Erro na conexão com o banco de dados.' . ' Entre com contato com o administrador do sistema.<br>' . 'Erro: ' . $ex->getMessage();
         return new ViewModel(array('message' => $message, 'form' => $form, 'pdf' => $pdf));
     }
     //  Cria o formulário e o processa
     $form = new StudentsBoardForm($configsIds, $classNames);
     if ($request->isPost()) {
         $post = array_merge_recursive($request->getPost()->toArray(), $request->getFiles()->toArray());
         $form->setData($post);
         $form->setInputFilter(new StudentsBoardFilter());
         if ($form->isValid()) {
             $data = $form->getData();
             try {
                 $em = $this->getEntityManager();
                 //  Obtém as informações dos alunos da turma selecionada
                 $enrolls = $studentClasses[$data['class_id']]['enrollments']->toArray();
                 if (empty($enrolls)) {
                     $message = 'A turma selecionada não possui alunos cadastrados.';
                     return new ViewModel(array('message' => $message, 'form' => $form, 'pdf' => $pdf));
                 }
                 foreach ($enrolls as $enroll) {
                     $people[] = $enroll->getRegistration()->getPerson();
                 }
                 // Agrupa as informações dos alunos da turma
                 foreach ($people as $person) {
                     $students[] = array('name' => $person->getPersonName(), 'rg' => $person->getPersonRg(), 'img_url' => $person->getPersonPhoto());
                 }
                 //  Agrupa as informações da config de fundo selecionada
                 $config = array('phrase' => $bgConfigs[$data['config_id']]['phrase'], 'author' => $bgConfigs[$data['config_id']]['author'], 'bg_img_url' => $bgConfigs[$data['config_id']]['img']);
                 // Gera PDF...
             } catch (\Exception $ex) {
                 $message = 'Erro inesperado. Entre com contato com o administrador do sistema.<br>' . 'Erro: ' . $ex->getMessage();
             }
         }
     }
     return new ViewModel(array('message' => $message, 'form' => $form, 'pdf' => $pdf));
 }