ci = $ci; } /** * Loop all the available sprinkles and return a list of their jobs. * * @return array An array of all the task classes found for every sprinkle */ public function getAvailableJobDefinitions() { $tasks = $this->ci->locator->listResources($this->scheme, false, false); return $this->loadAvailableJobDefinitions($tasks); } /** * Process jobs Resource into info. * * @param array $taskFiles List of jobs files * * @return array */ protected function loadAvailableJobDefinitions(array $jobFiles) { $jobs = []; foreach ($jobFiles as $jobFile) { $job = $this->getJobDefinition($jobFile); if ($job) { $jobs[] = $job; } } return $jobs; } /** * Return an array of job details including the class name and the sprinkle name. * * @param ResourceInstance $file The job file * * @return array The details about a job file [name, class, sprinkle] */ protected function getJobDefinition(ResourceInstance $file) { /** @var \UserFrosting\System\Sprinkle\SprinkleManager */ $sprinkleManager = $this->ci->sprinkleManager; // Format the sprinkle name for the namespace $sprinkleName = $file->getLocation()->getName(); $sprinkleNS = $sprinkleManager->getSprinkleClassNamespace($sprinkleName); // Getting base path, name and class name $basePath = str_replace($file->getBasename(), '', $file->getBasePath()); $name = $basePath . $file->getFilename(); $className = str_replace('/', '\\', $basePath) . $file->getFilename(); $classPath = "\\$sprinkleNS\\Jobs\\$className"; // Exclude known helper classes if ($className == "JobInterface" || $className == "JobBase" || $className == "JobInspector") { return null; } $reflect = new \ReflectionClass($classPath); if ($reflect->isAbstract()) { return null; } // Build the class name and namespace return [ 'sprinkle' => $sprinkleName, 'name' => $name, 'class' => $classPath, ]; } }