Api

Version

mediamosa-30

Class

mediamosa_rest_call_delete_mediafiles

Code

File: /sites/all/modules/mediamosa/modules/asset/mediafile/mediamosa_asset_mediafile.rest.class.inc
<?php

/**
 * URI: /mediafile/$mediafile_id/delete
 * Method: GET
 */
class mediamosa_rest_call_delete_mediafiles extends mediamosa_rest_call {
  
// ------------------------------------------------------------------ Consts.
  // Rest vars;
  
const MEDIAFILE_ID 'mediafile_id';
  const 
USER_ID 'user_id';
  const 
DELETE 'delete';
  const 
NEW_ORIGINAL 'new_original';
  const 
DELETE_CASCADE 'cascade';

  
// ------------------------------------------------------------------ Public Functions.
  
public function get_var_setup() {
    
$a_var_setup = array();

    
$a_var_setup = array(
      
self::VARS => array(
        
self::MEDIAFILE_ID => array(
          
self::VAR_TYPE => mediamosa_sdk::TYPE_MEDIAFILE_ID,
          
self::VAR_DESCRIPTION => 'The ID of the mediafile to delete.',
          
self::VAR_IS_REQUIRED => self::VAR_IS_REQUIRED_YES,
        ),
        
self::USER_ID => array(
          
self::VAR_TYPE => mediamosa_sdk::TYPE_USER_ID,
          
self::VAR_DESCRIPTION => 'The owner ID to match.',
          
self::VAR_IS_REQUIRED => self::VAR_IS_REQUIRED_YES,
        ),
        
self::DELETE => array(
          
self::VAR_TYPE => mediamosa_sdk::TYPE_STRING,
          
self::VAR_DESCRIPTION => 'Put on cascade to delete its stills as well.',
          
self::VAR_ALLOWED_VALUES => array('cascade''')
        ),
        
self::NEW_ORIGINAL => array(
          
self::VAR_TYPE => mediamosa_sdk::TYPE_MEDIAFILE_ID,
          
self::VAR_DESCRIPTION => 'The ID of the new original mediafile.',
        ),
      )
    );

    
// Enrich with required REST vars.
    
return self::get_var_setup_default($a_var_setup);
  }

  public function 
do_call() {
    
$o_mediamosa mediamosa::get();

    
$app_ids $this->get_param_value_app();
    
$app_id reset($app_ids);

    
$mediafile_id $this->get_param_value(self::MEDIAFILE_ID);
    
$user_id $this->get_param_value(self::USER_ID);
    
$is_app_admin $this->get_param_value(self::IS_APP_ADMIN);
    
$delete $this->get_param_value(self::DELETE);
    
$user_id $this->get_param_value(self::USER_ID);
    
$new_original $this->get_param_value(self::NEW_ORIGINAL);

    
// Test webservice.
    
mediamosa_webservice_app::webservice_must_be_active(mediamosa_webservice_app::HANDLE_MEDIA_MANAGEMENT$app_ids);

    
// Must exists.
    
$mediafile mediamosa_asset_mediafile::must_exists($mediafile_id);

    
// Does the user have access?
    
mediamosa_acl::owner_check(
      
$app_id,
      
$user_id,
      
$mediafile[mediamosa_asset_mediafile_db::APP_ID],
      
$mediafile[mediamosa_asset_mediafile_db::OWNER_ID]
    );

    
// Check the new original.
    
if ($new_original) {
      
// Must exists.
      
$mediafile_new_original mediamosa_asset_mediafile::must_exists($new_original);

      
// Does the user have access?
      
mediamosa_acl::owner_check(
        
$app_id,
        
$user_id,
        
$mediafile_new_original[mediamosa_asset_mediafile_db::APP_ID],
        
$mediafile_new_original[mediamosa_asset_mediafile_db::OWNER_ID]
      );

      
// Check whether the mediafile is original..
      
if ($mediafile[mediamosa_asset_mediafile_db::IS_ORIGINAL_FILE] != mediamosa_asset_mediafile_db::IS_ORIGINAL_FILE_TRUE) {
        throw new 
mediamosa_exception_error(mediamosa_error::ERRORCODE_MEDIAFILE_IS_NOT_ORIGINAL, array('@mediafile_id' => $mediafile_id));
      }

      
// Check whether the mediafile is parent of new original mediafile.
      
if ($mediafile_new_original[mediamosa_asset_mediafile_db::MEDIAFILE_ID_SOURCE] != $mediafile_id) {
        throw new 
mediamosa_exception_error(mediamosa_error::ERRORCODE_INVALID_MEDIAFILE_RELATION, array('@mediafile_id' => $mediafile_id'@new_original' => $new_original));
      }
    }

    
// Check if this mediafile is the only one under a sub-asset.
    
$query mediamosa_db::db_select(mediamosa_asset_db::TABLE_NAME'a');
    
$query->fields('a', array(mediamosa_asset_db::PARENT_IDmediamosa_asset_db::ID));
    
$query->join(mediamosa_asset_mediafile_db::TABLE_NAME'mf'strtr('a.#asset_id = mf.#asset_id', array('#asset_id' => mediamosa_asset_db::ID)));
    
$query->condition('mf.' mediamosa_asset_mediafile_db::ID$mediafile_id);
    
$a_asset $query->execute()->fetchAssoc();

    
// Count the number of mediafiles.
    
$query mediamosa_db::db_select(mediamosa_asset_mediafile_db::TABLE_NAME'mf');
    
$query->fields('mf', array(mediamosa_asset_mediafile_db::ID));
    
$query->condition('mf.' mediamosa_asset_mediafile_db::ASSET_ID$a_asset[mediamosa_asset_db::ID]);
    
$query->condition('mf.' mediamosa_asset_mediafile_db::IS_STILLmediamosa_asset_mediafile_db::IS_STILL_FALSE);
    
$count $query->countQuery()->execute()->fetchField();

    
// Moet een subasset zijn en alleen deze mediafile als kind.
    
$delete_asset = (!is_null($a_asset['parent_id']) && $count == 1);

    if (
$delete == self::DELETE_CASCADE) {
      
// Deletes the stills.
      
$query mediamosa_db::db_select(mediamosa_asset_mediafile_db::TABLE_NAME'mf');
      
$query->fields('mf', array(mediamosa_asset_mediafile_db::ASSET_ID));
      
$query->condition('mf.' mediamosa_asset_mediafile_db::ID$mediafile_id);
      
$query->condition('mf.' mediamosa_asset_mediafile_db::IS_STILLmediamosa_asset_mediafile_db::IS_STILL_FALSE);
      
$asset_id $query->execute()->fetchField();

      
mediamosa_asset_mediafile_still::delete($asset_id$mediafile_id);
    }

    
// Delete the mediafile.
    
mediamosa_asset_mediafile::delete($mediafile_id);

    if (
$delete_asset) {
      
mediamosa_asset::delete($a_asset[mediamosa_asset_db::ID]);
    }

    
// Set the new original mediafile.
    
if ($new_original) {
      
mediamosa_asset_mediafile::set_new_original($mediafile_id$new_original);
    }

    
$o_mediamosa->set_result_okay();

    
// update de timestamps van de asset
    
mediamosa_asset::update_asset_timestamps($a_asset[mediamosa_asset_db::ID]);
  }
}