From: Gunnar Wrobel Date: Tue, 9 Mar 2010 16:13:29 +0000 (+0100) Subject: Allow displaying several confirmations on one page. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=c57ab5329d2351adb02c2a6a473a41021b31c0cc;p=horde.git Allow displaying several confirmations on one page. --- diff --git a/framework/LoginTasks/lib/Horde/LoginTasks/Task.php b/framework/LoginTasks/lib/Horde/LoginTasks/Task.php index b33cc151a..95c8417f7 100644 --- a/framework/LoginTasks/lib/Horde/LoginTasks/Task.php +++ b/framework/LoginTasks/lib/Horde/LoginTasks/Task.php @@ -85,4 +85,32 @@ abstract class Horde_LoginTasks_Task 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) + ); + } + } diff --git a/framework/LoginTasks/lib/Horde/LoginTasks/Tasklist.php b/framework/LoginTasks/lib/Horde/LoginTasks/Tasklist.php index e1e2fd5c6..cdd922f0d 100644 --- a/framework/LoginTasks/lib/Horde/LoginTasks/Tasklist.php +++ b/framework/LoginTasks/lib/Horde/LoginTasks/Tasklist.php @@ -124,16 +124,16 @@ class Horde_LoginTasks_Tasklist 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) { diff --git a/framework/LoginTasks/test/Horde/LoginTasks/LoginTasksTest.php b/framework/LoginTasks/test/Horde/LoginTasks/LoginTasksTest.php index 4335c68c6..6da544850 100644 --- a/framework/LoginTasks/test/Horde/LoginTasks/LoginTasksTest.php +++ b/framework/LoginTasks/test/Horde/LoginTasks/LoginTasksTest.php @@ -440,7 +440,7 @@ class Horde_LoginTasks_LoginTasksTest extends PHPUnit_Framework_TestCase 'Horde_LoginTasks_Stub_ConfirmTwo', 'Horde_LoginTasks_Stub_TaskTwo', 'Horde_LoginTasks_Stub_ConfirmThree', - 'Horde_LoginTasks_Stub_Notice', + 'Horde_LoginTasks_Stub_NoticeTwo', ), true ); @@ -461,24 +461,28 @@ class Horde_LoginTasks_LoginTasksTest extends PHPUnit_Framework_TestCase 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(