Example #1
0
 private function validateAgainstForms($datasets)
 {
     //Fish-------------------------------------------------------------------------
     $fishForm = new Fish_Form_Edit();
     $fishDynElems = $fishForm->getDynamicElements();
     $validFishRows = array();
     $notValidFishRows = array();
     $labelCheck = 'Check cell contents to defined formats';
     $message = '';
     //change form to be conform with input data format
     $fishForm->removeElement(Fish::COL_ID);
     $fishForm->removeElement('save');
     $fishForm->removeElement('Token');
     //get array(dynamic form element names => column names) to get single cells out of dataset
     $dynElementNameAttrName = array();
     foreach ($fishDynElems as $elementName) {
         $attribId = substr($elementName, 5, strlen($elementName));
         foreach ($this->matchingCols as $col) {
             if (is_array($col)) {
                 if ($attribId == $col[AttributeDescriptor::COL_ID]) {
                     $dynElementNameAttrName += array($elementName => $col[AttributeDescriptor::COL_NAME]);
                 }
             }
         }
     }
     //build array from base data and meta data to validate against form for each dataset
     $fishFormDatasets = array();
     foreach ($datasets as $keyDataset => $dataset) {
         $fishBaseData = array(Fish::COL_SAMPLE_CODE => $dataset[Fish::COL_SAMPLE_CODE]);
         $fishMetaData = array();
         foreach ($fishDynElems as $elementName) {
             //if column is missing in CSV file, prepare form element with value NULL
             if (isset($dynElementNameAttrName[$elementName]) && isset($dataset[$dynElementNameAttrName[$elementName]])) {
                 $fishMetaData[$elementName] = $dataset[$dynElementNameAttrName[$elementName]];
             } else {
                 $fishMetaData[$elementName] = NULL;
             }
         }
         $data = array_merge($fishBaseData, $fishMetaData);
         if (is_array($data)) {
             if ($fishForm->isValid($data)) {
                 $validFishRows[$keyDataset] = TRUE;
                 $fishFormDatasets[$keyDataset] = $data;
             } else {
                 $notValidFishRows[$keyDataset] = TRUE;
                 $message .= "invalid fish dataset in row " . ($keyDataset + 1) . "\n";
                 $appendFurtherProcessingMessage = TRUE;
             }
         } else {
             $notValidFishRows[$keyDataset] = TRUE;
             $message .= "invalid fish dataset in row " . ($keyDataset + 1) . "\n";
             $appendFurtherProcessingMessage = TRUE;
         }
         if ($appendFurtherProcessingMessage == TRUE) {
             //concatenate form validator message(s)
             $message .= "--Details: \n--" . Ble422_ArrayHelper::convertToString($fishForm->getMessages()) . "\n\n";
             unset($appendFurtherProcessingMessage);
         }
     }
     //-------------------------------------------------------------------------
     //Images------------------------------------------------------------
     $imageForm = new Image_Form_Edit();
     $imageDynElems = $imageForm->getDynamicElements();
     $validImageRows = array();
     $notValidImageRows = array();
     //change form to be conform with input data format
     $imageForm->removeElement(Image::COL_ID);
     $imageForm->removeElement(Image::COL_FISH_ID);
     //$imageForm->removeElement(Image::COL_ORIGINAL_FILENAME);
     $imageForm->removeElement('save');
     $imageForm->removeElement('Token');
     //get array(dynamic form element names => column names) to get single cells out of dataset
     $dynElementNameAttrName = array();
     foreach ($imageDynElems as $elementName) {
         $attribId = substr($elementName, 5, strlen($elementName));
         foreach ($this->matchingCols as $col) {
             if (is_array($col)) {
                 if ($attribId == $col[AttributeDescriptor::COL_ID]) {
                     $dynElementNameAttrName += array($elementName => $col[AttributeDescriptor::COL_NAME]);
                 }
             }
         }
     }
     //build array from base data and meta data to validate against form for each dataset
     $imageFormDatasets = array();
     foreach ($datasets as $keyDataset => $dataset) {
         //image base data
         $imageBaseData = array(Image::COL_ORIGINAL_FILENAME => $dataset[Image::COL_ORIGINAL_FILENAME], Image::COL_RATIO_EXTERNAL => $dataset[Image::COL_RATIO_EXTERNAL]);
         $imageMetaData = array();
         foreach ($imageDynElems as $elementName) {
             //if column is missing in CSV file, prepare form element with value NULL
             if (isset($dynElementNameAttrName[$elementName]) && isset($dataset[$dynElementNameAttrName[$elementName]])) {
                 $imageMetaData[$elementName] = $dataset[$dynElementNameAttrName[$elementName]];
             } else {
                 $imageMetaData[$elementName] = NULL;
             }
         }
         $data = array_merge($imageBaseData, $imageMetaData);
         if (is_array($data)) {
             if ($imageForm->isValid($data)) {
                 $validImageRows[$keyDataset] = TRUE;
                 $imageFormDatasets[$keyDataset] = $data;
             } else {
                 $notValidImageRows[$keyDataset] = TRUE;
                 $message .= "invalid image dataset in row " . ($keyDataset + 1) . "\n";
                 $appendFurtherProcessingMessage = TRUE;
             }
         } else {
             $notValidImageRows[$keyDataset] = TRUE;
             $message .= "invalid image dataset in row " . ($keyDataset + 1) . "\n";
             $appendFurtherProcessingMessage = TRUE;
         }
         if ($appendFurtherProcessingMessage == TRUE) {
             //concatenate form validator message(s)
             $message .= "--Details: \n--" . Ble422_ArrayHelper::convertToString($imageForm->getMessages()) . "\n\n";
             unset($appendFurtherProcessingMessage);
         }
     }
     $notValidRows = array();
     $notValidRows = array_merge($notValidFishRows, $notValidImageRows);
     //if validFishRows[rowNo] and validImageRows[rowNo] is set, the rowNo is completely valid
     $validRows = array();
     if (!empty($validFishRows) && !empty($validImageRows)) {
         foreach ($validFishRows as $rowNo => $validFishRow) {
             if (isset($validImageRows[$rowNo])) {
                 $validRows[$rowNo] = TRUE;
             }
         }
     }
     //$validRows = array_diff(array_merge($validFishRows, $validImageRows), $notValidRows);
     if (count($datasets) == count($validRows)) {
         $returnCode = 'success';
     } else {
         $returnCode = 'error';
     }
     if ($returnCode == 'error') {
         $message .= "All invalid rows will be ignored.\n\n";
     }
     return array('labelCheck' => $labelCheck, 'returnCode' => $returnCode, 'message' => $message, 'validRows' => $validRows, 'notValidRows' => $notValidRows, 'validFishRows' => $validFishRows, 'notValidFishRows' => $notValidFishRows, 'validImageRows' => $validImageRows, 'notValidImageRows' => $notValidImageRows, 'fishFormDatasets' => $fishFormDatasets, 'imageFormDatasets' => $imageFormDatasets);
 }