| 
					
				 | 
			
			
				@@ -166,6 +166,9 @@ class TripalWebService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (preg_match('/v(\d+)_(\d+)$/', $class, $matches)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       $major_version = $matches[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       $minor_version = $matches[2]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if ($sanitize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 'v' . $major_version . '_' . $minor_version; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return 'v' . $major_version . '.' . $minor_version; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return ''; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -198,11 +201,55 @@ class TripalWebService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    *   An associative array containing that can be converted to JSON. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public function getResponse() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $class = get_called_class(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context_filename = $class::$type . '.' . $this->getVersion(TRUE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($this->path as $element) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_filename .= '.' . $element; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context_filename .= '.context.jsonld'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context_filename = strtolower($context_filename); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context_dir = 'public://tripal/ws/context'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context_file_path = $context_dir . '/' . $context_filename; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Make sure the user directory exists 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!file_prepare_directory($context_dir, FILE_CREATE_DIRECTORY)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      throw new Exception('Could not access the tripal/ws/context directory on the server for storing web services context files.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $context = $this->resource ? $this->resource->getContext() : array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $context = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      '@context' => $context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $cfh = fopen($context_file_path, "w"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (flock($cfh, LOCK_EX)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fwrite($cfh, json_encode($context)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      flock($context_file_path, LOCK_UN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fclose($cfh); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      throw new Exception(t('Error locking file: @file.', array('@file' => $context_file_path))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $fid = db_select('file_managed', 'fm') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ->fields('fm', array('fid')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ->condition('uri', $context_file_path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ->execute() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ->fetchField(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Save the context file so Drupal can manage it and remove the file later. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!$fid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_file = new stdClass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_file->uri = $context_file_path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_file->filename = $context_filename; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_file->filemime = 'application/ld+json'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context_file->uid = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      file_save($context_file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $type = $this->resource ? $this->resource->getType() : 'unknown'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $json_ld = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '@context' => $context, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      '@context' => file_create_url($context_file_path), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       '@id' => '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       '@type' => $type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 |