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