예제 #1
0
 /**
  * Setup the current application and cycle
  */
 public function actionIndex()
 {
     $form = new \Foundation\Form();
     $form->setCSRFToken($this->getCSRFToken());
     $form->setAction($this->path("setup/copyapplication"));
     $field = $form->newField();
     $field->setLegend('Import Application');
     $element = $field->newElement('SelectList', 'application');
     $element->setLabel('Cycle to Copy');
     $element->addValidator(new \Foundation\Form\Validator\NotEmpty($element));
     $applications = $this->_em->getRepository('\\Jazzee\\Entity\\Application')->findByProgram($this->_program);
     foreach ($applications as $application) {
         $element->newItem($application->getId(), $application->getCycle()->getName());
     }
     $form->newButton('submit', 'Copy');
     if ($input = $form->processInput($this->post)) {
         $previousApplication = $this->_em->getRepository('\\Jazzee\\Entity\\Application')->find($input->get('application'));
         $this->_application = new \Jazzee\Entity\Application();
         $this->_application->setProgram($this->_program);
         $this->_application->setCycle($this->_cycle);
         $this->_application->inVisible();
         $this->_application->unPublish();
         if ($previousApplication->isByInvitationOnly()) {
             $this->_application->byInvitationOnly();
         }
         $this->_application->setContactName($previousApplication->getContactName());
         $this->_application->setContactEmail($previousApplication->getContactEmail());
         $this->_application->setWelcome($previousApplication->getWelcome());
         $this->_application->setOpen($previousApplication->getOpen()->format('c'));
         $this->_application->setClose($previousApplication->getClose()->format('c'));
         $this->_application->setBegin($previousApplication->getBegin()->format('c'));
         $this->_application->setStatusIncompleteText($previousApplication->getStatusIncompleteText());
         $this->_application->setStatusNoDecisionText($previousApplication->getStatusNoDecisionText());
         $this->_application->setStatusAdmitText($previousApplication->getStatusAdmitText());
         $this->_application->setStatusDenyText($previousApplication->getStatusDenyText());
         $this->_application->setStatusAcceptText($previousApplication->getStatusAcceptText());
         $this->_application->setStatusDeclineText($previousApplication->getStatusDeclineText());
         foreach ($previousApplication->getApplicationPages() as $previousPage) {
             $page = $this->addPage($previousPage->getPage());
             $applicationPage = new \Jazzee\Entity\ApplicationPage();
             $applicationPage->setApplication($this->_application);
             $applicationPage->setPage($page);
             $applicationPage->setKind($previousPage->getKind());
             $applicationPage->setTitle($previousPage->getTitle());
             $applicationPage->setMin($previousPage->getMin());
             $applicationPage->setMax($previousPage->getMax());
             $applicationPage->setName($previousPage->getName());
             if ($previousPage->isRequired()) {
                 $applicationPage->required();
             } else {
                 $applicationPage->optional();
             }
             if ($previousPage->answerStatusDisplay()) {
                 $applicationPage->showAnswerStatus();
             } else {
                 $applicationPage->hideAnswerStatus();
             }
             $applicationPage->setInstructions($previousPage->getInstructions());
             $applicationPage->setLeadingText($previousPage->getLeadingText());
             $applicationPage->setTrailingText($previousPage->getTrailingText());
             $applicationPage->setWeight($previousPage->getWeight());
             $this->_em->persist($applicationPage);
         }
         $templates = $this->_em->getRepository('Jazzee\\Entity\\Template')->findBy(array('application' => $previousApplication));
         foreach ($templates as $previousTemplate) {
             $template = new \Jazzee\Entity\Template($previousTemplate->getType());
             $template->setApplication($this->_application);
             $template->setTitle($previousTemplate->getTitle());
             $template->setText($previousTemplate->getText());
             $this->_em->persist($template);
         }
         $this->_em->persist($this->_application);
         $this->addMessage('success', 'Application copied successfully');
         unset($this->_store->AdminControllerGetNavigation);
         $this->redirectPath('setup/application');
     }
     $this->setVar('form', $form);
 }
