return '';
}
+ /**
+ * Indicates if the display of the current task should be joined with the
+ * given previous task.
+ *
+ * @param Horde_Login_Task $previous The previous task to display.
+ *
+ * @return boolean True in case both tasks should be displayed together.
+ */
+ public function joinDisplayWith(Horde_LoginTasks_Task $previous)
+ {
+ if ($this->display == $previous->display) {
+ return true;
+ }
+ if ($this->_isConfirmTask($this) && $this->_isConfirmTask($previous)) {
+ return true;
+ }
+ return false;
+ }
+
+ private function _isConfirmTask($task)
+ {
+ return in_array(
+ $task->display,
+ array(Horde_LoginTasks::DISPLAY_CONFIRM_YES,
+ Horde_LoginTasks::DISPLAY_CONFIRM_NO)
+ );
+ }
+
}
public function needDisplay($advance = false)
{
$tmp = array();
- $display = null;
+ $previous = null;
reset($this->_tasks);
while (list($k, $v) = each($this->_tasks)) {
if (!$v['display'] ||
- (!is_null($display) && ($v['task']->display != $display))) {
+ (!is_null($previous) && !$v['task']->joinDisplayWith($previous))) {
break;
}
$tmp[] = $v['task'];
- $display = $v['task']->display;
+ $previous = $v['task'];
}
if ($advance) {
'Horde_LoginTasks_Stub_ConfirmTwo',
'Horde_LoginTasks_Stub_TaskTwo',
'Horde_LoginTasks_Stub_ConfirmThree',
- 'Horde_LoginTasks_Stub_Notice',
+ 'Horde_LoginTasks_Stub_NoticeTwo',
),
true
);
asort($classes);
$this->assertEquals(
array(
- 'Horde_LoginTasks_Stub_ConfirmNo'
+ 'Horde_LoginTasks_Stub_ConfirmNo',
+ 'Horde_LoginTasks_Stub_Confirm'
),
$classes
);
$_POST['logintasks_confirm_0'] = true;
+ $_POST['logintasks_confirm_1'] = true;
$this->assertEquals(
'redirect',
- $tasks->runTasks(true, null)
+ $tasks->runTasks(true)
);
$this->assertEquals(
array(
'Horde_LoginTasks_Stub_ConfirmNo',
+ 'Horde_LoginTasks_Stub_Confirm',
+ 'Horde_LoginTasks_Stub_Task',
),
Horde_LoginTasks_Stub_Task::$executed
);
$this->assertContains(
'http:///services/logintasks.php?app=test',
- (string) $tasks->runTasks(false, null)
+ (string) $tasks->runTasks(false)
);
$this->assertEquals(
array(