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);
 }
Example #2
0
 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');
 }