예제 #2
0
 /**
  * Setup the current application and cycle
  */
 public function actionIndex()
 {
     $form = new \Foundation\Form();
     $form->setCSRFToken($this->getCSRFToken());
     $form->setAction($this->path("setup/importapplication"));
     $field = $form->newField();
     $field->setLegend('Import Application');
     $element = $field->newElement('FileInput', 'file');
     $element->setLabel('XML Configuration');
     $element->addValidator(new \Foundation\Form\Validator\NotEmpty($element));
     $element->addFilter(new \Foundation\Form\Filter\Blob($element));
     $form->newButton('submit', 'Import');
     if ($input = $form->processInput($this->post)) {
         $xml = simplexml_load_string($input->get('file'));
         if (!$this->_application) {
             $this->_application = new \Jazzee\Entity\Application();
             $this->_application->setProgram($this->_program);
             $this->_application->setCycle($this->_cycle);
         }
         if ($this->_application->isPublished()) {
             $this->addMessage('error', 'This application is already published.  No changes can be made.');
             $this->redirectPath('setup/importapplication');
         }
         $pages = $this->_application->getApplicationPages();
         if (count($pages)) {
             $this->addMessage('error', 'This application already has pages.  You cannot import a configuration for an application with pages.');
             $this->redirectPath('setup/importapplication');
         }
         $preferences = $xml->xpath('/response/application/preferences');
         $arr = array();
         foreach ($preferences[0]->children() as $element) {
             $arr[$element->getName()] = (string) $element;
         }
         $this->_application->setContactName($arr['contactName']);
         $this->_application->setContactEmail($arr['contactEmail']);
         $this->_application->setWelcome(html_entity_decode($arr['welcome']));
         $this->_application->setOpen($arr['open']);
         $this->_application->setClose($arr['close']);
         $this->_application->setBegin($arr['begin']);
         $this->_application->setStatusIncompleteText($arr['statusIncompleteText']);
         $this->_application->setStatusNoDecisionText($arr['statusNoDecisionText']);
         $this->_application->setStatusAdmitText($arr['statusAdmitText']);
         $this->_application->setStatusDenyText($arr['statusDenyText']);
         $this->_application->setStatusAcceptText($arr['statusAcceptText']);
         $this->_application->setStatusDeclineText($arr['statusDeclineText']);
         if ($arr['visible'] == '1') {
             $this->_application->visible();
         }
         if ($arr['byinvitationonly'] == '1') {
             $this->_application->byInvitationOnly();
         } else {
             $this->_application->notByInvitationOnly();
         }
         if (array_key_exists('externalIdValidationExpression', $arr) and !empty($arr['externalIdValidationExpression'])) {
             $this->_application->setExternalIdValidationExpression($arr['externalIdValidationExpression']);
         }
         foreach ($xml->xpath('/response/application/preferences/templates/template') as $templates) {
             $arr2 = array();
             foreach ($templates[0]->children() as $element) {
                 $arr2[$element->getName()] = (string) $element;
             }
             $template = new \Jazzee\Entity\Template($arr2['type']);
             $template->setApplication($this->_application);
             $template->setTitle($arr2['title']);
             $template->setText($arr2['text']);
             $this->_em->persist($template);
         }
         foreach ($xml->xpath('/response/application/pages/page') as $element) {
             $attributes = $element->attributes();
             $page = $this->addPageFromXml($element);
             $applicationPage = new \Jazzee\Entity\ApplicationPage();
             $applicationPage->setApplication($this->_application);
             $applicationPage->setPage($page);
             $applicationPage->setKind((string) $attributes['kind']);
             $applicationPage->setName((string) $attributes['name']);
             $applicationPage->setTitle(html_entity_decode((string) $attributes['title']));
             $applicationPage->setMin((string) $attributes['min']);
             $applicationPage->setMax((string) $attributes['max']);
             if ((string) $attributes['required']) {
                 $applicationPage->required();
             } else {
                 $applicationPage->optional();
             }
             if ((string) $attributes['answerStatusDisplay']) {
                 $applicationPage->showAnswerStatus();
             } else {
                 $applicationPage->hideAnswerStatus();
             }
             $eattr = $element->xpath('instructions');
             $applicationPage->setInstructions((string) $eattr[0]);
             $eattr = $element->xpath('leadingText');
             $applicationPage->setLeadingText((string) $eattr[0]);
             $eattr = $element->xpath('trailingText');
             $applicationPage->setTrailingText((string) $eattr[0]);
             $applicationPage->setWeight((string) $attributes['weight']);
             $this->_em->persist($applicationPage);
         }
         $this->_em->persist($this->_application);
         $this->addMessage('success', 'Application imported successfully');
         unset($this->_store->AdminControllerGetNavigation);
     }
     $this->setVar('form', $form);
 }