static function releaseImageLock($image_pid) { global $user; $now = date("YmdHis"); $datastream_name = "status"; $datastream_label = "Image Status"; $session_id = $_SESSION['apiary_session_id']; if ($session_id == '') { $session_id = $_SESSION['apiary_cleared_session_id']; } $dom = FedoraObject::getManagedXMLDom($image_pid, $datastream_name); if ($dom != false) { if ($dom->getElementsByTagName('locked')->item(0)->nodeValue != "false") { if (!empty($dom->getElementsByTagName('locked_session')->item(0)->nodeValue)) { $locked_session = $dom->getElementsByTagName('locked_session')->item(0)->nodeValue; if ($dom->getElementsByTagName('locked_by')->item(0)->nodeValue == $user->name && $locked_session == $session_id) { $dom->getElementsByTagName('locked')->item(0)->nodeValue = "false"; } else { if (false) { //could add an override if the user has some admin right } else { $last_locked_time = $dom->getElementsByTagName('locked_time')->item(0)->nodeValue; $apiary_timeout = variable_get('apiary_object_timeout', '1800'); $last_locked_timeout = $last_locked_time + $apiary_timeout; if ($now > $last_locked_timeout || !Workflow_Sessions::active_session($locked_session)) { $dom->getElementsByTagName('locked')->item(0)->nodeValue = "false"; } else { //cannot unlock this record return false; } } } } } $dom->getElementsByTagName('locked')->item(0)->nodeValue = "false"; } else { //create status datastream! $dom = AP_Image::generateImageStatusDom("false", $user->name, $now, $session_id); } //We don't get here if we fail if (FedoraObject::createManagedXMLDom($image_pid, $datastream_name, $datastream_label, $dom)) { include_once drupal_get_path('module', 'apiary_project') . '/workflow/include/search.php'; $search_instance = new search(); $search_instance->index($image_pid); return FedoraObject::getManagedXMLDom($image_pid, $datastream_name); } }