Source of file BugHerdTasks.php
Size: 7,230 Bytes - Last Modified: 2021-12-24T05:19:25+00:00
/var/www/docs.ssmods.com/process/src/src/Tasks/BugHerdTasks.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 | <?php namespace IQnection\BugHerd; use SilverStripe\Dev\BuildTask; use IQnection\BugHerd\Model\Task; use SilverStripe\Control\Director; use SilverStripe\Control\Controller; class BugHerdTasks extends BuildTask { private static $segment = 'bugherd'; private static $events = [ 'task_create' => true, 'task_update' => true, 'task_destroy' => true, ]; public function run($request) { error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING); if ($task = $request->requestVar('task')) { if (method_exists($this, $task)) { $this->message('Running: '.$task); $this->{$task}($request); } else { $this->message('Task "'.$task.'" not found'); } } $this->message('Complete'); } /** * Downloads all tasks from BugHerd * * @param mixed $request * @return mixed */ public function getTasks($request) { $params = []; if ($status = $request->requestVar('status')) { $params['status'] = $status; } $tasks = BugHerd::inst()->getTasks($params); if (isset($tasks['error'])) { $this->message('Error: '. $tasks['error']); return; } $this->message(array_keys($tasks)); $tasks = $tasks['tasks']; $count = count($tasks); $this->message($count.' Tasks'); foreach($tasks as $task) { $this->message($count.' - '.$task['description']); $count--; if (!$dbTask = Task::get()->Find('BugHerdID', $task['id'])) { $dbTask = Task::create(); } $dbTask->loadFromApi($task, false); $dbTask->write(); } } /** * Updates the BugHerd status on all synced tasks * * @param mixed $request * @return mixed */ public function updateStatuses($request) { $tasks = BugHerd::inst()->getTasks(); if (isset($tasks['error'])) { $this->message('Error: '. $tasks['error']); return; } $this->message(array_keys($tasks)); $tasks = $tasks['tasks']; $count = count($tasks); $this->message($count.' Tasks'); foreach($tasks as $task) { $this->message($count.' - Updating '.$task['description']); $count--; if ( ($dbTask = Task::get()->Find('BugHerdID', $task['id'])) && ($dbTask->Status != $task['status']) ) { $this->message('Updating'); $dbTask->loadFromApi($task, false); $dbTask->write(); } } } /** * Update the full task data * * Optional param id can be included to update a specific task * * @param mixed $request */ public function updateTasks($request) { $tasks = Task::get(); if ($status = $request->requestVar('status')) { // remove spaces before and after any commas $status = preg_replace('/\s*?,\s*/',',',$status); $tasks = $tasks->Exclude('Status', explode(',',$status)); } elseif ($id = $request->requestVar('id')) { $tasks = $tasks->Filter('ID', $id); } $count = $tasks->Count(); $this->message($count.' Tasks'); foreach($tasks as $task) { $this->message($count.' - [ID:'.$task->ID.'] '.$task->Description); $count--; sleep(1); $taskData = BugHerd::inst()->getTask($task->BugHerdID); $taskData = $taskData['task']; if (!$taskData) { $this->message('No Task Data - May be Throttled'); sleep(5); continue; } $task->loadFromApi($taskData); $task->write(); } } /** * Parses the URL of the task, locates the page according to the URL, * and associates the task with that page * * Optional param id can be included to update a specific task * * @param mixed $request */ public function associatePages($request) { $tasks = Task::get(); if ($id = $request->requestVar('id')) { $tasks = $tasks->Filter('ID', $id); } $count = $tasks->Count(); $this->message('Associating '.$count.' Tasks'); foreach($tasks as $task) { $this->message($count.' - '.$task->Description); $count--; if (!$page = $task->findIssuePage()) { $this->message('Associated Page NOT FOUND'); continue; } $task->PageID = $page->ID; $task->write(); } } /** * Lists BugHerd Users and their data * * @param mixed $request */ public function getUsers($request) { $users = BugHerd::inst()->getUsers(); $this->message($users); } /** * Displays the BugHerd task data for debugging * * @param mixed $request */ public function getTask($request) { if (!$id = $request->requestVar('id')) { $this->message('No ID provided'); die(); } $task = BugHerd::inst()->getTask($id); $this->message($task); } /** * Bulk assigns tasks to a specific user * Required user id to assign tasks to * Optional filter tasks by current status in SilverStripe database * * @param mixed $request */ public function assignTasks($request) { $userId = $request->requestVar('user'); $status = $request->requestVar('status') ?: 'backlog'; $client = BugHerd::inst(); $tasks = Task::get(); if ($id = $request->requestVar('id')) { $tasks = $tasks->Filter('ID', $id); } else { $tasks = $tasks->Filter('AssignedTo', [null, 'no-one']); } $count = $tasks->Count(); $this->message($count.' Tasks to assign, to user id: '.$userId); sleep(1); foreach($tasks as $task) { $this->message($count.' - Assigning Task: '.$task->Description); $count--; if ( ($response = $client->updateTask($task->BugHerdID, ['assigned_to_id' => $userId])) && (isset($response['task'])) ) { $task->loadFromApi($response['task']); $task->write(); } usleep(1500000); } } /** * View current webhooks * * @param mixed $request */ public function viewWebhooks($request) { $client = BugHerd::inst(); $currentWebHooks = $client->getWebhooks(); $this->message($currentWebHooks); } /** * Delete all webhooks * * @param mixed $request */ public function deleteWebhooks($request) { $client = BugHerd::inst(); $currentWebHooks = $client->getWebhooks(); $currentWebHooks = $currentWebHooks['webhooks']; foreach($currentWebHooks as $currentWebHook) { $this->message('Deleting Webhook for Event: '.$currentWebHook['event']); $client->deleteWebhook($currentWebHook['id']); } } /** * Create webhooks to receive automatic updates * * @param mixed $request */ public function createWebhooks($request) { $client = BugHerd::inst(); $currentWebHooks = $client->getWebhooks(); $currentWebHooks = $currentWebHooks['webhooks']; $eventHooks = []; foreach($currentWebHooks as $currentWebHook) { $eventHooks[$currentWebHook['event']] = $currentWebHook; } $events = array_keys(array_filter($this->Config()->get('events'))); foreach($events as $event) { if (array_key_exists($event, $eventHooks)) { $this->message($event.' Hook Already Exists'); continue; } $webhookPath = Director::absoluteUrl(Controller::join_links(BugHerd::Config()->get('webhook_path'), $event)); $this->message('Creating Webhook for Event: '.$event.' At URL: '.$webhookPath); $client->createWebhook($event, $webhookPath); } } /** * View columns setup in BugHerd * * @param mixed $request */ public function getColumns($request) { $columns = BugHerd::inst()->getColumns(); $this->message($columns); } /** * Prints a message to the screen * * @param mixed $message */ protected function message($message) { print_r($message); print "\n"; } } |