Make sure automatic actions are applied to all tasks when using bulk operations
This commit is contained in:
parent
912cf378d7
commit
a0c44d238a
|
|
@ -21,12 +21,12 @@ abstract class Base extends \Kanboard\Core\Base
|
|||
private $compatibleEvents = array();
|
||||
|
||||
/**
|
||||
* Flag for called listener
|
||||
* Keep history of executed events
|
||||
*
|
||||
* @access private
|
||||
* @var boolean
|
||||
* @var array
|
||||
*/
|
||||
private $called = false;
|
||||
private $callStack = [];
|
||||
|
||||
/**
|
||||
* Project id
|
||||
|
|
@ -252,17 +252,20 @@ abstract class Base extends \Kanboard\Core\Base
|
|||
*/
|
||||
public function execute(GenericEvent $event, $eventName)
|
||||
{
|
||||
// Avoid infinite loop, a listener instance can be called only one time
|
||||
if ($this->called) {
|
||||
$data = $event->getAll();
|
||||
$hash = md5(serialize($data).$eventName);
|
||||
|
||||
// Do not call twice the same action with the same arguments.
|
||||
if (isset($this->callStack[$hash])) {
|
||||
return false;
|
||||
} else {
|
||||
$this->callStack[$hash] = true;
|
||||
}
|
||||
|
||||
$data = $event->getAll();
|
||||
$executable = $this->isExecutable($data, $eventName);
|
||||
$executed = false;
|
||||
|
||||
if ($executable) {
|
||||
$this->called = true;
|
||||
$executed = $this->doAction($data);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -141,4 +141,18 @@ class BaseActionTest extends Base
|
|||
$this->assertTrue($dummyAction->execute($event, 'foobar'));
|
||||
$this->assertFalse($dummyAction->execute($event, 'foobar'));
|
||||
}
|
||||
|
||||
public function testExecuteSameActionSeveralTimesWithDifferentEvents()
|
||||
{
|
||||
$dummyAction = new DummyAction($this->container);
|
||||
$dummyAction->setProjectId(1234);
|
||||
$dummyAction->setParam('p1', 'something');
|
||||
$dummyAction->addEvent('foobar', 'FooBar');
|
||||
|
||||
$event1 = new GenericEvent(array('project_id' => 1234, 'p1' => 'something', 'p2' => 'abc', 'p3' => array('p4' => 'a')));
|
||||
$event2 = new GenericEvent(array('project_id' => 1234, 'p1' => 'something', 'p2' => 'abc', 'p3' => array('p4' => 'b')));
|
||||
|
||||
$this->assertTrue($dummyAction->execute($event1, 'foobar'));
|
||||
$this->assertTrue($dummyAction->execute($event2, 'foobar'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue