PHP configuration

Configuration

In shared_workforce.inc.php

$shared_workforce_url = 'https://api.sharedworkforce.com/tasks';
$shared_workforce_api_key = "05a0a234-499a-4010-beb8-bfdd4e0234b0";

function create_shared_workforce_task($data) {
	global $shared_workforce_url, $shared_workforce_api_key;

	$data = json_encode($data);

	$headers = array(
		'Accept: application/json',
		'Content-Type: application/vnd.com.sharedworkforce.text+json',
		"X-API-Key: $shared_workforce_api_key"
	);

	$handle = curl_init();
	curl_setopt($handle, CURLOPT_URL, $shared_workforce_url);
	curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
	curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

	curl_setopt($handle, CURLOPT_POST, true);
	curl_setopt($handle, CURLOPT_POSTFIELDS, $data);

	$response = curl_exec($handle);
	$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);
}  

Tagging text

In this example, we might have some text we would like to moderate.

tag_text.php:

require_once 'shared_workforce.inc.php';

$body_text = "Load your text to be moderated here";

create_shared_workforce_task(
	array('task' =>
		array(
			"title" 			   => "Classify text",
			"instruction"    => "Choose the first option that applies.",
			"text"           => $body_text, // profile text to be moderated
			"answer_type"    => "choice", // Could be set to "tags" for multiple selection
			"answer_options" => array(
				"meaningless words or repeated characters",
				"phone number or email address",
				"sexual",
				"bad language",
				"none of the above" // approve
			),
			"callback_url" => "http://www.example.com/tag_text_callback.php",
			"callback_params" => array('profile_id'=>1234)
		)
	)
);
  

tag_text_callback.php:

require_once 'shared_workforce.inc.php';

if($results = file_get_contents("php://input")) {

	$results = json_decode($results, true);
	if ($results['api_key'] != $shared_workforce_api_key) { die("Wrong API key!"); } 

	// check that the api key matches before doing anything
	$task = $results['task'];
	
	/*
	  Get the profile id that was moderated (set by you when the task is created)
	*/
	$photo_id = $task['callback_params']['profile_id'];

	/* 
	  responses is always an array, could be more than one response
	  if you have asked for multiple opinions. In this case we just
	  have the one response.
	*/
	$response = $task['responses'][0];

	/* Answer could be a String or Array. If it is a single
	   choice, it will be a string.
	*/
	$answer = $response['answer'];

	/* Your actions based on the answer */
	if ($answer == "phone number or email address") {
		// maybe do a shared workforce edit task?
	} else if ($anwer == "bad language") {
		// escalate etc.
	}
}
  

Editing text

In this example, we might have some text we would like to remove the contact details from.

edit_text.php:

require_once 'shared_workforce.inc.php';

$text_with_contact_details = "Find me on emm ess enn lisa one two three";

create_shared_workforce_task(
	array('task' =>
		array(
			"title" 	     => "Remove contact details from text",
			"instruction"    => "Please remove any contact details from the text.",
			"text"           => $text_with_contact_details,
			"answer_type"    => "edit",
			"callback_url" => "http://www.example.com/edit_text_callback.php",
			"callback_params" => array('profile_id'=>1234)
		)
	)
);
  

edit_text_callback.php:

require_once 'shared_workforce.inc.php';

if($results = file_get_contents("php://input")) {

	$results = json_decode($results, true);

	// check that the api key matches before doing anything
	if ($results['api_key'] != $shared_workforce_api_key) { die("Wrong API key!"); }
	$task = $results['task'];
	
	/*
	  Get the profile id that was moderated (set by you when the task is created)
	*/
	$profile_id = $task['callback_params']['profile_id'];

	/* 
	  responses is always an array, could be more than one response
	  if you have asked for multiple opinions. In this case we just
	  have the one response.
	*/
	$response = $task['responses'][0];

	/* Answer could be a String or Array. If it is a single
	   choice, it will be a string.
	*/
	$answer = $response['answer'];

	/* Update your profile with the new text.
	   Might be something like:
		 $profile = Profile.find($profile_id);
		 $profile->update(array('text'=>$answer));
	*/

}
  

Tagging images

In this example, we might have an image we'd like to check.

tag_image.php:

require_once 'shared_workforce.inc.php';

$image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Persian_Cat_%28kitten%29.jpg/513px-Persian_Cat_%28kitten%29.jpg";

create_shared_workforce_task(
	array('task' =>
		array(
			"title" 			   => "Please classify this photo",
			"instruction"    => "Choose the first answer that applies",
			"answer_type"    => "choice", // Single choice from a list of options
			"answer_options" => array(
				"poorly cropped with a border or background"
				"might be offensive",
				"wrong way round",
				"none of the above"
			),
			"image_url" => $image_url, // the url of the image to be moderated
			"callback_url" => "http://www.example.com/tag_image_callback.php", // the URL of the script to be called when complete
			"callback_params" => array('photo_id'=>1234) // set your photo id here so you can identify it later
		)
	)
);

tag_image_callback.php:

require_once 'shared_workforce.inc.php';

