Api
Version
mediamosa-30Class
mediamosa_rest_call_openapi_mediaitems_postCode
File: /sites/all/modules/mediamosa/modules/openapi/mediamosa_openapi.rest.class.inc
<?php
/**
* URI: /openapi/mediaItems/$items_user_id/$group_id/$album
* Method: POST
*/
class mediamosa_rest_call_openapi_mediaitems_post extends mediamosa_rest_call {
// ------------------------------------------------------------------ Consts.
// Rest vars;
const USER_ID = 'user_id';
// Standard Request Parameters.
const REQUEST_PARAMETER_UPDATEDSINCE_VALUE = 'Request-Parameter-UpdatedSince-Value';
const REQUEST_PARAMETER_FORMAT_VALUE = 'Request-Parameter-Format-Value';
const REQUEST_PARAMETER_FORMET_VALUE = 'Request-Parameter-Formet-Value';
// Call related paramters.
const ITEMS_USER_ID = 'items_user_id';
const GROUP_ID = 'group_id';
const ALBUM_ID = 'album_id';
// Data parameters.
const MEDIAITEM_ID = 'id';
//
const CREATED = 'created';
const DESCRIPTION = 'description';
const DURATION = 'duration';
const FILE_SIZE = 'file_size';
const LANGUAGE = 'language';
const LAST_UPDATED = 'last_updated';
const LOCATION = 'location';
const MIME_TYPE = 'mime_type';
const NUM_COMMENTS = 'num_comments';
const NUM_VIEWS = 'num_views';
const NUM_VOTES = 'num_votes';
const RATING = 'rating';
const START_TIME = 'start_time';
const TAGGED_PEOPLE = 'tagged_people';
const TAGS = 'tags';
const STILL_URL = 'still_url';
const TITLE = 'title';
const TYPE = 'type';
const URL = 'url';
// ------------------------------------------------------------------ Functions (public).
public function get_var_setup() {
$a_var_setup = array(
self::VARS => array(
self::USER_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_USER_ID,
self::VAR_DESCRIPTION => 'User id.',
),
// Standard Request Parameters.
self::REQUEST_PARAMETER_UPDATEDSINCE_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_DATETIME_UTC,
self::VAR_DESCRIPTION => 'Only return items whose updated date & time is equal to or more recent then the specified value (e.g. 2008-01-23T04:56:22Z).',
),
self::REQUEST_PARAMETER_FORMAT_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_RESPONSE_TYPE,
self::VAR_IS_REQUIRED => self::VAR_IS_REQUIRED_NO,
self::VAR_ALLOWED_VALUES => array(
mediamosa_response::RESPONSE_TYPE_XML,
mediamosa_response::RESPONSE_TYPE_ATOM,
mediamosa_response::RESPONSE_TYPE_RSS,
mediamosa_response::RESPONSE_TYPE_JSON,
),
self::VAR_DESCRIPTION => mediamosa::t('The response type paramter.'),
),
self::REQUEST_PARAMETER_FORMET_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_RESPONSE_TYPE,
self::VAR_IS_REQUIRED => self::VAR_IS_REQUIRED_NO,
self::VAR_ALLOWED_VALUES => array(
mediamosa_response::RESPONSE_TYPE_XML,
mediamosa_response::RESPONSE_TYPE_ATOM,
mediamosa_response::RESPONSE_TYPE_RSS,
mediamosa_response::RESPONSE_TYPE_JSON,
),
self::VAR_DESCRIPTION => mediamosa::t('The response type paramter.'),
),
// Call related paramters.
self::ITEMS_USER_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_USER_ID,
self::VAR_DESCRIPTION => 'The person whose MediaItems are to be returned. Defaults to "@me", indicating the currently authenticated user.',
self::VAR_IS_REQUIRED => self::VAR_IS_REQUIRED_YES,
self::VAR_RANGE_END => mediamosa_user_db::NAME_LENGTH,
self::VAR_DEFAULT_VALUE => self::USER_ME,
),
self::GROUP_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_GROUP_ID,
self::VAR_DESCRIPTION => 'The group ID of the group of users whose MediaItems are to be returned. Defaults to "@self".',
self::VAR_RANGE_END => mediamosa_user_group_db::GROUP_ID_LENGTH,
self::VAR_DEFAULT_VALUE => self::GROUP_SELF,
self::VAR_ALLOWED_VALUES => array(
self::GROUP_SELF,
),
),
self::ALBUM_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_COLLECTION_ID,
self::VAR_DESCRIPTION => 'Album to which the media item belongs. ',
),
// Data parameters.
self::MEDIAITEM_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_MEDIAFILE_ID,
self::VAR_DESCRIPTION => 'Id Associated with the media item.',
),
//
self::CREATED => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_DATETIME_UTC,
self::VAR_DESCRIPTION => 'Creation datetime associated with the media item - assigned by container in UTC (e.g. 2008-01-23T04:56:22Z).',
),
self::DESCRIPTION => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Description of the media item.',
),
self::DURATION => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_INT,
self::VAR_DESCRIPTION => 'For audio/video clips - playtime length in seconds. set to -1/not defined if unknown.',
self::VAR_DEFAULT_VALUE => -1,
),
self::FILE_SIZE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_INT,
self::VAR_DESCRIPTION => 'Number of bytes (set to -1/undefined if unknown).',
self::VAR_DEFAULT_VALUE => -1,
),
self::LANGUAGE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_LANGUAGE_CODE_ISO_639_3,
self::VAR_DESCRIPTION => 'Language associated with the media item in ISO 639-3 format.',
),
self::LAST_UPDATED => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_DATETIME_UTC,
self::VAR_DESCRIPTION => 'Update datetime associated with the media item - assigned by container in UTC (e.g. 2008-01-23T04:56:22Z).',
),
self::LOCATION => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Location corresponding to the media item.',
),
self::MIME_TYPE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_MIMETYPE,
self::VAR_DESCRIPTION => 'The MIME type of media, specified as a string.',
),
self::NUM_COMMENTS => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_UINT,
self::VAR_DESCRIPTION => 'Number of comments on the media item.',
),
self::NUM_VIEWS => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_UINT,
self::VAR_DESCRIPTION => 'Number of views for the media item.',
),
self::NUM_VOTES => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_UINT,
self::VAR_DESCRIPTION => 'Number of votes received for voting.',
),
self::RATING => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_UINT,
self::VAR_DESCRIPTION => 'Average rating of the media item on a scale of 0-10.',
self::VAR_RANGE_START => 0,
self::VAR_RANGE_END => 10,
),
self::START_TIME => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_DATETIME_UTC,
self::VAR_DESCRIPTION => 'For streaming/live content, datetime when the content is available (e.g. 2008-01-23T04:56:22Z).',
),
self::TAGGED_PEOPLE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_USER_ID,
self::VAR_DESCRIPTION => 'Array of string (IDs) of people tagged in the media item.',
self::VAR_RANGE_END => mediamosa_user_db::NAME_LENGTH,
self::VAR_IS_ARRAY => self::VAR_IS_ARRAY_YES,
),
self::TAGS => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Tags associated with this media item.',
self::VAR_IS_ARRAY => self::VAR_IS_ARRAY_YES,
),
self::STILL_URL => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'URL to a still image of the media item.',
),
self::TITLE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Describing the media item.',
),
self::TYPE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_ALPHA,
self::VAR_DESCRIPTION => 'The type of media, specified as a MediaItem.Type object.',
self::VAR_ALLOWED_VALUES => array(
// We don't support others, just video type.
mediamosa_rest_call::MEDIAITEM_TYPE,
),
),
self::URL => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Specifying the URL where the media can be found.',
),
)
);
// Enrich with required REST vars.
return self::get_var_setup_default($a_var_setup, FALSE);
}
// ------------------------------------------------------------------ Override Validate Rest Args.
protected function validate_rest_args(array $a_var_setup) {
// Validate first.
parent::validate_rest_args($a_var_setup);
$app_id = variable_get(mediamosa_settings::MEDIAMOSA_OPENAPI_OPEN_APP_ID, 0);
if (!$app_id) {
throw new mediamosa_exception_error(mediamosa_error::ERRORCODE_OPENAPI_MISSING_OPEN_APP_ID);
}
}
// ------------------------------------------------------------------ Do Call.
public function do_call() {
$mediamosa = mediamosa::get();
$app_ids = array(variable_get(mediamosa_settings::MEDIAMOSA_OPENAPI_OPEN_APP_ID, 0));
$app_id = reset($app_ids);
// Get params.
$user_id = $this->get_param_value(self::USER_ID);
// Standard Request Parameters.
$since = $this->get_param_value(self::REQUEST_PARAMETER_UPDATEDSINCE_VALUE);
$alt = $this->get_param_value(self::REQUEST_PARAMETER_FORMAT_VALUE);
// Call related paramters.
$user_id_parameter = addslashes($this->get_param_value(self::ITEMS_USER_ID));
if ($user_id_parameter == self::USER_ME || $user_id_parameter == self::USER_VIEWER) {
$user_id_parameter = $user_id;
}
if (!$user_id_parameter) {
$user_id_parameter = 'anonymous';
}
$group_id = addslashes($this->get_param_value(self::GROUP_ID));
$asset_id = addslashes($this->get_param_value(self::ALBUM_ID));
$mediafile_id = addslashes($this->get_param_value(self::MEDIAITEM_ID));
// Data parameters.
$created = $this->get_param_value(self::CREATED);
$description = strip_tags(addslashes($this->get_param_value(self::DESCRIPTION)));
$duration = $this->get_param_value(self::DURATION);
$file_size = $this->get_param_value(self::FILE_SIZE);
$language = $this->get_param_value(self::LANGUAGE);
$last_updated = $this->get_param_value(self::LAST_UPDATED);
$location = strip_tags(addslashes($this->get_param_value(self::LOCATION)));
$mime_type = strip_tags(addslashes($this->get_param_value(self::MIME_TYPE)));
$num_comments = $this->get_param_value(self::NUM_COMMENTS);
$num_views = $this->get_param_value(self::NUM_VIEWS);
$num_votes = $this->get_param_value(self::NUM_VOTES);
$rating = $this->get_param_value(self::RATING);
$start_time = $this->get_param_value(self::START_TIME);
$tagged_people = $this->get_param_value(self::TAGGED_PEOPLE);
if ($tagged_people) {
foreach ($tagged_people as $key => $value) {
$tagged_people[$key] = strip_tags(addslashes($value));
}
}
$tags = $this->get_param_value(self::TAGS);
if ($tags) {
foreach ($tags as $key => $value) {
$tags[$key] = strip_tags(addslashes($value));
}
}
$still_url = strip_tags(addslashes($this->get_param_value(self::STILL_URL)));
$title = strip_tags(addslashes($this->get_param_value(self::TITLE)));
$type = $this->get_param_value(self::TYPE);
$url = strip_tags(addslashes($this->get_param_value(self::URL)));
// Test webservice.
mediamosa_webservice_app::webservice_must_be_active(mediamosa_webservice_app::HANDLE_MEDIA_MANAGEMENT, $app_ids);
// Must exists.
$asset = mediamosa_asset::must_exists($asset_id);
// Check owner of parent asset, need ownership.
mediamosa_acl::owner_check($app_id, $user_id_parameter, $asset[mediamosa_asset_db::APP_ID], $asset[mediamosa_asset_db::OWNER_ID]);
// Set mediafile ID to something if not present.
// Commented out, because we don't want, that the user can set the mediafile_id.
// Otherwise we have to check, if the mediafile with mediafile_id is not exists.
//if (!$mediafile_id) {
$mediafile_id = mediamosa_db::uuid($app_id);
//}
// Fields to insert.
$fields = array(
mediamosa_asset_mediafile_db::GROUP_ID => NULL,
mediamosa_asset_mediafile_db::IS_DOWNLOADABLE => mediamosa_asset_mediafile_db::IS_DOWNLOADABLE_FALSE,
mediamosa_asset_mediafile_db::IS_ORIGINAL_FILE => mediamosa_asset_mediafile_db::IS_ORIGINAL_FILE_TRUE,
mediamosa_asset_mediafile_db::SANNAS_MOUNT_POINT => NULL,
mediamosa_asset_mediafile_db::FILENAME => NULL,
mediamosa_asset_mediafile_db::URI => $url,
mediamosa_asset_mediafile_db::MEDIAFILE_ID_SOURCE => NULL,
mediamosa_asset_mediafile_db::TAG => $tags ? implode(', ', $tags) : '',
);
// Insert the mediafile.
$mediafile_id = mediamosa_asset_mediafile::create($mediafile_id, $app_id, $asset_id, $user_id_parameter, $fields);
// Create metadata.
// Metadata function call parameters.
$action = 'replace';
// Get full definitions.
$metadata_definitions_full = mediamosa_asset_metadata_property::get_metadata_properties_full();
// Mapping metadata parameters.
$params = array(
'created' => array($created),
'description' => array($description),
'language' => array($language),
'title' => array($title),
// Skipped fields, because we don't have metadata equivalients.
// $duration, $file_size, $last_updated, $location, $mime_type, $num_comments, $num_views, $num_votes, $rating, $start_time, $tagged_people, $still_url, $type,
);
// Create the metadata.
$value_set = mediamosa_asset_metadata::metadata_create($asset_id, $metadata_definitions_full, $params, $action);
// Create response.
$response = array();
$response['asset_id'] = $asset_id;
$response['mediafile_id'] = $mediafile_id;
// Return what has been inserted into the metadata.
foreach ($value_set as $name => $value) {
$response[$name] = $value;
}
$response['mediaitem'] = array(
'album_id' => $asset_id,
'created' => $created,
'description' => $description,
'duration' => NULL,
'file_size' => NULL,
'id' => $mediafile_id,
'language' => $language,
'last_updated' => NULL,
'location' => NULL,
'mime_type' => NULL,
'num_comments' => NULL,
'num_views' => NULL,
'num_votes' => NULL,
'rating' => NULL,
'start_time' => NULL,
'tagged_people' => NULL,
'tags' => !empty($tags) ? $tags : NULL,
'still_url' => NULL,
'title' => $title,
'type' => NULL,
'url' => $url,
);
$mediamosa->add_item($response);
}
}