|
@@ -166,6 +166,9 @@ class TripalWebService {
|
|
if (preg_match('/v(\d+)_(\d+)$/', $class, $matches)) {
|
|
if (preg_match('/v(\d+)_(\d+)$/', $class, $matches)) {
|
|
$major_version = $matches[1];
|
|
$major_version = $matches[1];
|
|
$minor_version = $matches[2];
|
|
$minor_version = $matches[2];
|
|
|
|
+ if ($sanitize) {
|
|
|
|
+ return 'v' . $major_version . '_' . $minor_version;
|
|
|
|
+ }
|
|
return 'v' . $major_version . '.' . $minor_version;
|
|
return 'v' . $major_version . '.' . $minor_version;
|
|
}
|
|
}
|
|
return '';
|
|
return '';
|
|
@@ -198,11 +201,55 @@ class TripalWebService {
|
|
* An associative array containing that can be converted to JSON.
|
|
* An associative array containing that can be converted to JSON.
|
|
*/
|
|
*/
|
|
public function getResponse() {
|
|
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 = $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';
|
|
$type = $this->resource ? $this->resource->getType() : 'unknown';
|
|
$json_ld = array(
|
|
$json_ld = array(
|
|
- '@context' => $context,
|
|
|
|
|
|
+ '@context' => file_create_url($context_file_path),
|
|
'@id' => '',
|
|
'@id' => '',
|
|
'@type' => $type,
|
|
'@type' => $type,
|
|
);
|
|
);
|