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); }