/** * Convert dimensions in different measure types * * @param mixed $value * @param string $sourceDimensionMeasure * @param string $toDimensionMeasure * @return int|null|string */ public function convertMeasureDimension($value, $sourceDimensionMeasure, $toDimensionMeasure) { if ($value) { $locale = Mage::app()->getLocale()->getLocale(); $unitDimension = new Zend_Measure_Length($value, $sourceDimensionMeasure, $locale); $unitDimension->setType($toDimensionMeasure); return $unitDimension->getValue(); } return null; }
/** * test for exception unknown locale * expected exception */ public function testLengthSetWithNoLocale() { $value = new Zend_Measure_Length('100', Zend_Measure_Length::STANDARD, 'de'); $value->setValue('200', Zend_Measure_Length::STANDARD); $this->assertEquals(200, $value->getValue(), 'Zend_Measure_Length value expected to be a positive integer'); }
/** * Parse length dimension * @param string $ps_value * @param null|array $pa_options * @return bool|null|Zend_Measure_Length * @throws Exception */ function caParseLengthDimension($ps_value, $pa_options = null) { global $g_ui_locale; $vs_locale = caGetOption('locale', $pa_options, $g_ui_locale); $pa_values = array(caConvertFractionalNumberToDecimal(trim($ps_value), $vs_locale)); $vo_parsed_measurement = null; while ($vs_expression = array_shift($pa_values)) { // parse units of measurement if (preg_match("!^([\\d\\.\\,/ ]+)[ ]*([^\\d ]+)!", $vs_expression, $va_matches)) { $vs_value = trim($va_matches[1]); $va_values = explode(" ", $vs_value); $vs_unit_expression = strtolower(trim($va_matches[2])); if ($vs_expression = trim(str_replace($va_matches[0], '', $vs_expression))) { array_unshift($pa_values, $vs_expression); } $vs_value = 0; foreach ($va_values as $vs_v) { $vs_value += caConvertLocaleSpecificFloat(trim($vs_v), $vs_locale); } if (!($vs_units = caGetLengthUnitType($vs_unit_expression))) { throw new Exception(_t('%1 is not a valid unit of length [%2]', $va_matches[2], $ps_value)); } try { $o_tmp = new Zend_Measure_Length($vs_value, $vs_units, $vs_locale); } catch (Exception $e) { throw new Exception(_t('Not a valid measurement')); } if ($o_tmp->getValue() < 0) { // length can't be negative in our universe throw new Exception(_t('Must not be less than zero')); return false; } if ($vo_parsed_measurement) { $vo_parsed_measurement = $vo_parsed_measurement->add($o_tmp); } else { $vo_parsed_measurement = $o_tmp; } } } if (!$vo_parsed_measurement) { throw new Exception(_t('Not a valid measurement [%1]', $ps_value)); } return $vo_parsed_measurement; }
/** * Convert dimensions in different measure types * * @param int|float $value * @param string $sourceDimensionMeasure * @param string $toDimensionMeasure * @return int|null|string */ public function convertMeasureDimension($value, $sourceDimensionMeasure, $toDimensionMeasure) { if ($value) { $locale = $this->localeResolver->getLocale(); $unitDimension = new \Zend_Measure_Length($value, $sourceDimensionMeasure, $locale); $unitDimension->setType($toDimensionMeasure); return $unitDimension->getValue(); } return null; }
public function parseValue($ps_value, $pa_element_info, $pa_options = null) { global $g_ui_locale; $ps_value = caConvertFractionalNumberToDecimal(trim($ps_value), $g_ui_locale); $va_settings = $this->getSettingValuesFromElementArray($pa_element_info, array('requireValue')); if (!$va_settings['requireValue'] && !$ps_value) { return array('value_longtext1' => '', 'value_longtext2' => '', 'value_decimal1' => ''); } $vo_parsed_measurement = null; $pa_values = array($ps_value); while ($vs_expression = array_shift($pa_values)) { // parse units of measurement if (preg_match("!^([\\d\\.\\,/ ]+)[ ]*([^\\d ]+)!", $vs_expression, $va_matches)) { $vs_value = trim($va_matches[1]); $va_values = explode(" ", $vs_value); $vs_unit_expression = strtolower(trim($va_matches[2])); if ($vs_expression = trim(str_replace($va_matches[0], '', $vs_expression))) { array_unshift($pa_values, $vs_expression); } $vs_value = 0; foreach ($va_values as $vs_v) { $vs_value += caConvertLocaleSpecificFloat(trim($vs_v), $g_ui_locale); } switch ($vs_unit_expression) { case "'": case "’": case 'ft': case 'ft.': case 'feet': case 'foot': $vs_units = Zend_Measure_Length::FEET; break; case '"': case "”": case 'in': case 'in.': case 'inch': case 'inches': $vs_units = Zend_Measure_Length::INCH; break; case 'm': case 'm.': case 'meter': case 'meters': case 'metre': case 'metres': case 'mt': $vs_units = Zend_Measure_Length::METER; break; case 'cm': case 'cm.': case 'centimeter': case 'centimeters': case 'centimetre': case 'centimetres': $vs_units = Zend_Measure_Length::CENTIMETER; break; case 'mm': case 'mm.': case 'millimeter': case 'millimeters': case 'millimetre': case 'millimetres': $vs_units = Zend_Measure_Length::MILLIMETER; break; case 'point': case 'pt': case 'pt.': $vs_units = Zend_Measure_Length::POINT; break; case 'mile': case 'miles': $vs_units = Zend_Measure_Length::MILE; break; case 'km': case 'k': case 'kilometer': case 'kilometers': case 'kilometre': case 'kilometres': $vs_units = Zend_Measure_Length::KILOMETER; break; default: $this->postError(1970, _t('%1 is not a valid unit of length [%2]', $va_matches[2], $ps_value), 'LengthAttributeValue->parseValue()'); return false; break; } try { $o_tmp = new Zend_Measure_Length($vs_value, $vs_units, $g_ui_locale); } catch (Exception $e) { $this->postError(1970, _t('%1 is not a valid measurement', $pa_element_info['displayLabel']), 'LengthAttributeValue->parseValue()'); return false; } if ($o_tmp->getValue() < 0) { // length can't be negative in our universe $this->postError(1970, _t('%1 must not be less than zero', $pa_element_info['displayLabel']), 'LengthAttributeValue->parseValue()'); return false; } if ($vo_parsed_measurement) { $vo_parsed_measurement = $vo_parsed_measurement->add($o_tmp); } else { $vo_parsed_measurement = $o_tmp; } } } if (!$vo_parsed_measurement) { $this->postError(1970, _t('%1 is not a valid measurement [%2]', $pa_element_info['displayLabel'], $ps_value), 'LengthAttributeValue->parseValue()'); return false; } return array('value_longtext1' => $vo_parsed_measurement->toString(4), 'value_longtext2' => $vs_units, 'value_decimal1' => $vo_parsed_measurement->convertTo('METER', 6, 'en_US')); }
/** * @param $attributeType * @param $value * * @return int|string */ public function getAttributesMappingUnitConversion($attributeType, $value) { $this->_getConfigAttributeMapped($attributeType); if ($attributeType == 'weight') { //check if needs conversion if ($this->_mapping[$attributeType]['unit'] != self::ME_WEIGHT_UNIT) { $unit = new \Zend_Measure_Weight((double) $value); $unit->convertTo(\Zend_Measure_Weight::GRAM); return $unit->getValue(); } } elseif ($this->_mapping[$attributeType]['unit'] != self::ME_LENGTH_UNIT) { $unit = new \Zend_Measure_Length((double) $value); $unit->convertTo(\Zend_Measure_Length::CENTIMETER); return $unit->getValue(); } return $value; }