/** * This function returns the valid shipping states for a given country. * * Call this function with EITHER $countryType set to 'billing' or * 'shipping' - OR - $countryType set to something else entirely and * $intCountryId set to a country ID. * * If $countryType is 'billing' or 'shipping' then $countryType is used in * preference to $intCountryId. Otherwise $intCountryId is used. If * $countryType is not one of: billing, shipping; and $intCountryId is null * or not provided then the default country is used. * * This is not a good interface for a function but legacy view code relies on it. * * @param string $countryType Either 'billing' or 'shipping'; or some other value * in which case $intCountryId is used. * @param int|null $intCountryId An ID of a country. * @return CActiveRecord[] An array of States. */ public function getStates($countryType = 'billing', $intCountryId = null) { if ($intCountryId === null) { switch ($countryType) { case 'billing': if ($this->billingCountry !== null) { $intCountryId = $this->billingCountry; } break; case 'shipping': if ($this->shippingCountry !== null) { $intCountryId = $this->shippingCountry; } break; // For backwards compatibility we can't throw an error if another // value is passed. Some older code (e.g. // views-cities/myaccount.address.php) sends meaningless values // values for $countryType to use the second parameter. } } if ($intCountryId === null) { $intCountryId = _xls_get_conf('DEFAULT_COUNTRY', 224); } return Country::getCountryShippingStates($intCountryId); }
/** * Get available states for a given country. * * Returns JSON with state IDs and names. */ public function actionGetStates($countryId = null) { $stateList = Country::getCountryShippingStates($countryId); $arr = array(); foreach ($stateList as $stateId => $stateName) { $arr[] = array('id' => $stateId, 'name' => $stateName); } $this->renderJSON($arr); }
/** * Set the cart tax code based on an address. * The country_id parameter is required, state_id and postal are optional. */ public function actionSetTaxByAddress() { $intCountryId = Yii::app()->getRequest()->getParam('country_id'); $intStateId = Yii::app()->getRequest()->getParam('state_id', ''); $strPostal = Yii::app()->getRequest()->getParam('postal', ''); $objCountry = Country::Load($intCountryId); if ($objCountry === null) { throw new CHttpException(400, Yii::t('application errors', 'Invalid country_id.')); } $strStateCode = null; if ($intStateId !== '') { $objState = State::Load($intStateId); if ($objState === null) { throw new CHttpException(400, Yii::t('application errors', 'Invalid state_id.')); } // Validate the state/country combination. $arrShippingStates = Country::getCountryShippingStates($intCountryId); if (array_key_exists($intStateId, $arrShippingStates) === false) { throw new CHttpException(400, Yii::t('application errors', 'The state_id is not valid for the country_id.')); } $strStateCode = $objState->code; } Yii::app()->shoppingcart->setTaxCodeByAddress($objCountry->code, $strStateCode, $strPostal); $arrReturn['cartitems'] = $this->renderPartial('/cart/_cartitems', null, true); if (Yii::app()->session->get('ship.prices.cache', null) !== null) { $arrReturn['action'] = 'triggerCalc'; } return $this->renderJSON($arrReturn); }