From 436348657feb14095a01afab6b9b2ea87e5609db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georg=20Gro=C3=9Fberger?= Date: Fri, 7 Oct 2016 20:32:40 +0200 Subject: [PATCH] Support custom task class name patterns --- Mage/Task/Factory.php | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index 9384d4c..536e377 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -45,13 +45,31 @@ class Factory $taskName = ucwords(str_replace('-', ' ', $taskName)); $taskName = str_replace(' ', '', $taskName); - if (strpos($taskName, '/') === false) { - $className = 'Task\\' . $taskName; - } else { - $className = 'Mage\\Task\\BuiltIn\\' . str_replace(' ', '\\', ucwords(str_replace('/', ' ', $taskName))) . 'Task'; + $patterns = []; + + if (is_array($taskConfig->general('taskPatterns'))) { + $patterns = $taskConfig->general('taskPatterns'); } - if (!class_exists($className)) { + $patterns[] = 'Task\\%s'; + $patterns[] = 'Mage\\Task\\BuiltIn\\%sTask'; + + $className = null; + + $taskClass = trim($taskName, '/\\'); + $taskClass = str_replace(' ', '\\', ucwords(str_replace('/', ' ', $taskClass))); + $taskClass = str_replace(' ', '', ucwords(str_replace('-', ' ', $taskClass))); + + foreach ($patterns as $pattern) { + $possibleClass = sprintf($pattern, $taskClass); + + if (class_exists($possibleClass)) { + $className = $possibleClass; + break; + } + } + + if (!$className) { throw new Exception('Task "' . $taskName . '" not found.'); }