Api
Version
mediamosa-30Class
mediamosa_rest_call_openapi_mediaitems_getCode
File: /sites/all/modules/mediamosa/modules/openapi/mediamosa_openapi.rest.class.inc
<?php
/**
* URI: /openapi/mediaItems/$items_user_id/$group_id
* Method: GET
*/
class mediamosa_rest_call_openapi_mediaitems_get 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';
// Collection Request Parameters.
const REQUEST_PARAMETER_COUNT_VALUE = 'Request-Parameter-Count-Value';
const REQUEST_PARAMETER_FILTERBY_VALUE = 'Request-Parameter-FilterBy-Value';
const REQUEST_PARAMETER_FILTEROP_VALUE = 'Request-Parameter-FilterOp-Value';
const REQUEST_PARAMETER_FILTERVALUE_VALUE = 'Request-Parameter-FilterValue-Value';
const REQUEST_PARAMETER_SORTORDER_VALUE = 'Request-Parameter-SortOrder-Value';
const REQUEST_PARAMETER_STARTINDEX_VALUE = 'Request-Parameter-StartIndex-Value';
// Call related paramters.
const ITEMS_USER_ID = 'items_user_id';
const GROUP_ID = 'group_id';
const ALBUM_ID = 'album_id';
const APPID = 'appid';
const MEDIAITEM_ID = 'mediaitem_id';
// ------------------------------------------------------------------ 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('Optional parameter to specify the response output format.'),
),
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('Optional parameter to specify the response output format.'),
),
// Collection Request Parameters.
self::REQUEST_PARAMETER_COUNT_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_LIMIT,
self::VAR_DESCRIPTION => 'The page size for a paged collection.',
self::VAR_DEFAULT_VALUE => mediamosa_settings::LIMIT_DEFAULT,
self::VAR_RANGE_START => 0,
self::VAR_RANGE_END => mediamosa_settings::LIMIT_MAX,
),
self::REQUEST_PARAMETER_FILTERBY_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_ALPHA,
self::VAR_DESCRIPTION => 'For a collection, return entries filtered by the given field name.',
),
self::REQUEST_PARAMETER_FILTEROP_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'The operation to use when filtering a collection by a field specified in "filterBy", defaults to "contains".',
self::VAR_ALLOWED_VALUES => array(
mediamosa_rest_call::FILTEROP_CONTAINS,
mediamosa_rest_call::FILTEROP_EQUALS,
mediamosa_rest_call::FILTEROP_STARTSWITH,
mediamosa_rest_call::FILTEROP_PRESENT,
),
self::VAR_DEFAULT_VALUE => mediamosa_rest_call::FILTEROP_CONTAINS,
),
self::REQUEST_PARAMETER_FILTERVALUE_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'The value to use when filtering a collection.',
),
self::REQUEST_PARAMETER_SORTORDER_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
self::VAR_DESCRIPTION => 'Can either be "ascending" or "descending", defaults to ascending. Used to sort objects in a collection.',
self::VAR_ALLOWED_VALUES => array(
mediamosa_rest_call::SORTORDER_ASCENDING,
mediamosa_rest_call::SORTORDER_DESCENDING,
),
self::VAR_DEFAULT_VALUE => mediamosa_rest_call::SORTORDER_ASCENDING,
),
self::REQUEST_PARAMETER_STARTINDEX_VALUE => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_UINT,
self::VAR_DESCRIPTION => 'Index into a paged collection.',
self::VAR_DEFAULT_VALUE => 0,
),
// 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::ALBUM_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_COLLECTION_ID,
self::VAR_DESCRIPTION => 'The ID of the album whose MediaItems are to be returned. ',
),
self::APPID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_APP_ID,
self::VAR_DESCRIPTION => mediamosa::t('Specifies that the response should only contain MediaItems generated by the given appId.'),
),
self::MEDIAITEM_ID => array(
self::VAR_TYPE => mediamosa_sdk::TYPE_MEDIAFILE_ID,
self::VAR_DESCRIPTION => 'MediaItem ID specifying the MediaItems to retrieve.',
),
)
);
// 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);
$cql = array();
// Get params.
$user_id = $this->get_param_value(self::USER_ID);
// Standard Request Parameters.
$since = addslashes($this->get_param_value(self::REQUEST_PARAMETER_UPDATEDSINCE_VALUE));
$alt = $this->get_param_value(self::REQUEST_PARAMETER_FORMAT_VALUE);
// Collection Request Parameters.
$limit = $this->get_param_value(self::REQUEST_PARAMETER_COUNT_VALUE);
$RequestParameterFilterByValue = addslashes($this->get_param_value(self::REQUEST_PARAMETER_FILTERBY_VALUE));
$RequestParameterFilterOpValue = $this->get_param_value(self::REQUEST_PARAMETER_FILTEROP_VALUE);
$RequestParameterFilterValueValue = addslashes($this->get_param_value(self::REQUEST_PARAMETER_FILTERVALUE_VALUE));
$order_direction = $this->get_param_value(self::REQUEST_PARAMETER_SORTORDER_VALUE);
$offset = $this->get_param_value(self::REQUEST_PARAMETER_STARTINDEX_VALUE);
// Call related paramters.
$user_id_parameter = addslashes($this->get_param_value(self::ITEMS_USER_ID));
$group_id = addslashes($this->get_param_value(self::GROUP_ID));
$asset_id = addslashes($this->get_param_value(self::ALBUM_ID));
$appid_parameter = addslashes($this->get_param_value(self::APPID));
$mediafile_id = addslashes($this->get_param_value(self::MEDIAITEM_ID));
if ($since) {
$cql[] = 'videotimestamp >= "' . $since . '"';
}
// We don't know, who the owner the page (USER_OWNER), that the current user visit.
// The klient application should change it to the appropriate user.
if ($user_id_parameter && $user_id_parameter != self::USER_OWNER) {
// Me and viewer is the current user.
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';
}
if ($user_id_parameter) {
$cql[] = 'owner_id="' . $user_id_parameter . '"';
}
}
if ($group_id) {
if ($user_id_parameter && $user_id_parameter!= self::USER_OWNER && $group_id == self::GROUP_SELF) {
// Get the group_id.
$a_user = mediamosa_user::get($user_id_parameter, $app_id);
if (isset($a_user['group_id']) && !empty($a_user['group_id'])) {
$group_id = mediamosa_user::get_primary_group($app_id, $user_id_parameter);
$cql[] = 'group_id="' . $group_id . '"';
}
}
if ($group_id != self::GROUP_SELF) {
$cql[] = 'group_id="' . $group_id . '"';
}
}
if ($asset_id) {
$cql[] = 'asset_id="' . $asset_id . '"';
}
if ($appid_parameter) {
$cql[] = 'app_id="' . $appid_parameter . '"';
}
if ($mediafile_id) {
$cql[] = 'mediafile_id="' . $mediafile_id . '"';
}
// Gluing CQL.
$cql = implode(' AND ', $cql);
// TODO: Message collection fields. Should we do it?
// REQUEST_PARAMETER_FILTERBY_VALUE, REQUEST_PARAMETER_FILTEROP_VALUE, REQUEST_PARAMETER_FILTERVALUE_VALUE
// Add possible order by to the CQL.
// Fixed order by. There is not parameter for order by, just for order direction.
$order_by = 'title';
if ($order_by != '') {
$cql .= (!empty($cql) ? ' ' : '') . 'sortby ' . $order_by;
$cql .= (empty($order_direction) ? '' : '/' . (mediamosa_unicode::strtolower($order_direction) == mediamosa_type::ORDER_DIRECTION_ASCENDING ? 'ascending' : 'descending'));
}
$asset_ids = mediamosa_search::asset(array(
'app_ids' => $app_ids,
'cql' => $cql,
'limit' => $limit,
'offset' => $offset,
'show_deleted' => FALSE,
));
// Fill response.
$acl_user_id = '';
$granted = '';
$acl_group_ids = array();
$acl_domain = '';
$acl_realm = '';
$show_stills = TRUE;
$show_collections = FALSE;
$add_has_streamable_mediafiles = FALSE;
$items = mediamosa_asset::asset_collect(
$asset_ids['asset_ids'],
$app_ids,
$acl_user_id,
$granted,
$acl_group_ids,
$acl_domain,
$acl_realm,
$this->get_param_value(self::IS_APP_ADMIN),
$show_stills,
$show_collections,
$add_has_streamable_mediafiles
);
foreach ($items as $item) {
// Fix app_id.
$app_id = in_array($item['app_id'], $app_ids) ? $item['app_id'] : reset($app_ids);
// Add mediafiles.
$mediafile_ids = mediamosa_asset_mediafile::mediafiles_search($item['asset_id'], NULL, FALSE, ($item['app_id'] == $app_id ? array() : $app_ids));
// Now enrich the output with mediafiles.
$show_stills = TRUE;
$item['mediafiles'] = mediamosa_asset_mediafile::enrich_response_mediafile($mediafile_ids, $app_ids, FALSE, $show_stills);
// Add streamable setting on asset.
$item['has_streamable_mediafiles'] = mediamosa_asset::enrich_response_has_streamable_mediafiles($item['mediafiles']['mediafile']) ? 'TRUE' : 'FALSE';
if (!empty($item['mediafiles']['mediafile']) && is_array($item['mediafiles']['mediafile'])) {
$mediafile = reset($item['mediafiles']['mediafile']);
if (!empty($mediafile['still']) && is_array($mediafile['still'])) {
$still = reset($mediafile['still']);
}
$item['mediaitem'] = array(
'album_id' => $item['asset_id'],
'created' => !empty($item['qualified_dublin_core']['created']) ? $item['qualified_dublin_core']['created'] : NULL,
'description' => !empty($item['dublin_core']['description']) ? $item['dublin_core']['description'] : NULL,
'duration' => !empty($mediafile['metadata']['file_duration']) ? $mediafile['metadata']['file_duration'] : NULL,
'file_size' => !empty($mediafile['metadata']['filesize']) ? $mediafile['metadata']['filesize'] : NULL,
'id' => !empty($mediafile['mediafile_id']) ? $mediafile['mediafile_id'] : NULL,
'language' => !empty($item['dublin_core']['language']) ? $item['dublin_core']['language'] : NULL,
'last_updated' => !empty($mediafile['changed']) ? $mediafile['changed'] : NULL,
'location' => NULL,
'mime_type' => !empty($mediafile['metadata']['mime_type']) ? $mediafile['metadata']['mime_type'] : NULL,
'num_comments' => NULL,
'num_views' => !empty($item['viewed']) ? $item['viewed'] : NULL,
'num_votes' => NULL,
'rating' => NULL,
'start_time' => NULL,
'tagged_people' => NULL,
'tags' => !empty($mediafile['tag']) ? array($mediafile['tag']) : NULL,
'still_url' => !empty($still['still_ticket']) ? $still['still_ticket'] : NULL,
'title' => !empty($item['dublin_core']['title'][0]) ? $item['dublin_core']['title'][0] : NULL,
'type' => !empty($item['dublin_core']['type'][0]) ? $item['dublin_core']['type'][0] : NULL,
'url' => !empty($mediafile['uri']) ? $mediafile['uri'] : NULL,
);
}
$mediamosa->add_item($item);
}
}
}