if($results = file_get_contents("php://input")) {

	$results = json_decode($results, true);
	if ($results['api_key'] != $shared_workforce_api_key) { die("Wrong API key!"); } # check that the api key matches before doing anything
	$task = $results['task'];
	
	/*
	  Get the photo id that was moderated (set by you when the task is created)
	*/
	$photo_id = $task['callback_params']['photo_id'];

	/* 
	  responses is always an array, could be more than one response
	  if you have asked for multiple opinions. In this case we just
	  have the one response.
	*/
	$response = $task['responses'][0];

	/* Answer could be a String or Array. If it is a single
	   choice, it will be a string.
	*/
	$answer = $response['answer'];

	/* Your actions based on the answer */
	if ($answer == "poorly cropped with a border or background") {
		// Approve. Create a cropping task
		create_shared_workforce_task(
			array('task' =>
				array(
			    "title" 			     => "Crop this photo",
			    "instruction"      => "Crop this photo, removing any borders or backgrounds.",
			    "answer_type"      => "crop",
			    "image_crop_ratio" => 1, // square (optional)
			    "image_url" => "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Persian_Cat_%28kitten%29.jpg/513px-Persian_Cat_%28kitten%29.jpg",
			    "callback_url" => "http://www.example.com/crop_photo_callback.php",
			    "callback_params" => array('photo_id'=>$photo_id)
				)
			)
		);
	} else if ($answer == "wrong way round") {
		// create a rotation task
		create_shared_workforce_task(
			array('task' =>
				array(
			    "title" 			   => "Rotate this photo",
			    "instruction"    => "Rotate the photo until it is the right way round",
			    "answer_type"    => "rotate",
			    "image_url" => "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Persian_Cat_%28kitten%29.jpg/513px-Persian_Cat_%28kitten%29.jpg", # the photo to be moderated
			    "callback_url" => "http://www.example.com/rotate_photo_callback.php",
			    "callback_params" => array('photo_id'=>$photo_id)
				)
			)
		);
	} else if ($answer == "might be offensive") {
		// Here you could delete the photo and send a warning email
	}
}
  

Cropping images

In this example, we might have a photo we would like to crop to a nice square.

crop_image.php:

require_once 'shared_workforce.inc.php';

$image = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Persian_Cat_%28kitten%29.jpg/513px-Persian_Cat_%28kitten%29.jpg";

create_shared_workforce_task(
	array('task' =>
		array(
			"title" 	         => "Crop this photo",
			"instruction"      => "Please crop the photo around the face, keeping their chin visible and their eyes 1/3 of the way from the top",
			"image_url"        => $image_url,
			"answer_type"      => "crop",
			"image_crop_ratio" => 1, // Square
			"callback_url"     => "http://www.example.com/crop_image_callback.php",
			"callback_params"  => array('photo_id'=>1234)
		)
	)
);
  

crop_photo_callback.php:


require_once 'shared_workforce.inc.php';

if($results = file_get_contents("php://input")) {

	$results = json_decode($results, true);

	// check that the api key matches before doing anything
	if ($results['api_key'] != $shared_workforce_api_key) { die("Wrong API key!"); } 
	$task = $results['task'];
	
	// Get the photo id that was moderated (set by you when the task is created)
	$photo_id = $task['callback_params']['photo_id'];

	/* 
	  responses is always an array, could be more than one response
	  if you have asked for multiple opinions. In this case we just
	  have the one response.
	*/
	$response = $task['responses'][0];

	/* If the task answer type is edit or crop, there will be 
	   a URL with the cropped/rotated image for you to download
	*/
	$new_image_url = $response['new_image_url'];

	// Put the newly cropped image in to a file
	file_put_contents("cropped_image_$photo_id.jpg", file_get_contents($new_image_url));

}
  

Rotating images

In this example, we might have a photo that we would like to rotate to its correct orientation.

rotate_image.php:

require_once 'shared_workforce.inc.php';

$image = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Persian_Cat_%28kitten%29.jpg/513px-Persian_Cat_%28kitten%29.jpg";

create_shared_workforce_task(
	array('task' =>
		array(
			"title" 	        => "Rotate this photo",
			"instruction"     => "Please rotate the photo until it is the right way up",
			"image_url"       => $image_url,
			"answer_type"     => "rotate",
			"callback_url"    => "http://www.example.com/rotate_image_callback.php",
			"callback_params" => array('photo_id'=>1234)
		)
	)
);
  

rotate_image_callback.php:


require_once 'shared_workforce.inc.php';

if($results = file_get_contents("php://input")) {

	$results = json_decode($results, true);

	// check that the api key matches before doing anything
	if ($results['api_key'] != $shared_workforce_api_key) { die("Wrong API key!"); } 
	$task = $results['task'];
	
	//  Get the photo id that was moderated (set by you when the task is created)
	$photo_id = $task['callback_params']['photo_id'];

	/* 
	  responses is always an array, could be more than one response
	  if you have asked for multiple opinions. In this case we just
	  have the one response.
	*/
	$response = $task['responses'][0];

	/* If the task answer type is edit or crop, there will be 
	   a URL with the cropped/rotated image for you to download
	*/
	$new_image_url = $response['new_image_url'];

	//  Put the newly rotated image in to a file
	file_put_contents("rotated_image_$photo_id.jpg", file_get_contents($new_image_url));

}