Beispiel #1
0
 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);
     }
 }