This is what I did so far:
In controllers\front\OrderController.php I changed just line 67 adding a "0":
if (!$this->context->customer->isLogged(true) && in_array($this->step, array(0, 1, 2, 3)))
This alone would be enough to force to log in any user before showing the summary screen.
In themes\<my-theme>\order-steps.tpl I changed lines 38 - 55:
<li class="{if $current_step=='login'}step_current {elseif $current_step=='summary'}step_done_last step_done{else}{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address' || $current_step=='summary'}step_done{else}step_todo{/if}{/if} first">
{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address' || $current_step=='summary'}
<a href="{$link->getPageLink('order', true)}">
<em>01.</em> {l s='Sign in'}
</a>
{else}
<span><em>01.</em> {l s='Sign in'}</span>
{/if}
</li>
<li class="{if $current_step=='summary'}step_current{elseif $current_step=='address'}step_done step_done_last{else}{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address'}step_done{else}step_todo{/if}{/if} second">
{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address'}
<a href="{$link->getPageLink('order', true, NULL, "{$smarty.capture.url_back}&step=1&multi-shipping={$multi_shipping}")|escape:'html':'UTF-8'}">
<em>02.</em> {l s='Summary'}
</a>
{else}
<span><em>02.</em> {l s='Summary'}</span>
{/if}
</li>
So far it works as expected. A minor flow is that on empty cart the "current step" defaults to "Summary" instead of "Log in" - any ideas?
Thanks!