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);
}