Print

 

I had several hundred items that needed to be changed to make them public. All the record numbers were in a spreadsheet and so, to save having to make manual edits, I developed the following code to flip the items from private to public. The code is in PHP bur run from a desktop against a remote Omeka instance. The record numbers are held in a CSV file and the name of the file is passed in to the routine.

require_once 'Unirest\Unirest.php';
$csvfile  = $argv[1];
global $uri;
global $key;
$uri='http://your-url/api/items/'  ;
$key ='your-key';

Loop through the CSV  using routines to get and save the item. 

$lastRecord = 0;
if (($handle = fopen($csvfile . "/" . $csvfile . ".csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, "@")) !== FALSE) {
        $num = count($data);
		$recordNumber = $data[0];
		if ($lastRecord != $recordNumber)
			{
			$responseEncoded = getItem($recordNumber);
			echo $recordNumber;
			saveItem($recordNumber,$responseEncoded)	;
			$lastRecord = $recordNumber;			
			}
	}
fclose($handle);
}

Function to get an item

function getItem($recordNumber) {
global $uri;
global $key;
$response = Unirest\Request::get($uri .$recordNumber . '?key=' . $key);
$responseBody = $response->raw_body;
$response_decoded = json_decode($responseBody,true);
$response_decoded["public"]=true;
return   json_encode($response_decoded,true);
}

and function to save the item

function saveItem($recordNumber,$responseEncoded) {
global $uri;
global $key;
$headers = array('Accept' => 'application/json');
$response2 = Unirest\Request::put( $uri .$recordNumber . '?key=' . $key , $headers, $responseEncoded);
}