Проблему решил, но пока только через пятую точку.
Шаг заполнения формы пользовательских данных (который между корзиной и подтверждением заказа) пропускается после первого заполнения потому, что устанавливается авторизация пользователя (пусть и временная).
Т.е. выставляется $_SESSION['auth'] и там хранятся данные.
Чтобы вернусться к этому шагу, надо эти данные убить.
Мой метод: (топорный, если кто найдет как сделать элегантней - милости просим поделиться)
Для начала надо сохранить пользовательские данные, чтобы ему не надо было вводить все снова
я это делал на последнем шаге, т.е. в get_final_confirmation.tpl.php
$_SESSION['user_id_backup'] = $_SESSION['auth']['user_id'];
$qr = "select * from jm_vm_user_info where user_id = ".$_SESSION['user_id_backup'];
$res = mysql_query($qr);
$userinfo = mysql_fetch_assoc($res);
$_SESSION['userinfo_backup'] = $userinfo;
Далее создается ссылка "отката назад" которая ведет на корзину и содержит дополнительный ключ сброса
<a href="index.php?page=shop.cart&...блаблабла...всякие ключи...&reset=ok">Вернуться в вводу данных</a>
Да, это может быть не безопасно, но пока лучше не придумал. (я еще "зеленый")))
В корзине (в моем случае basket_b2c.html.php) код сброса данных и тут же редирект на следующий шаг
if(isset($_GET['reset']) && ($_GET['reset'] == "ok"))
{
unset($_SESSION['auth']['user_id']);
header('Location: index.php?page=checkout.index&...блаблабла...куча ключей, для каждого случая свои...');
}
Теперь у нас есть данные пользователя и сброшена сессия; снова появится шаг с формой ввода данных, но поля пусты.
Восстанавливал я так
echo '
<script type="text/javascript">
document.getElementById("vm_fio_field").value = "'.$_SESSION['userinfo_backup']['vm_fio'].'";
document.getElementById("email_field").value = "'.$_SESSION['userinfo_backup']['user_email'].'";
document.getElementById("address_type_name_field").value = "'.$_SESSION['userinfo_backup']['address_type_name'].'";
document.getElementById("city_field").value = "'.$_SESSION['userinfo_backup']['city'].'";
document.getElementById("vm_oblast_field").value = "'.$_SESSION['userinfo_backup']['vm_oblast'].'";
document.getElementById("zip_field").value = "'.$_SESSION['userinfo_backup']['zip'].'";
document.getElementById("phone_1_field").value = "'.$_SESSION['userinfo_backup']['phone_1'].'";
</script>';
Опять таки, поля для каждого свои, сделите за id элементов
Моментов, которые можно улучшить полно, пока это только направление, в котором можно поработать)
Надеюсь кому-нибудь пригодится.