Asana account to use this plugin. After activating, go to the settings page to configure this plugin
* Author: Ed Goode
* Author URI: http://mackerelsky.co.nz/
*/
//global variables
global $api_key;
global $asanaURL;
//Add options and set default values
add_option(asana_api_key, '');
add_option(asana_selected_workspace, '');
add_option(asana_workspace_id, '');
add_option(asana_show_due_today, '');
add_option(asana_show_due_this_week, '');
add_option(asana_show_todays_tasks, '');
add_option(asana_show_overdue, '');
//Create options page
add_action('admin_menu', 'add_asana_option_page');
// Hook in options page
function add_asana_option_page() {
add_options_page('Asana Task Widget Settings', 'Asana Tasks', 'manage_options', 'asana-tasks', 'asana_option_page');
}
function asana_option_page() {
$selected_workspace;
$result;
//update api key when saved
if ($_POST['save']) {
$api_key = $_POST[asana_api_key];
update_option(asana_api_key, $api_key);
}
//update workspace when saved
if ($_POST['workspace']) {
$selected_workspace = $_POST[asana_workspace];
update_option(asana_selected_workspace, $selected_workspace);
}
//update display options
if ($_POST['display']) {
if (isset($_POST[asana_show_due_today])) {
update_option(asana_show_due_today, true);
}
else{
update_option(asana_show_due_today, false);
}
if (isset($_POST[asana_show_due_this_week])) {
update_option(asana_show_due_this_week, true);
}
else{
update_option(asana_show_due_this_week, false);
}
if (isset($_POST[asana_show_overdue])) {
update_option(asana_show_overdue, true);
}
else{
update_option(asana_show_overdue, false);
}
if (isset($_POST[asana_show_todays_tasks])) {
update_option(asana_show_todays_tasks, true);
}
else{
update_option(asana_show_todays_tasks, false);
}
}
//display form
?>
Asana Task Display Options
Please enter your Asana API key
You can find the key by logging into Asana, clicking on your name in the bottom left hand corner, choosing Account Settings, and going to the API tab
";
echo "
Choose a workspace
";
$asana_url = "https://app.asana.com/api/1.0/workspaces";
$api_key = get_option(asana_api_key).":"; //note API key must have colon added to it for basic auth to work
//encode key and set header arguments (note sslverify must be false)
$args = array('headers' => array('Authorization' => 'Basic ' .base64_encode($api_key)), 'sslverify' => false);
//call API
$result = wp_remote_get($asana_url, $args);
//then decode the results
if(!is_null($result)){
$resultJson = json_decode($result['body']);
$workspaces = $resultJson->data;
}
//Create drop-down
echo "";
echo "";
echo "";
}
if (get_option(asana_selected_workspace) !=""){
if(!is_null($result)){
$resultJson = json_decode($result['body']);
$workspace = $resultJson->data;
foreach($workspace as $w){
if($w->name == get_option(asana_selected_workspace)){
//update workspace ID option
$asana_workspace_ID = $w->id;
update_option(asana_workspace_id, $asana_workspace_ID);
}
}
}
//display options for what's shown in the widget
?>
Please select what should be displayed in the widget
";
}
?>
the Asana Tasks settings page to configure this widget";
}
else
{
//set correct timezone so that we get the right date for tasks
$timezone = get_option('timezone_string');
date_default_timezone_set($timezone);
$today = date("Y-m-d");
$endofweek = strtotime( "next Sunday" );
$weekend = date("Y-m-d",$endofweek);
//set up the form (note that it's calling PHP_SELF, which will mean that we process the output on the same page
echo "";
}
}
function get_asana_tasks(){
$asana_due_today = "https://app.asana.com/api/1.0/tasks?opt_fields=name,completed,due_on,assignee_status&workspace=".get_option(asana_workspace_id)."&assignee=me";
$api_key = get_option(asana_api_key).":"; //note API key must have colon added to it for basic auth to work
//encode key and set header arguments (note sslverify must be false)
$args = array('headers' => array('Authorization' => 'Basic ' .base64_encode($api_key)), 'sslverify' => false);
//call API
$results = wp_remote_get($asana_due_today, $args);
if(!is_null($results)){
//get list of tasks
$resultsJson = json_decode($results['body']);
$tasks = $resultsJson->data;
}
return $tasks;
}
//update tasks in asana when button clicked
function update_asana_tasks($task_list){
$api_key = get_option(asana_api_key).":"; //note API key must have colon added to it for basic auth to work
//for each task we have to update
foreach($task_list as $task_to_update){
//set up the url
$url = "https://app.asana.com/api/1.0/tasks/".$task_to_update;
$completed = array("completed" => true);
$body = array("data" => $completed);
$body = json_encode($body);
//note that content type has been set to application/json. That's the only way to get data out of this sucker
$args = array('method' => 'PUT', 'body' => $body, 'headers' => array('Content-Type'=> 'application/json', 'Authorization' => 'Basic ' .base64_encode($api_key)),'sslverify' => false);
//call it
$response = wp_remote_retrieve_response_code(wp_remote_request( $url, $args));
//print_r($response);
if($response == 200){
echo "Task successfully updated.";
}
else
{
echo "There was a problem communicating with Asana. The result code was ".$response;
}
}
}
//register widget
function register_asana_task_widget(){
wp_add_dashboard_widget( 'asana-tasks', 'Asana Tasks', 'asana_task_widget');
}
add_action('wp_dashboard_setup', 'register_asana_task_widget');
?>