For now (limited by Asana API), you may limit your query either to a specific project or to an assignee and workspace
NOTE: As Asana API says, if you filter by assignee, you MUST specify a workspaceId and viceversa.
public getTasksByFilter ( array $filter = ['assignee' => '', 'project' => '', 'workspace' => ''], array $opts = [] ) : string | ||
$filter | array | The filter with optional values. array( "assignee" => "", "project" => 0, "workspace" => 0 ) |
$opts | array | Array of options to pass (@see https://asana.com/developers/documentation/getting-started/input-output-options) |
return | string | JSON or null |
} $workspacesJson = json_decode($workspaces); foreach ($workspacesJson->data as $workspace) { echo '<h3>*** ' . $workspace->name . ' (id ' . $workspace->id . ')' . ' ***</h3><br />' . PHP_EOL; // Get all projects in the current workspace (all non-archived projects) $projects = $asana->getProjectsInWorkspace($workspace->id, $archived = false); // As Asana API documentation says, when response is successful, we receive a 200 in response so... if ($asana->responseCode != '200' || is_null($projects)) { echo 'Error while trying to connect to Asana, response code: ' . $asana->responseCode; continue; } $projectsJson = json_decode($projects); foreach ($projectsJson->data as $project) { // Get all tasks in the current project $tasks = $asana->getTasksByFilter(['project' => $project->id, 'workspace' => $workspace->id], ['modified_since' => $startTasksDate/*, 'opt_fields' => 'tags, name'*/]); // var_dump($tasks);die; $tasksJson = json_decode($tasks); if ($asana->responseCode != '200' || is_null($tasks)) { echo 'Error while trying to connect to Asana, response code: ' . $asana->responseCode; continue; } $tasks = array(); foreach ($tasksJson->data as $task) { $lastChar = substr(trim($task->name), -1); if ($lastChar != ':') { $tasks[] = '+ <a target="_blank" href="https://app.asana.com/0/' . $project->id . '/' . $task->id . '">' . $task->name . '</a> ' /*.(($task->tags) ? " [".implode (", ", $task->tags)."] " : '')*/ . '<br>' . PHP_EOL; } }
return; } $workspacesJson = json_decode($workspaces); foreach ($workspacesJson->data as $workspace) { echo '<h3>*** ' . $workspace->name . ' (id ' . $workspace->id . ')' . ' ***</h3><br />' . PHP_EOL; // Get all projects in the current workspace (all non-archived projects) $projects = $asana->getProjectsInWorkspace($workspace->id, $archived = false); // As Asana API documentation says, when response is successful, we receive a 200 in response so... if ($asana->responseCode != '200' || is_null($projects)) { echo 'Error while trying to connect to Asana, response code: ' . $asana->responseCode; continue; } $projectsJson = json_decode($projects); foreach ($projectsJson->data as $project) { // Get all tasks in the current project $tasks = $asana->getTasksByFilter(['project' => $project->id, 'workspace' => $workspace->id], ['modified_since' => $startTasksDate]); // var_dump($tasks);die; $tasksJson = json_decode($tasks); if ($asana->responseCode != '200' || is_null($tasks)) { echo 'Error while trying to connect to Asana, response code: ' . $asana->responseCode; continue; } $tasks = array(); foreach ($tasksJson->data as $task) { $lastChar = substr(trim($task->name), -1); if ($lastChar != ':') { $tasks[] = '+ <a target="_blank" href="https://app.asana.com/0/' . $project->id . '/' . $task->id . '">' . $task->name . '</a> ' . '<br>' . PHP_EOL; } } if ($tasks) { echo '<strong>[ ' . $project->name . ' (id ' . $project->id . ')' . ' ]</strong><br>' . PHP_EOL;
function getAsanaTasks($startTasksDate = 'now') { global $humanTags; /** * Create a client using Asana API key */ $asana = new Asana(array( 'apiKey' => ASANA_API_KEY )); $returnData = []; $tasksCounter = 0; $projectsCounter = 0; // Get all workspaces $workspaces = $asana->getWorkspaces(); // As Asana API documentation says, when response is successful, we receive a 200 in response so... if ($asana->responseCode != '200' || is_null($workspaces)) { logStatusFailure('Error while trying to connect to Asana, response code: ' . $asana->responseCode); return; } $workspacesJson = json_decode($workspaces); foreach ($workspacesJson->data as $workspace) { // echo '<h3>*** ' . $workspace->name . ' (id ' . $workspace->id . ')' . ' ***</h3><br />' . PHP_EOL; // Get all projects in the current workspace (all non-archived projects) $projects = $asana->getProjectsInWorkspace($workspace->id, $archived = false); // As Asana API documentation says, when response is successful, we receive a 200 in response so... if ($asana->responseCode != '200' || is_null($projects)) { logStatusFailure('Error while trying to connect to Asana [get project, workspace ' . $workspace->name . '], response code: ' . $asana->responseCode); continue; } $projectsJson = json_decode($projects); foreach ($projectsJson->data as $project) { $rDataKey = getClientNameByProjectId($project->id); $returnData[$rDataKey][$project->id] = [ 'workspace' => $workspace, 'project' => $project, 'tasks' => [], ]; // Get all tasks in the current project $tasks = $asana->getTasksByFilter(['project' => $project->id, 'workspace' => $workspace->id], ['modified_since' => $startTasksDate/*, 'opt_fields' => 'tags, name'*/]); // var_dump($tasks);die; $tasksJson = json_decode($tasks); if ($asana->responseCode != '200' || is_null($tasks)) { logStatusFailure('Error while trying to connect to Asana [get tasks, project "' . $project->name . '"], response code: ' . $asana->responseCode); unset($returnData[$rDataKey][$project->id]); continue; } $tasks = array(); foreach ($tasksJson->data as $task) { $taskFullInfo = $asana->getTask($task->id); // var_dump($tasks);die; $taskJson = json_decode($taskFullInfo); if ($asana->responseCode != '200' || is_null($tasks)) { logStatusFailure('Error while trying to connect to Asana [get task Info. Project "' . $project->name . '". Task "' . $task->name . '"], response code: ' . $asana->responseCode); unset($returnData[getClientNameByProjectId($project->id)][$project->id]); continue; } $lastChar = substr(trim($taskJson->data->name), -1); if ($lastChar != ':') { $taskTags = []; if ($taskJson->data->tags) { foreach ($taskJson->data->tags as $taskTag) { $taskTags[] = strtr($taskTag->name, $humanTags); } } $tasks[] = array( 'txt_link' => 'https://app.asana.com/0/' . $project->id . '/' . $taskJson->data->id, 'link' => [ 'url' => 'https://app.asana.com/0/' . $project->id . '/' . $taskJson->data->id, 'title' => 'https://app.asana.com/0/' . $project->id . '/' . $taskJson->data->id ], 'task_type' => '', 'completed' => $taskJson->data->name, 'notes' => '', 'created_at' => $taskJson->data->created_at, 'modified_at' => $taskJson->data->modified_at, 'tags' => implode(", ", $taskTags), ); } // $tasks[] = '+ <a target="_blank" href="https://app.asana.com/0/'.$project->id.'/'.$task->id.'">' . $task->name . '</a> ' // /*.(($task->tags) ? " [".implode (", ", $task->tags)."] " : '')*/.'<br>' . PHP_EOL; } if ($tasks) { $returnData[$rDataKey][$project->id]['tasks'] = $tasks; $tasksCounter = $tasksCounter + count($tasks); $projectsCounter++; } else { unset($returnData[$rDataKey][$project->id]); } } // remove empty entities if ($returnData) { foreach ($returnData as $clientName => $clientData) { if (!$clientData) { unset($returnData[$clientName]); } else { foreach ($clientData as $projectId => $projectData) { if (!$projectData) { unset($returnData[$clientName][$projectId]); } } } } } } // var_dump($returnData);die; return [ 'data' => $returnData, 'tasksCounter' => $tasksCounter, 'projectsCounter' => $projectsCounter, ]; }
define('ASANA_WORKSPACE_ID', 'REPLACE THIS'); // Include Asana API Class require_once 'asana.php'; // Initialize Asana API Class $asana = new Asana(ASANA_API_KEY); $graphTodo = array(); $graphDone = array(); $errors = array('message' => '', 'detail' => ''); $users = json_decode($asana->getUsers()); if (property_exists($users, 'data') && is_array($users->data)) { foreach ($users->data as $u) { $todo = 0; $done = 0; $due = 0; $filters = array("assignee" => $u->id, "workspace" => ASANA_WORKSPACE_ID); $tasks = json_decode($asana->getTasksByFilter($filters, 'completed,due_on')); if (property_exists($tasks, 'data') && is_array($tasks->data)) { foreach ($tasks->data as $t) { $dueDate = new DateTime($t->due_on); $nowDate = new DateTime('now'); if (!$t->completed && $dueDate < $nowDate) { $due++; } if ($t->completed) { $done++; } if (!$t->completed && $dueDate > $nowDate) { $todo++; } } } else {