/**
  * Sauvegarde
  */
 public function postAction()
 {
     if ($datas = $this->getRequest()->getPost()) {
         try {
             $errors = '';
             // Recherche des sections
             $section = new Form_Model_Section();
             $sections = $section->findByValueId($this->getCurrentOptionValue()->getId());
             $field = new Form_Model_Field();
             // Validator date
             $validator = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd'));
             foreach ($sections as $k => $section) {
                 // Recherche les fields de la section
                 $section->findFields($section->getId());
                 // Boucle sur les fields
                 foreach ($section->getFields() as $key => $field) {
                     if ($field->isRequired() == 1 && $datas['field_' . $k . '_' . $key] == '') {
                         $errors .= $this->_('<strong>%s</strong> must be filled<br />', $field->getName());
                     }
                     if ($field->getType() == 'email' && !Zend_Validate::is($datas['field_' . $k . '_' . $key], 'EmailAddress')) {
                         $errors .= $this->_('<strong>%s</strong> must be a valid email address<br />', $field->getName());
                     }
                     if ($field->getType() == 'nombre' && !Zend_Validate::is($datas['field_' . $k . '_' . $key], 'Digits')) {
                         $errors .= $this->_('<strong>%s</strong> must be a numerical value<br />', $field->getName());
                     }
                     if ($field->getType() == 'date' && !$validator->isValid($datas['field_' . $k . '_' . $key])) {
                         $errors .= $this->_('<strong>%s</strong> must be a valid date<br />', $field->getName());
                     }
                     $datasChanged['field_' . $k . '_' . $key] = array('name' => $field->getName(), 'value' => $datas['field_' . $k . '_' . $key]);
                 }
             }
             if (empty($errors)) {
                 $form = $this->getCurrentOptionValue()->getObject();
                 $layout = $this->getLayout()->loadEmail('form', 'send_email');
                 $layout->getPartial('content_email')->setDatas($datasChanged);
                 $content = $layout->render();
                 $mail = new Zend_Mail('UTF-8');
                 $mail->setBodyHtml($content);
                 $mail->setFrom($form->getEmail(), $this->getApplication()->getName());
                 $mail->addTo($form->getEmail(), $this->_('Your app\'s form'));
                 $mail->setSubject($this->_('Your app\'s form'));
                 $mail->send();
                 $html = array('success' => 1);
             } else {
                 $html = array('error' => 1, 'message' => $errors);
             }
         } catch (Exception $e) {
             $html = array('error' => 1, 'message' => $e->getMessage());
         }
         $this->_sendHtml($html);
     }
 }
 /**
  * Sauvegarde
  */
 public function postAction()
 {
     if ($data = Zend_Json::decode($this->getRequest()->getRawBody())) {
         try {
             $data = $data["form"];
             $data_image = array();
             $errors = '';
             // Recherche des sections
             $section = new Form_Model_Section();
             $sections = $section->findByValueId($this->getCurrentOptionValue()->getId());
             $field = new Form_Model_Field();
             // Date Validator
             //                $validator = new Zend_Validate_Date(array('format' => 'yyyy-mm-ddTHH:mm'));
             $dataChanged = array();
             foreach ($sections as $k => $section) {
                 // Load the fields
                 $section->findFields($section->getId());
                 // Browse the fields
                 foreach ($section->getFields() as $field) {
                     // If the field has options
                     if ($field->hasOptions()) {
                         // If the data is not empty
                         if (isset($data[$field->getId()])) {
                             // if all checkbox = false
                             $empty_checkbox = false;
                             if (is_array($data[$field->getId()])) {
                                 if (count($data[$field->getId()]) <= count(array_keys($data[$field->getId()], false))) {
                                     $empty_checkbox = true;
                                 }
                             }
                             if (!$empty_checkbox) {
                                 // Browse the field's options
                                 foreach ($field->getOptions() as $option) {
                                     // If it's a multiselect option and there's at least one selected option, store its value
                                     if (is_array($data[$field->getId()])) {
                                         // If the key exists,
                                         if (array_key_exists($option["id"], $data[$field->getId()])) {
                                             //                                            $data[$field->getId()][$option["id"]] = $option["name"];
                                             if ($data[$field->getId()][$option["id"]]) {
                                                 $dataChanged[$field->getName()][$option["id"]] = $option["name"];
                                             }
                                         }
                                         // If the current option has been posted, store its value
                                     } else {
                                         if ($option["id"] == $data[$field->getId()]) {
                                             //                                        $data[$field->getId()] = $option["name"];
                                             $dataChanged[$field->getName()] = $option["name"];
                                         }
                                     }
                                 }
                             } else {
                                 if ($field->isRequired()) {
                                     $errors .= $this->_('<strong>%s</strong> must be filled<br />', $field->getName());
                                 }
                             }
                             // If the field is empty and required, add an error
                         } else {
                             if ($field->isRequired()) {
                                 $errors .= $this->_('<strong>%s</strong> must be filled<br />', $field->getName());
                             }
                         }
                     } else {
                         // If the field is required
                         if ($field->isRequired()) {
                             // Add an error based on its type (and if it's empty)
                             switch ($field->getType()) {
                                 case "email":
                                     if (empty($data[$field->getId()]) or !Zend_Validate::is($data[$field->getId()], 'EmailAddress')) {
                                         $errors .= $this->_('<strong>%s</strong> must be a valid email address<br />', $field->getName());
                                     }
                                     break;
                                 case "nombre":
                                     if (!isset($data[$field->getId()]) or !Zend_Validate::is($data[$field->getId()], 'Digits')) {
                                         $errors .= $this->_('<strong>%s</strong> must be a numerical value<br />', $field->getName());
                                     }
                                     break;
                                 case "date":
                                     if (!isset($data[$field->getId()])) {
                                         $errors .= $this->_('<strong>%s</strong> must be a valid date (e.g. dd/mm/yyyy)<br />', $field->getName());
                                     }
                                     break;
                                 default:
                                     if (empty($data[$field->getId()])) {
                                         $errors .= $this->_('<strong>%s</strong> must be filled<br />', $field->getName());
                                     }
                                     break;
                             }
                         }
                         // If not empty, store its value
                         if (!empty($data[$field->getId()])) {
                             // If the field is an image
                             if ($field->getType() == "image") {
                                 $image = $data[$field->getId()];
                                 if (!preg_match("@^data:image/([^;]+);@", $image, $matches)) {
                                     throw new Exception($this->_("Unrecognized image format"));
                                 }
                                 $extension = $matches[1];
                                 $fileName = uniqid() . '.' . $extension;
                                 $relativePath = $this->getCurrentOptionValue()->getImagePathTo();
                                 $fullPath = Application_Model_Application::getBaseImagePath() . $relativePath;
                                 if (!is_dir($fullPath)) {
                                     mkdir($fullPath, 0777, true);
                                 }
                                 $filePath = $fullPath . '/' . $fileName;
                                 $contents = file_get_contents($image);
                                 if ($contents === FALSE) {
                                     throw new Exception($this->_("No uploaded image"));
                                 }
                                 $res = @file_put_contents($filePath, $contents);
                                 if ($res === FALSE) {
                                     throw new Exception('Unable to save image');
                                 }
                                 list($width, $height) = getimagesize($fullPath . DS . $fileName);
                                 $max_height = $max_width = 600;
                                 $image_name = uniqid($max_height);
                                 if ($height > $width) {
                                     $image_width = $max_height * $width / $height;
                                     $image_height = $max_height;
                                 } else {
                                     $image_width = $max_width;
                                     $image_height = $max_width * $height / $width;
                                 }
                                 $newIcon = new Core_Model_Lib_Image();
                                 $newIcon->setId($image_name)->setPath($fullPath . DS . $fileName)->setWidth($image_width)->setHeight($image_height)->crop();
                                 $image_url = $this->getRequest()->getBaseUrl() . $newIcon->getUrl();
                                 $dataChanged[$field->getName()] = '<br/><img width="' . $image_width . '" height="' . $image_height . '" src="' . $image_url . '" alt="' . $field->getName() . '" />';
                             } else {
                                 $dataChanged[$field->getName()] = $data[$field->getId()];
                             }
                         }
                     }
                 }
             }
             if (empty($errors)) {
                 $form = $this->getCurrentOptionValue()->getObject();
                 $layout = $this->getLayout()->loadEmail('form', 'send_email');
                 $layout->getPartial('content_email')->setFields($dataChanged);
                 $content = $layout->render();
                 $mail = new Zend_Mail('UTF-8');
                 $mail->setBodyHtml($content);
                 $mail->setFrom($form->getEmail(), $this->getApplication()->getName());
                 $mail->addTo($form->getEmail(), $this->_('Your app\'s form'));
                 $mail->setSubject($this->_('Your app\'s form'));
                 $mail->send();
                 $html = array("success" => 1, "message" => $this->_("The form has been sent successfully"));
             } else {
                 $html = array('error' => 1, 'message' => $errors);
             }
         } catch (Exception $e) {
             $html = array('error' => 1, 'message' => $e->getMessage());
         }
         $this->_sendHtml($html);
     }
 }