diff --git a/resources/templates/provision/grandstream/grp26xx/{$mac}.xml b/resources/templates/provision/grandstream/grp26xx/{$mac}.xml
index d4a615ef40..21022b734d 100644
--- a/resources/templates/provision/grandstream/grp26xx/{$mac}.xml
+++ b/resources/templates/provision/grandstream/grp26xx/{$mac}.xml
@@ -4562,7 +4562,7 @@
- Enabled
- - 0
+
{if isset($grandstream_pc_port_vlan) }
- {$grandstream_pc_port_vlan}
@@ -5364,7 +5364,7 @@
- {$http_auth_password}
-
+
{if isset($grandstream_phonebook_download)}
- {$grandstream_phonebook_xml_server_path}{$mac}/
@@ -5376,7 +5376,7 @@
- - 0
+
{if isset($grandstream_phonebook_download_interval)}
- {$grandstream_phonebook_download_interval}
@@ -6669,7 +6669,7 @@
- No
- - 0
+
{if isset($grandstream_default_ringtone)}
- {$grandstream_default_ringtone}
@@ -6781,31 +6781,104 @@
- {$fixed_keys=4}
- {if $template == "grandstream/grp26xx"}{$fixed_keys=12}{/if}
+
+
- {assign var=key_types value=["none"=>-1,"line"=>31,"sharedline"=>32,"speeddial"=>0, "blf"=>1, "presence watcher"=>2, "eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"multicast paging"=>13,"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17,"dnd"=>22]}
+
- {for $line=1 to 24}
+
- {if isset($keys.line.$line.device_key_category) && isset($keys.line.$line.device_key_type) && isset($key_types[$keys.line.$line.device_key_type])}
- {if $line <= $fixed_keys}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{$fixed_keys=12}
+{if $template == "grandstream/grp2612"}{$fixed_keys=3}{/if}
+{if $template == "grandstream/grp2613"}{$fixed_keys=4}{/if}
+{if $template == "grandstream/grp2614"}{$fixed_keys=6}{/if}
+{if $template == "grandstream/grp2615"}{$fixed_keys=12}{/if}
+
+{$start_id=1}
+{assign var=key_types value=["none"=>-1,"line"=>31,"sharedline"=>32,"speeddial"=>0, "blf"=>1, "presence watcher"=>2, "eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"multicast paging"=>13,"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17,"dnd"=>22]}
+
+{for $line=1 to 6}
+{$pid=$line*2-2}
+{if isset($keys.line.$line.device_key_category) && isset($keys.line.$line.device_key_type) && isset($key_types[$keys.line.$line.device_key_type])}
+{if $line <= $fixed_keys}
+
+
- {$key_types[$keys.line.$line.device_key_type]}
- {else}
- - {$key_types[$keys.line.$line.device_key_type]-10}
- {/if}
- - {$keys.line.$line.device_key_line}
+
+
+
+
+ - Account{$keys.line.$line.device_key_line}
+
+
+
- {$keys.line.$line.device_key_label}
+
+
+
- {$keys.line.$line.device_key_value}
+
+
- {if $line == '-1'}uncheck{else}check{/if}
- {else}
- {if $line <= $fixed_keys}
+
- {/if}
- {/if}
+{/if}
+{/if}
- {/for}
+{/for}
+
+
+
+
+
+{$start_id=7}
+{for $line=7 to 48}
+{$pid=($line-6)*4-4}
+{if isset($keys.line.$line.device_key_category) && isset($keys.line.$line.device_key_type) && isset($key_types[$keys.line.$line.device_key_type])}
+{if $line <= $fixed_keys}
+
+
+ - {$key_types[$keys.line.$line.device_key_type]}
+
+
+
+
+ - Account{$keys.line.$line.device_key_line}
+
+
+
+ - {$keys.line.$line.device_key_label}
+
+
+
+ - {$keys.line.$line.device_key_value}
+
+
+ - {if $line == '-1'}uncheck{else}check{/if}
+
+{/if}
+{/if}
+
+{/for}
@@ -9529,503 +9602,36 @@
- - None
+
+{assign var=key_types value=[""=>None,"0"=>SpeedDial, "blf"=>BLF, "2"=>PresenceWatcher, "eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
-
- - Account1
+{$start_id=1}
+{for $mem=1 to 40}
+{$pid=$mem*3-3}
+
+{if isset($keys.memory.$mem.device_key_category) && isset($keys.memory.$mem.device_key_type) && $keys.memory.$mem.device_key_type|in_array:$key_types}
+
+
+
+
+ {else}- Account{$keys.memory.$mem.device_key_line+1}
{/if}
-
+ - {$keys.memory.$mem.device_key_label}
-
+ - {$keys.memory.$mem.device_key_value}
-
-
-
-
-
-
-
-
- - None
+ - {$key_types[$keys.memory.$mem.device_key_type]}
-
- - Account1
+{/for}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - None
-
-
- - Account1
-
-
-
-
-
-
-