Base for a static organization website

MediaView.php 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * Methods to display or download any type of file
  4. *
  5. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  6. * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  7. *
  8. * Licensed under The MIT License
  9. * For full copyright and license information, please see the LICENSE.txt
  10. * Redistributions of files must retain the above copyright notice.
  11. *
  12. * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  13. * @link http://cakephp.org CakePHP(tm) Project
  14. * @package Cake.View
  15. * @since CakePHP(tm) v 1.2.0.5714
  16. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  17. */
  18. App::uses('View', 'View');
  19. App::uses('CakeRequest', 'Network');
  20. /**
  21. * Media View provides a custom view implementation for sending files to visitors. Its great
  22. * for making the response of a controller action be a file that is saved somewhere on the filesystem.
  23. *
  24. * An example use comes from the CakePHP internals. MediaView is used to serve plugin and theme assets,
  25. * as they are not normally accessible from an application's webroot. Unlike other views, MediaView
  26. * uses several viewVars that have special meaning:
  27. *
  28. * - `id` The filename on the server's filesystem, including extension.
  29. * - `name` The filename that will be sent to the user, specified without the extension.
  30. * - `download` Set to true to set a `Content-Disposition` header. This is ideal for file downloads.
  31. * - `path` The absolute path, including the trailing / on the server's filesystem to `id`.
  32. * - `mimeType` The mime type of the file if CakeResponse doesn't know about it.
  33. * Must be an associative array with extension as key and mime type as value eg. array('ini' => 'text/plain')
  34. *
  35. * ### Usage
  36. *
  37. * ```
  38. * class ExampleController extends AppController {
  39. * public function download() {
  40. * $this->viewClass = 'Media';
  41. * $params = array(
  42. * 'id' => 'example.zip',
  43. * 'name' => 'example',
  44. * 'download' => true,
  45. * 'extension' => 'zip',
  46. * 'path' => APP . 'files' . DS
  47. * );
  48. * $this->set($params);
  49. * }
  50. * }
  51. * ```
  52. *
  53. * @package Cake.View
  54. * @deprecated 3.0.0 Deprecated since version 2.3, use CakeResponse::file() instead
  55. */
  56. class MediaView extends View {
  57. /**
  58. * Display or download the given file
  59. *
  60. * @param string $view Not used
  61. * @param string $layout Not used
  62. * @return void
  63. */
  64. public function render($view = null, $layout = null) {
  65. $name = $extension = $download = $id = $modified = $path = $cache = $mimeType = $compress = null;
  66. extract($this->viewVars, EXTR_OVERWRITE);
  67. $path = $path . $id;
  68. if (is_array($mimeType)) {
  69. $this->response->type($mimeType);
  70. }
  71. if ($cache) {
  72. if (!empty($modified) && !is_numeric($modified)) {
  73. $modified = strtotime($modified, time());
  74. } else {
  75. $modified = time();
  76. }
  77. $this->response->cache($modified, $cache);
  78. } else {
  79. $this->response->disableCache();
  80. }
  81. if ($name !== null) {
  82. if (empty($extension)) {
  83. $extension = pathinfo($id, PATHINFO_EXTENSION);
  84. }
  85. if (!empty($extension)) {
  86. $name .= '.' . $extension;
  87. }
  88. }
  89. $this->response->file($path, compact('name', 'download'));
  90. if ($compress) {
  91. $this->response->compress();
  92. }
  93. }
  94. }