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); }
public function addimagesatrandomAction() { //$imageNamespace = new Zend_Session_Namespace('image_search'); $this->defaultNamespace->callingAction = '/ce/edit/addimagesatrandom'; $this->defaultNamespace->callingActionId = $this->callingCeId; $attribFormValues = $this->getAttriFormValues(); //-------------------------------------------------------------------------------- //from search/index $this->formImageSearch = new Image_Form_Search(); $this->formImageSearch->removeElement(Image::COL_ID); $this->formImageSearch->removeElement('save'); //$this->formImageSearch->removeElement('kind'); //$this->formImageSearch->addElement('submit', 'submit', array('label'=>'Search' )); //set all elements to required=FALSE //clear all validators $formElements = $this->formImageSearch->getElements(); foreach ($formElements as $elem) { $elem->setRequired(false); $elem->clearValidators(); } //$this->formImageSearch->setElements($formElements); //---------------------------------------------------- if ($this->formImageSearch->isValid($attribFormValues)) { $metaData = new Default_MetaData(); $metaData->getSelectForGroups(TRUE); $select = $metaData->addWhereToSelect($attribFormValues); $resultRowset = Zend_Registry::get('DB_CONNECTION1')->fetchAll($select); //TODO resultRowset is empty $imageIds = array(); foreach ($resultRowset as $rowNo => $row) { $imageIds[] = $row[Image::COL_ID]; } //delete duplicate imageIds from multiple set values $uniqueImageIds = array_unique($imageIds); //---------------------------------------------------- // //substract already assigned datasets $ceId = $this->defaultNamespace->callingActionId; $ceHasIm = new CeHasImage(); $ceHasImSet = $ceHasIm->fetchAll(CeHasImage::COL_CALIBRATION_EXERCISE_ID . '=' . $ceId); if (count($ceHasImSet) > 0) { $possibleImageIds = array(); foreach ($uniqueImageIds as $key => $id) { $alreadyAssigned = false; foreach ($ceHasImSet as $ceHasImRow) { if ($id == $ceHasImRow[CeHasImage::COL_IMAGE_ID]) { $alreadyAssigned = true; } } if (!$alreadyAssigned) { array_push($possibleImageIds, $id); } } } else { //no images assigned $possibleImageIds = $uniqueImageIds; } //---------------------------------------------------- $randomImageIds = Ble422_ArrayHelper::array_pick($possibleImageIds, $this->getRequest()->getParam("noImages")); //insert new images into ce $ceHimTable = new CeHasImage(); foreach ($randomImageIds as $imageId) { $data = array(CeHasImage::COL_CALIBRATION_EXERCISE_ID => $this->callingCeId, CeHasImage::COL_IMAGE_ID => $imageId); $ceHimTable->insert($data); } } $this->redirectTo('index'); }