Drop Down Select City

[color=#282828][font=arial, verdana, tahoma, sans-serif]I did some experiments according to tbirnseth's usefull thoughts here :[/font][/color]Drop Down Select City - Hints & Modifications - CS-Cart Community Forums



[color=#282828][font=arial, verdana, tahoma, sans-serif]The target is to alter city input field to select box dependent to state selection.[/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]But does the locations' functionality about cities wildcards remain the same ?? Because the final target is, on city selection to calculate the shipping cost of an order at checkout step,[/font][/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]So I created a table like this[/font][/color]



[color=#000000]DROP TABLE IF EXISTS [/color][color=#008800]katoikia[/color][color=#666600].[/color][color=#008800]cscart_cities[/color][color=#666600];[/color]

[color=#000000]CREATE TABLE [/color][color=#008800]katoikia[/color][color=#666600].[/color][color=#008800]cscart_cities[/color][color=#000000] [/color][color=#666600]([/color]

[color=#000000] [/color][color=#008800]city_id[/color][color=#000000] mediumint[/color]color=#666600[/color][color=#000000] [/color][color=#000088]unsigned[/color][color=#000000] NOT NULL auto_increment[/color][color=#666600],[/color]

[color=#000000] [/color][color=#008800]country_code[/color][color=#000000] varchar[/color]color=#666600[/color][color=#000000] NOT NULL [/color][color=#000088]default[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color]

[color=#000000] [/color][color=#008800]code[/color][color=#000000] varchar[/color]color=#666600[/color][color=#000000] NOT NULL [/color][color=#000088]default[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color]

[color=#000000] [/color][color=#008800]state_id[/color][color=#000000] varchar[/color]color=#666600[/color][color=#000000] NOT NULL[/color][color=#666600],[/color]

[color=#000000] [/color][color=#008800]status[/color][color=#000000] [/color][color=#000088]char[/color]color=#666600[/color][color=#000000] NOT NULL [/color][color=#000088]default[/color][color=#000000] [/color][color=#008800]'A'[/color][color=#666600],[/color]

[color=#000000] PRIMARY KEY [/color]color=#666600,[/color]

[color=#000000] UNIQUE KEY [/color][color=#008800]cs[/color][color=#000000] [/color]color=#666600,[/color]

[color=#000000] KEY [/color][color=#008800]code[/color][color=#000000] [/color]color=#666600,[/color]

[color=#000000] KEY [/color][color=#008800]country_code[/color][color=#000000] [/color]color=#666600[/color]

[color=#666600])[/color][color=#000000] ENGINE[/color][color=#666600]=[/color][color=#660066]MyISAM[/color][color=#000000] AUTO_INCREMENT[/color][color=#666600]=[/color][color=#006666]4[/color][color=#000000] DEFAULT CHARSET[/color][color=#666600]=[/color][color=#000000]utf8[/color][color=#666600];[/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]then I added functions for bulding and seeking cities, almost like every state function at core/fn.locations.php like that:[/font][/color]



[color=#880000]//[/color]

[color=#880000]// Get countries list[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_countries[/color][color=#666600]([/color][color=#000000]$lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $only_avail [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600],[/color][color=#000000] $paginate [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$only_avail [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$only_avail [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] [/color][color=#008800]" WHERE a.status = 'A'“[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$limit [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$page [/color][color=#666600]=[/color][color=#000000] empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] [/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] $_REQUEST[/color][color=#666600][[/color][color=#008800]'page'[/color][color=#666600]];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$paginate [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $country_count [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT count() FROM ?:countries"[/color][color=#666600]);[/color]

[color=#000000] $limit [/color][color=#666600]=[/color][color=#000000] fn_paginate[/color][color=#666600]([/color][color=#000000]$page[/color][color=#666600],[/color][color=#000000] $country_count[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Registry[/color][color=#666600]::[/color][color=#000088]get[/color]color=#666600);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]“SELECT a.code, a.code_A3, a.code_N3, a.status, a.region, b.country FROM ?:countries as a LEFT JOIN ?:country_descriptions as b ON b.code = a.code AND b.lang_code = ?s $only_avail ORDER BY b.country $limit”[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get countries simple list[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_simple_countries[/color][color=#666600]([/color][color=#000000]$avail_only [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$avail_cond [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$avail_only [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] [/color][color=#008800]“WHERE a.status = 'A'”[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]return[/color][color=#000000] db_get_hash_single_array[/color][color=#666600]([/color][color=#008800]“SELECT a.code, b.country FROM ?:countries as a LEFT JOIN ?:country_descriptions as b ON b.code = a.code AND b.lang_code = ?s $avail_cond ORDER BY b.country”[/color][color=#666600],[/color][color=#000000] array[/color][color=#666600]([/color][color=#008800]'code'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'country'[/color][color=#666600]),[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get states list for specific country[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_states[/color][color=#666600]([/color][color=#000000]$country [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $paginate [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#000000]$limit [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$paginate [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $state_count [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]"SELECT COUNT(
) FROM ?:states WHERE country_code = ?s”[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#000000] $limit [/color][color=#666600]=[/color][color=#000000] fn_paginate[/color][color=#666600]([/color][color=#006666]@$_REQUEST[/color][color=#666600][[/color][color=#008800]'page'[/color][color=#666600]],[/color][color=#000000] $state_count[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Registry[/color][color=#666600]::[/color][color=#000088]get[/color]color=#666600);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]“SELECT a.state_id, a.country_code, a.code, a.status, b.state FROM ?:states as a LEFT JOIN ?:state_descriptions as b ON b.state_id = a.state_id AND b.lang_code = ?s WHERE a.country_code = ?s ORDER BY b.state $limit”[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get cities list for specific state[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_cities[/color][color=#666600]([/color][color=#000000]$state [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $paginate [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#000000]$limit [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$paginate [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $city_count [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT COUNT() FROM ?:cities WHERE state_id = ?s"[/color][color=#666600],[/color][color=#000000] $state[/color][color=#666600]);[/color]

[color=#000000] $limit [/color][color=#666600]=[/color][color=#000000] fn_paginate[/color][color=#666600]([/color][color=#006666]@$_REQUEST[/color][color=#666600][[/color][color=#008800]'page'[/color][color=#666600]],[/color][color=#000000] $city_count[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Registry[/color][color=#666600]::[/color][color=#000088]get[/color]color=#666600);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]“SELECT a.city_id, a.country_code, a.code, a.state_id, a.status

FROM ?:cities as a WHERE a.country_code = ?s AND a.state_id = ?s ORDER BY a.code $limit”[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600],[/color][color=#000000] $state[/color][color=#666600]);[/color]

[color=#666600]}[/color]



[color=#880000]//[/color]

[color=#880000]// Get states key-value list[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_simple_states[/color][color=#666600]([/color][color=#000000]$country [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $paginate [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $country [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]'US'[/color][color=#666600];[/color][color=#000000] [/color][color=#880000]//!!! FIXME: what is the logic should be?[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] db_get_hash_single_array[/color][color=#666600]([/color][color=#008800]“SELECT a.code, b.state FROM ?:states as a LEFT JOIN ?:state_descriptions as b ON b.state_id = a.state_id AND b.lang_code = ?s WHERE a.country_code = ?s ORDER BY b.state”[/color][color=#666600],[/color][color=#000000] array[/color][color=#666600]([/color][color=#008800]'code'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'state'[/color][color=#666600]),[/color][color=#000000] $lang_code[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get cities key-value list[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_simple_cities[/color][color=#666600]([/color][color=#000000]$state [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $paginate [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $state [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color][color=#000000] [/color][color=#880000]//!!! FIXME: what is the logic should be?[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] db_get_hash_single_array[/color][color=#666600]([/color][color=#008800]“SELECT a.city_id, a.code FROM ?:cities as a WHERE a.state_id = ?s ORDER BY a.code”[/color][color=#666600],[/color][color=#000000] array[/color][color=#666600]([/color][color=#008800]'city_id'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'code'[/color][color=#666600]),[/color][color=#000000] $state[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get states list for specific country[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_all_states[/color][color=#666600]([/color][color=#000000]$lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $extended [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600],[/color][color=#000000] $avail_only [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$avail_cond [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$avail_only [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] [/color][color=#008800]" WHERE a.status = 'A' “[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$extended [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]“SELECT a.state_id, a.code, b.state, c.country FROM ?:states as a LEFT JOIN ?:state_descriptions as b ON b.state_id = a.state_id AND b.lang_code = ?s LEFT JOIN ?:country_descriptions as c ON c.code = a.country_code AND c.lang_code = ?s $avail_cond ORDER BY a.country_code, b.state”[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] db_get_hash_multi_array[/color][color=#666600]([/color][color=#008800]“SELECT a.country_code, a.code, b.state FROM ?:states as a LEFT JOIN ?:state_descriptions as b ON b.state_id = a.state_id AND b.lang_code = ?s $avail_cond ORDER BY a.country_code, b.state”[/color][color=#666600],[/color][color=#000000] array[/color]color=#666600,[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get cities list for specific state[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_all_cities[/color][color=#666600]([/color][color=#000000]$lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600],[/color][color=#000000] $extended [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600],[/color][color=#000000] $avail_only [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$avail_cond [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$avail_only [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] [/color][color=#008800]” WHERE a.status = 'A' "[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$extended [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]“SELECT a.city_id, a.code, a.state_id, b.state, c.country FROM ?:cities as a LEFT JOIN ?:state_descriptions as b ON b.state_id = a.state_id AND b.lang_code = ?s LEFT JOIN ?:country_descriptions as c ON c.code = a.country_code AND c.lang_code = ?s ORDER BY a.country_code, b.state”[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] db_get_hash_multi_array[/color][color=#666600]([/color][color=#008800]“SELECT a.country_code, a.state_id, a.city_id, a.code FROM ?:cities as a ORDER BY a.country_code, a.code”[/color][color=#666600],[/color][color=#000000] array[/color]color=#666600,[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#666600]}[/color]



[color=#880000]// Get state name (results are cached)[/color]

[color=#000088]function[/color][color=#000000] fn_get_state_name[/color][color=#666600]([/color][color=#000000]$state_code[/color][color=#666600],[/color][color=#000000] $country_code[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]static[/color][color=#000000] $states [/color][color=#666600]=[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $states[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]][[/color][color=#000000]$state_code[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT ?:state_descriptions.state FROM ?:states LEFT JOIN ?:state_descriptions ON ?:state_descriptions.state_id = ?:states.state_id AND ?:state_descriptions.lang_code = ?s WHERE ?:states.country_code = ?s AND ?:states.code = ?s”[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600],[/color][color=#000000] $country_code[/color][color=#666600],[/color][color=#000000] $state_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] $states[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]][[/color][color=#000000]$state_code[/color][color=#666600]];[/color]

[color=#666600]}[/color]

[color=#880000]// Get city name (results are cached)[/color]

[color=#000088]function[/color][color=#000000] fn_get_city_name[/color][color=#666600]([/color][color=#000000]$state_id[/color][color=#666600],[/color][color=#000000] $country_code[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]static[/color][color=#000000] $cities [/color][color=#666600]=[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $cities[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]][[/color][color=#000000]$state_id[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT ?:cities.code FROM ?:cities WHERE ?:cities.country_code = ?s AND ?:cities.state_id = ?s”[/color][color=#666600],[/color][color=#000000] $country_code[/color][color=#666600],[/color][color=#000000] $state_id[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] $cities[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]][[/color][color=#000000]$state_id[/color][color=#666600]];[/color]

[color=#666600]}[/color]



[color=#880000]// Get country name (results are cached)[/color]

[color=#000088]function[/color][color=#000000] fn_get_country_name[/color][color=#666600]([/color][color=#000000]$country_code[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]static[/color][color=#000000] $countries [/color][color=#666600]=[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $countries[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT country FROM ?:country_descriptions WHERE code = ?s AND lang_code = ?s”[/color][color=#666600],[/color][color=#000000] $country_code[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]



[color=#000088]return[/color][color=#000000] $countries[/color][color=#666600][[/color][color=#000000]$country_code[/color][color=#666600]];[/color]

[color=#666600]}[/color]

[color=#880000]// Get countries name (results are cached)[/color]

[color=#000088]function[/color][color=#000000] fn_get_countries_name[/color][color=#666600]([/color][color=#000000]$country_codes[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$countries [/color][color=#666600]=[/color][color=#000000] db_get_hash_array[/color][color=#666600]([/color][color=#008800]“SELECT country, code FROM ?:country_descriptions WHERE code IN (?a) AND lang_code = ?s”[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'code'[/color][color=#666600],[/color][color=#000000] $country_codes[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#000088]return[/color][color=#000000] $countries[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get all destinations list[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_destinations[/color][color=#666600]([/color][color=#000000]$lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000000]$destinations [/color][color=#666600]=[/color][color=#000000] db_get_hash_array[/color][color=#666600]([/color][color=#008800]“SELECT a.destination_id, a.status, a.localization, b.destination FROM ?:destinations as a LEFT JOIN ?:destination_descriptions as b ON a.destination_id = b.destination_id AND b.lang_code = ?s ORDER BY destination”[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'destination_id'[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#000000]$default [/color][color=#666600]=[/color][color=#000000] $destinations[/color][color=#666600][[/color][color=#006666]1[/color][color=#666600]];[/color]

[color=#000000]unset[/color]color=#666600;[/color]

[color=#000000]array_unshift[/color][color=#666600]([/color][color=#000000]$destinations[/color][color=#666600],[/color][color=#000000] $default[/color][color=#666600]);[/color]

[color=#000088]return[/color][color=#000000] $destinations[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Get destination name[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_destination_name[/color][color=#666600]([/color][color=#000000]$destination_id[/color][color=#666600],[/color][color=#000000] $lang_code [/color][color=#666600]=[/color][color=#000000] CART_LANGUAGE[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT destination FROM ?:destination_descriptions WHERE destination_id = ?i AND lang_code = ?s”[/color][color=#666600],[/color][color=#000000] $destination_id[/color][color=#666600],[/color][color=#000000] $lang_code[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Helper for fn_get_available_destination function[/color]

[color=#880000]//[/color]

[color=#880000]// @$partial - check for partial equality[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $elm[/color][color=#666600],[/color][color=#000000] $partial [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#000000]$suitable [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#000088]foreach[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elms [/color][color=#000088]as[/color][color=#000000] $k [/color][color=#666600]=>[/color][color=#000000] $v[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$partial [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $__tmp [/color][color=#666600]=[/color][color=#000000] str_replace[/color][color=#666600]([/color][color=#000000]array[/color][color=#666600]([/color][color=#008800]'
'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'?'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'/'[/color][color=#666600]),[/color][color=#000000] array[/color][color=#666600]([/color][color=#008800]'.'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'/'[/color][color=#666600]),[/color][color=#000000] $v[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]preg_match[/color][color=#666600]([/color][color=#008800]“/^$__tmp$/iu”[/color][color=#666600],[/color][color=#000000] $elm[/color][color=#666600]))[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600];[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$v [/color][color=#666600]==[/color][color=#000000] $elm[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600];[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] $suitable[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Return most coincedence available destination by the following parameters…[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_available_destination[/color]color=#666600[/color]

[color=#666600]{[/color]

[color=#000000]$country [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $location[/color][color=#666600][[/color][color=#008800]'country'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$state [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $location[/color][color=#666600][[/color][color=#008800]'state'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$zipcode [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $location[/color][color=#666600][[/color][color=#008800]'zipcode'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$city [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $location[/color][color=#666600][[/color][color=#008800]'city'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000]$address [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $location[/color][color=#666600][[/color][color=#008800]'address'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $state_id [/color][color=#666600]=[/color][color=#000000] fn_get_state_id[/color][color=#666600]([/color][color=#000000]$state[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#000000] $city_id [/color][color=#666600]=[/color][color=#000000] fn_get_city_id[/color][color=#666600]([/color][color=#000000]$city[/color][color=#666600],[/color][color=#000000] $state[/color][color=#666600]);[/color]



[color=#000000] $condition [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600];[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]AREA [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'C'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $condition [/color][color=#666600].=[/color][color=#000000] fn_get_localizations_condition[/color]color=#666600;[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $__dests [/color][color=#666600]=[/color][color=#000000] db_get_array[/color][color=#666600]([/color][color=#008800]"SELECT a.
FROM ?:destination_elements as a LEFT JOIN ?:destinations as b ON b.destination_id = a.destination_id WHERE b.status = 'A' AND (b.destination_id = 1 OR (1 ?p))”[/color][color=#666600],[/color][color=#000000] $condition[/color][color=#666600]);[/color]

[color=#000000] $destinations [/color][color=#666600]=[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000000] [/color][color=#000088]foreach[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$_dests [/color][color=#000088]as[/color][color=#000000] $k [/color][color=#666600]=>[/color][color=#000000] $v[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $destinations[/color][color=#666600][[/color][color=#000000]$v[/color][color=#666600][[/color][color=#008800]'destination_id'[/color][color=#666600]]][[/color][color=#000000]$v[/color][color=#666600][[/color][color=#008800]'element_type'[/color][color=#666600]]][][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] $v[/color][color=#666600][[/color][color=#008800]'element'[/color][color=#666600]];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $concur_destinations [/color][color=#666600]=[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000000] [/color][color=#000088]foreach[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$destinations [/color][color=#000088]as[/color][color=#000000] $dest_id [/color][color=#666600]=>[/color][color=#000000] $elm_types[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#880000]// Significance level. The more significance level means the most amount of coincidences[/color]

[color=#000000] $significance [/color][color=#666600]=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600];[/color]

[color=#000000] $dest_countries [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $elm_types[/color][color=#666600][[/color][color=#008800]'C'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000000] $dest_states [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]?[/color][color=#000000] $elm_types[/color][color=#666600][[/color][color=#008800]'S'[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:[/color][color=#000000] array[/color]color=#666600;[/color]

[color=#000000] [/color][color=#000088]foreach[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_types [/color][color=#000088]as[/color][color=#000000] $elm_type [/color][color=#666600]=>[/color][color=#000000] $elms[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#880000]// Check country[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'C'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]+=[/color][color=#000000] [/color][color=#006666]1[/color][color=#000000] [/color][color=#666600][/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]/[/color][color=#000000] count[/color]color=#666600);[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000]

[/color][color=#880000]// Check state[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'S'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#880000]// if country is in destanation_countries and it haven't got states,[/color]

[color=#000000] [/color][color=#880000]// we suppose that destanation cover all country[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600](![/color][color=#000000]in_array[/color][color=#666600]([/color][color=#000000]$country[/color][color=#666600],[/color][color=#000000] $dest_countries[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]||[/color][color=#000000] fn_get_states[/color]color=#666600)[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $state_id[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]+=[/color][color=#000000] [/color][color=#006666]2[/color][color=#000000] [/color][color=#666600]
[/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]/[/color][color=#000000] count[/color]color=#666600);[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#880000]// Check city[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'T'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600](![/color][color=#000000]in_array[/color][color=#666600]([/color][color=#000000]$state[/color][color=#666600],[/color][color=#000000] $dest_states[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]||[/color][color=#000000] fn_get_cities[/color]color=#666600)[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $city_id[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]+=[/color][color=#000000] [/color][color=#006666]3[/color][color=#000000] [/color][color=#666600][/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]/[/color][color=#000000] count[/color]color=#666600);[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#880000]// Check zipcode[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'Z'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $zipcode[/color][color=#666600],[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]+=[/color][color=#000000] [/color][color=#006666]4[/color][color=#000000] [/color][color=#666600]
[/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]/[/color][color=#000000] count[/color]color=#666600);[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#880000]// Check address[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$elm_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]'A'[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $suitable [/color][color=#666600]=[/color][color=#000000] fn_check_element[/color][color=#666600]([/color][color=#000000]$elms[/color][color=#666600],[/color][color=#000000] $address[/color][color=#666600],[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]+=[/color][color=#000000] [/color][color=#006666]5[/color][color=#000000] [/color][color=#666600][/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1[/color][color=#000000] [/color][color=#666600]/[/color][color=#000000] count[/color]color=#666600);[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] $significance [/color][color=#666600]=[/color][color=#000000] number_format[/color][color=#666600]([/color][color=#000000]$significance[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]2[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600]);[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]$suitable [/color][color=#666600]==[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $concur_destinations[/color][color=#666600][[/color][color=#000000]$significance[/color][color=#666600]][][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] $dest_id[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] ksort[/color][color=#666600]([/color][color=#000000]$concur_destinations[/color][color=#666600],[/color][color=#000000] SORT_NUMERIC[/color][color=#666600]);[/color]

[color=#000000] $concur_destinations [/color][color=#666600]=[/color][color=#000000] array_pop[/color]color=#666600;[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] reset[/color]color=#666600;[/color]

[color=#000000] [/color][color=#666600]}[/color][color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#000000] [/color][color=#666600]}[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#880000]//[/color]

[color=#880000]// Return state ID by it's code and country code[/color]

[color=#880000]//[/color]

[color=#000088]function[/color][color=#000000] fn_get_state_id[/color][color=#666600]([/color][color=#000000]$state [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $country [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]static[/color][color=#000000] $state_ids[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]||[/color][color=#000000] empty[/color]color=#666600)[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $state_ids[/color][color=#666600][[/color][color=#000000]$country[/color][color=#666600]][[/color][color=#000000]$state[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT state_id FROM ?:states WHERE code = ?s AND country_code = ?s”[/color][color=#666600],[/color][color=#000000] $state[/color][color=#666600],[/color][color=#000000] $country[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] $state_ids[/color][color=#666600][[/color][color=#000000]$country[/color][color=#666600]][[/color][color=#000000]$state[/color][color=#666600]];[/color]

[color=#666600]}[/color]

[color=#000088]function[/color][color=#000000] fn_get_city_id[/color][color=#666600]([/color][color=#000000]$city [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600],[/color][color=#000000] $state [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]''[/color][color=#666600])[/color]

[color=#666600]{[/color]

[color=#000088]static[/color][color=#000000] $city_ids[/color][color=#666600];[/color]

[color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]empty[/color]color=#666600[/color][color=#000000] [/color][color=#666600]||[/color][color=#000000] empty[/color]color=#666600)[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] [/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color]

[color=#666600]}[/color]

[color=#000088]if[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{[/color]

[color=#000000] $city_ids[/color][color=#666600][[/color][color=#000000]$state[/color][color=#666600]][[/color][color=#000000]$city[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] db_get_field[/color][color=#666600]([/color][color=#008800]“SELECT city_id FROM ?:cities WHERE city_id = ?s AND state_id = ?s”[/color][color=#666600],[/color][color=#000000] $city[/color][color=#666600],[/color][color=#000000] $state[/color][color=#666600]);[/color]

[color=#666600]}[/color]

[color=#000088]return[/color][color=#000000] $state_ids[/color][color=#666600][[/color][color=#000000]$state[/color][color=#666600]][[/color][color=#000000]$city[/color][color=#666600]];[/color]

[color=#666600]}[/color]



[color=#282828][font=arial, verdana, tahoma, sans-serif]I also had to insert a line at controllers/customer/checkout.php near //Get countries and states like that:[/font][/color]



[color=#000000]$view[/color][color=#666600]-&[/color][color=#000000]gt[/color][color=#666600];[/color][color=#000000]assign[/color][color=#666600]([/color][color=#008800]'cities'[/color][color=#666600],[/color][color=#000000] fn_get_all_cities[/color]color=#666600);[/color]





[color=#282828][font=arial, verdana, tahoma, sans-serif]then I had to declare the 2 rows for b_city and s_city at profile_fields table, with field_type='K' (mine declaration) so I can recognize the new city selectbox at active_skin/customer/views/profiles/components/profile_fields.tpl by inserting something like that:[/font][/color]



[color=#666600]{[/color][color=#000000]elseif $field[/color][color=#666600].[/color][color=#000000]field_type [/color][color=#666600]==[/color][color=#000000] [/color][color=#008800]“K”[/color][color=#666600]}[/color][color=#000000] [/color][color=#666600]{
[/color][color=#000000] [/color][color=#660066]City[/color][color=#000000] selectbox [/color][color=#666600]*}[/color]

[color=#000000] [/color][color=#666600]<[/color][color=#000088]select[/color][color=#000000] id[/color][color=#666600]=[/color][color=#008800]"{$id_prefix}elm
{$field.field_id}”[/color][color=#000000] [/color][color=#000088]class[/color][color=#666600]=[/color][color=#008800]“{if !$skip_field}{$_class}{/if}”[/color][color=#000000] name[/color][color=#666600]=[/color][color=#008800]“{$data_name}[{$data_id}]”[/color][color=#000000] [/color][color=#666600]{[/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]![/color][color=#000000]$skip_field[/color][color=#666600]}{[/color][color=#000000]$disabled_param[/color][color=#666600]}{/[/color][color=#000088]if[/color][color=#666600]}>[/color]

[color=#000000] [/color][color=#666600]<[/color][color=#000000]option value[/color][color=#666600]=[/color][color=#008800]“”[/color][color=#666600]>-[/color][color=#000000] [/color][color=#666600]{[/color][color=#000000]$lang[/color][color=#666600].[/color][color=#000000]select_city[/color][color=#666600]}[/color][color=#000000] [/color][color=#666600]-[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000000] [/color][color=#660066]Initializing[/color][color=#000000] [/color][color=#000088]default[/color][color=#000000] cities [/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000000]assign [/color][color=#000088]var[/color][color=#666600]=[/color][color=#008800]“country_code”[/color][color=#000000] value[/color][color=#666600]=[/color][color=#000000]$settings[/color][color=#666600].[/color][color=#660066]General[/color][color=#666600].[/color][color=#000000]default_country[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000000]assign [/color][color=#000088]var[/color][color=#666600]=[/color][color=#008800]“state_code”[/color][color=#000000] value[/color][color=#666600]=[/color][color=#000000]$value[/color][color=#666600]|[/color][color=#000088]default[/color][color=#666600]:[/color][color=#000000]$settings[/color][color=#666600].[/color][color=#660066]General[/color][color=#666600].[/color][color=#000000]default_state[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000000]assign [/color][color=#000088]var[/color][color=#666600]=[/color][color=#008800]“city_code”[/color][color=#000000] value[/color][color=#666600]=[/color][color=#000000]$value[/color][color=#666600]|[/color][color=#000088]default[/color][color=#666600]:[/color][color=#000000]$settings[/color][color=#666600].[/color][color=#660066]General[/color][color=#666600].[/color][color=#000000]default_city[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000088]if[/color][color=#000000] $cities[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#000088]foreach[/color][color=#000000] [/color][color=#000088]from[/color][color=#666600]=[/color][color=#000000]$cities[/color][color=#666600].[/color][color=#000000]$state_id item[/color][color=#666600]=[/color][color=#000000]city[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]<[/color][color=#000000]option [/color][color=#666600]{[/color][color=#000088]if[/color][color=#000000] $city_code [/color][color=#666600]==[/color][color=#000000] $city[/color][color=#666600].[/color][color=#000000]city_id[/color][color=#666600]}[/color][color=#000000]selected[/color][color=#666600]=[/color][color=#008800]“selected”[/color][color=#666600]{[/color][color=#008800]/if} value=“{$city.city_id}”>{$city.code}[/color]

[color=#000000] [/color][color=#666600]{[/color][color=#008800]/foreach}

{/[/color][color=#000088]if[/color][color=#666600]}[/color]

[color=#000000] [/color][color=#666600]<[/color][color=#008800]/select>

[/color]





[color=#282828][font=arial, verdana, tahoma, sans-serif]Unfortunately cities cannot be initialised !! [/font][/color]

sorry for the corrupted paste !



the topic is here Drop Down Select City - Hints & Modifications - CS-Cart Community Forums

and I wanted some developer's opinion