protected function validateAndSave($facilityRow, $checkName = true) { $districtText = $this->tr('Region B (Health District)'); $provinceText = $this->tr('Region A (Province)'); $localRegionText = $this->tr('Region C (Local Region)'); //validate $status = ValidationContainer::instance(); //check for required fields if ($checkName) { $status->checkRequired($this, 'facility_name', 'Facility name'); //check for unique if ($this->_getParam('facility_name') and !Facility::isUnique($this->_getParam('facility_name'), $this->_getParam('id'))) { $status->addError('facility_name', t('That name already exists.')); } } // validate lat & long require_once 'Zend/Validate/Float.php'; require_once 'Zend/Validate/Between.php'; $lat = $this->getSanParam('facility_latitude'); $long = $this->getSanParam('facility_longitude'); $validator = new Zend_Validate_Float(); $validbetween = new Zend_Validate_Between('-180', '180'); if ($lat && (!$validator->isValid($lat) || !$validbetween->isValid($lat))) { $status->addError('facility_latitude', t('That latitude and longitude does not appear to be valid.')); } if ($long && (!$validator->isValid($long) || !$validbetween->isValid($long))) { $status->addError('facility_longitude', t('That latitude and longitude does not appear to be valid.')); } $status->checkRequired($this, 'facility_type_id', t('Facility type')); $status->checkRequired($this, 'facility_province_id', $provinceText); if ($this->setting('display_region_b')) { $status->checkRequired($this, 'facility_district_id', $districtText); } if ($this->setting('display_region_c')) { $status->checkRequired($this, 'facility_region_c_id', $localRegionText); } //$status->checkRequired ( $this, 'facility_city', t ( "City is required." ) ); list($location_params, $facility_location_tier, $facility_location_id) = $this->getLocationCriteriaValues(array(), 'facility'); $city_id = false; if ($this->getSanParam('facility_city') && !$this->getSanParam('is_new_city')) { $city_id = Location::verifyHierarchy($location_params['facility_city'], $location_params['facility_city_parent_id'], $this->setting('num_location_tiers')); if ($city_id === false) { $status->addError('facility_city', t("That city does not appear to be located in the chosen region. If you want to create a new city, check the new city box.")); } } $sponsor_date_array = $this->getSanParam('sponsor_start_date'); // may or may not be array $sponsor_end_date_array = $this->getSanParam('sponsor_end_date'); $sponsor_id = $this->getSanParam('facility_sponsor_id') ? $this->getSanParam('facility_sponsor_id') : null; if (is_array($sponsor_id)) { $sponsor_array = $sponsor_id; $sponsor_id = $sponsor_id[0]; } // todo case where multip array and no_allow_multi if (@$this->setting('require_sponsor_dates')) { $status->checkRequired($this, 'sponsor_option_id', t('Sponsor dates are required.') . "\n"); if ($this->setting('allow_multi_sponsors')) { // and multiple sponsors option if (!is_array($this->getSanParam('sponsor_option_id'))) { $status->addError('sponsor_end_date', t('Sponsor dates are required.') . "\n"); } foreach ($sponsor_array as $i => $val) { if (empty($sponsor_date_array[$i]) || !empty($val)) { $status->addError('sponsor_start_date', t('Sponsor dates are required.') . "\n"); } if (empty($sponsor_end_date_array[$i]) || !empty($val)) { $status->addError('sponsor_end_date', t('Sponsor dates are required.') . "\n"); } } } } // end validation if ($status->hasError()) { $status->setStatusMessage(t('The facility could not be saved.')); } else { $location_id = null; if ($city_id === false && $this->getSanParam('is_new_city')) { $location_id = Location::insertIfNotFound($location_params['facility_city'], $location_params['facility_city_parent_id'], $this->setting('num_location_tiers')); if ($location_id === false) { $status->addError('facility_city', t('Could not save that city.')); } } else { if ($city_id) { $location_id = $city_id; } else { if ($this->setting('display_region_c')) { $location_id = $this->getSanParam('facility_region_c_id'); } else { if ($this->setting('display_region_b')) { $location_id = $this->getSanParam('facility_district_id'); } else { $location_id = $this->getSanParam('facility_province_id'); } } } if (strstr($location_id, '_')) { $parts = explode('_', $location_id); $location_id = $parts[count($parts) - 1]; } } // save row if ($location_id) { //map db field names to FORM field names $facilityRow->facility_name = $this->getSanParam('facility_name'); $facilityRow->location_id = $location_id; $facilityRow->type_option_id = $this->getSanParam('facility_type_id') ? $this->getSanParam('facility_type_id') : null; $facilityRow->facility_comments = $this->_getParam('facility_comments'); $facilityRow->address_1 = $this->getSanParam('facility_address1'); $facilityRow->address_2 = $this->getSanParam('facility_address2'); $facilityRow->lat = $lat; $facilityRow->long = $long; $facilityRow->postal_code = $this->getSanParam('facility_postal_code'); $facilityRow->phone = $this->getSanParam('facility_phone'); $facilityRow->fax = $this->getSanParam('facility_fax'); $facilityRow->sponsor_option_id = $sponsor_id; //dupecheck $dupe = new Facility(); $select = $dupe->select()->where('location_id =' . $facilityRow->location_id . ' and facility_name = "' . $facilityRow->facility_name . '"'); if (!$facilityRow->id && $dupe->fetchRow($select)) { $status->status = ''; $status->setStatusMessage(t('The facility could not be saved. A facility with this name already exists in that location.')); return false; } $obj_id = $facilityRow->save(); $_SESSION['status'] = t('The facility was saved.'); if ($obj_id) { if (!Facility::saveSponsors($obj_id, $sponsor_array, $sponsor_date_array, $sponsor_end_date_array)) { $status->setStatusMessage(t('There was an error saving sponsor data though.')); return false; } $status->setStatusMessage(t('The facility was saved.')); $status->setRedirect('/facility/view/id/' . $obj_id); return $obj_id; } else { unset($_SESSION['status']); $status->setStatusMessage(t('ERROR: The facility could not be saved.')); } } } return false; }