Api

Version

mediamosa-30

Class

mediamosa_rest_call_openapi_mediaitems_get

Code

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_setupFALSE);
  }

  
// ------------------------------------------------------------------ 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_ID0);

    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_ID0));
    
$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'], NULLFALSE, ($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_idsFALSE$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);
    }
  }
}