<?php

/**
 * This file is part of the ViMP Framework package.
 * (c) ViMP GmbH <info@vimp.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @package     framework
 * @subpackage  web.js
 * @author      ViMP GmbH
 * @version     SVN: $Id: embed.js.php 5080 2017-04-11 08:40:12Z sven.poeche $
 */

  require_once(dirname(__FILE__).'/../../config/ProjectConfiguration.class.php');
  require_once(dirname(__FILE__).'/../../lib/util/stToolkit.class.php');

  list($application, $env, $debug) = stToolkit::detectEnviroment();
  if (isset($_GET['webtv']) && in_array(strtolower($_GET['webtv']), array('true', 'false')) && strtolower($_GET['webtv']) == 'true') {
    $application = 'webtv';
  }
  $configuration = ProjectConfiguration::getApplicationConfiguration($application, $env, $debug);
  sfContext::createInstance($configuration);

  // load required config filters
  $filterChain = new sfFilterChain();
  $filterChain->register(new stConfigFilter(sfContext::getInstance()));
  $filterChain->register(new stDatabaseConfigFilter(sfContext::getInstance()));
  $filterChain->execute();

  // load Helpers
  stToolkit::loadCoreAndStandardHelpers();

  $request = sfContext::getInstance()->getRequest();
  #$request->setRelativeUrlRoot('');
  $request->setRequestFormat('html');

  $pathArray = _application_patchinfo();
  $pathVar = isset($GLOBALS[$pathArray]['SCRIPT_NAME']) ? 'SCRIPT_NAME' : 'ORIG_SCRIPT_NAME';
  $GLOBALS[$pathArray][$pathVar] = _application_scriptname();

  sfContext::getInstance()->getEventDispatcher()->filter(new sfEvent(sfContext::getInstance()->getRequest(), 'request.filter_parameters', sfContext::getInstance()->getRequest()->getRequestContext()), array());

  $response = sfContext::getInstance()->getResponse();
  $response->addHttpMeta('Cache-Control', 'max-age='.ini_get('session.cookie_lifetime'));
  $response->addHttpMeta('content-type', 'text/javascript');
  #$response->addHttpMeta('content-length', filesize(__FILE__));
  $response->addHttpMeta('last-modified', date('r', filemtime(__FILE__)));
  $response->addHttpMeta('expires',date('r',  time() + ini_get('session.cookie_lifetime')));

  $etag = '"'.md5(__FILE__.'-'.filesize(__FILE__).'-'.date('r',  filemtime(__FILE__))).'"';

  if(sfConfig::get('sf_etag'))
  {
    $response->setHttpHeader('ETag', $etag);
    if($request->getHttpHeader('IF_NONE_MATCH') == $etag)
    {
      $response->setStatusCode(304);
      $response->setHeaderOnly();

      if (sfConfig::get('sf_logging_enabled'))
      {
        sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(null, 'application.log', array('ETag matches If-None-Match (send 304)')));
      }
      $response->send();
    }
  }
  $response->sendHttpHeaders();

  $playlistMode = $request->getParameter('mode', 'media');
  $userId = $playlistId = $categoryId = 0;

  // If WebTV is disabled, we always assume media mode
  if (stConfig::get('webtv_mode') == stWebTV::MODE_OFF || !in_array(Media::TYPE_VIDEO, array_keys(Media::getSupportedTypes())))
  {
    $playlistMode = 'media';
  }

  $autoPlay = stConfig::get(($application == 'webtv' ? 'webtv_' : 'embed_').'player_autostart') ? 'true' : 'false';
  $autoLightsOff = stConfig::get(($application == 'webtv' ? 'webtv_' : 'embed_').'player_autolightsoff') ? 'true' : 'false';

  if ($request->hasParameter('autoplay') && in_array(strtolower($request->getParameter('autoplay')), array('true', 'false')))
  {
    $autoPlay = strtolower($request->getParameter('autoplay'));
  }
  if ($request->hasParameter('autolightsoff') && in_array(strtolower($request->getParameter('autolightsoff')), array('true', 'false')))
  {
    $autoLightsOff = strtolower($request->getParameter('autolightsoff'));
  }

  switch (strtolower($playlistMode))
  {
    case 'userfavorites':
      $userId = $request->getParameter('id');

      $user = UserPeer::retrieveByPK($userId);

      $criteria = new Criteria();
      $criteria->add(
        $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO)->addAnd(
          $criteria->getNewCriterion(MediaPeer::MEDIASUBTYPE, Media::SUB_TYPE_DEFAULT)->addAnd(
            $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO." IN (".implode(",", array_keys(Media::getSupportedTypes())).")", Criteria::CUSTOM)
          )
        )
      );
      $media = @array_shift($user->getFavMedias($criteria));
      break;

    case 'usermedia':
      $userId = $request->getParameter('id');

      $user = UserPeer::retrieveByPK($userId);

      $criteria = new Criteria();
      $criteria->add(
        $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO)->addAnd(
          $criteria->getNewCriterion(MediaPeer::MEDIASUBTYPE, Media::SUB_TYPE_DEFAULT)->addAnd(
            $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO." IN (".implode(",", array_keys(Media::getSupportedTypes())).")", Criteria::CUSTOM)
          )
        )
      );
      $media = @array_shift($user->getMedias($criteria));
      break;

    case 'playlist':
      $playlistId = $request->getParameter('id');

      $playlist = PlaylistPeer::retrieveByPK($playlistId);

      $criteria = new Criteria();
      $criteria->add(
        $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO)->addAnd(
          $criteria->getNewCriterion(MediaPeer::MEDIASUBTYPE, Media::SUB_TYPE_DEFAULT)->addAnd(
            $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO." IN (".implode(",", array_keys(Media::getSupportedTypes())).")", Criteria::CUSTOM)
          )
        )
      );
      $media = @array_shift($playlist->getMedias($criteria));
      break;

    case 'category':
      $categoryId = $request->getParameter('id');

      $category = CategoryPeer::retrieveByPK($categoryId);

      $criteria = new Criteria();
      $criteria->add(
        $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO)->addAnd(
          $criteria->getNewCriterion(MediaPeer::MEDIASUBTYPE, Media::SUB_TYPE_DEFAULT)->addAnd(
            $criteria->getNewCriterion(MediaPeer::MEDIATYPE, Media::TYPE_VIDEO." IN (".implode(",", array_keys(Media::getSupportedTypes())).")", Criteria::CUSTOM)
          )
        )
      );
      $media = @array_shift($category->getMedias($criteria));
      break;

    default:
      MediaPeer::getAll(true);
      if($request->hasParameter('key'))
      {
        $media = MediaPeer::retrieveByKey($request->getParameter('key'));
      }
      elseif($request->hasParameter('id'))
      {
        $media = MediaPeer::retrieveByPK($request->getParameter('id'));
      }
      elseif($request->hasParameter('mediaid'))
      {
        $media = MediaPeer::retrieveByPK($request->getParameter('mediaid'));
      }
      break;
  }

  if(!$media)
  {
    $media = new Media();
    $media->setMediatype(Media::TYPE_VIDEO);
  }

  $width  = $request->hasParameter('width') ? $request->getParameter('width') : null;
  $height = $request->hasParameter('height') ? $request->getParameter('height') : null;

  $src_width = $media->getPlayerWidth($embeded, $application);
  $src_height = $media->getPlayerHeight($embeded, $application);

  if(null !== $width && null !== $height)
  {
    $width = (int) $width;
    $height = (int) $height + stConfig::get($prefix.'player_controlbar_height');
  }
  elseif(null !== $width)
  {
    $width = (int) $width;
    $height = (int) round(($width / $src_width) * $src_height);
    $height+= stConfig::get($prefix.'player_controlbar_height');
  }
  elseif(null !== $height)
  {
    $height = (int) $height;
    $width = (int) round(($height / $src_height) * $src_width);
    $height+= stConfig::get($prefix.'player_controlbar_height');
  }
  else
  {
    $width = $src_width;
    $height = $src_height;
  }

  $params = array(
    'media' => $media,
    'embeded' => true,
    'width' => $width,
    'height' => $height,
    'autoplay' => $autoPlay,
    'autolightsoff' => $autoLightsOff,
  );

  if ($application == 'webtv')
  {
    // WebTV mode, set additional options
    $params['options'] = array(
      'mode' => $playlistMode,
      'userid' => $userId,
      'playlistid' => $playlistId,
      'categoryid' => $categoryId,
    );
  }

  if($request->hasParameter('customparam'))
  {
    $params['customparam'] = $request->getParameter('customparam');
  }

  $flash_html = get_component('media', $application == 'webtv' ? 'player' : $media->getComponentString('player'), $params);
  $flash_html = str_replace(array("\n", "\r", "'"), array('\n', '\r', "\\'"), $flash_html);
  $flash_html = '<div style="width: '.$params['width'].'px; height: '.$params['height'].'px;">'.$flash_html.'</div>';

  $relative_root = $request->getRelativeUrlRoot();
  $request->setRelativeUrlRoot('');
  $swfobject_path = sfConfig::get('sf_web_dir').javascript_path('swfobject', false);
  $request->setRelativeUrlRoot($relative_root);

?>
// Version SVN: $Id: embed.js.php 5080 2017-04-11 08:40:12Z sven.poeche $
if (typeof swfobject == 'undefined') {
  <?php print file_get_contents($swfobject_path)."\n"; ?>
}
document.write('<?php print $flash_html;  ?>');
