Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
29 / 29 |
Downloadable | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
7 | |
100.00% |
29 / 29 |
__construct(\Scrivo\Context $context, \Scrivo\String $action, $type, $data) | |
100.00% |
1 / 1 |
3 | |
100.00% |
21 / 21 |
|||
outputData() | |
100.00% |
1 / 1 |
3 | |
100.00% |
7 / 7 |
|||
getFileName() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
<?php | |
/* Copyright (c) 2012, Geert Bergman (geert@scrivo.nl) | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation | |
* and/or other materials provided with the distribution. | |
* 3. Neither the name of "Scrivo" nor the names of its contributors may be | |
* used to endorse or promote products derived from this software without | |
* specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
* POSSIBILITY OF SUCH DAMAGE. | |
* | |
* $Id: Downloadable.php 866 2013-08-25 16:22:35Z geert $ | |
*/ | |
/** | |
* Implementation of the \Scrivo\Downloadable class. | |
*/ | |
namespace Scrivo; | |
/** | |
* The Scrivo Downloadable class is a simple conveniance class to pass | |
* downloadable file data from an action. | |
*/ | |
class Downloadable { | |
/** | |
* Constant to denote that we pass the actual file content in a variable. | |
*/ | |
const type_data = 1; | |
/** | |
* Constant to denote that we pass the actual file content in a file. | |
*/ | |
const TYPE_FILE = 2; | |
/** | |
* The download source type: either type_data or TYPE_FILE | |
* @var int | |
*/ | |
private $type; | |
/** | |
* The file name to use in the download. | |
* @var \Scrivo\String | |
*/ | |
private $action; | |
/** | |
* The binary data to pass in case of type_data or the physical location | |
* of the file in case of TYPE_FILE | |
* @var string|\Scrivo\String | |
*/ | |
private $data; | |
/** | |
* Construct a Downloadable object to pass from an action. | |
* | |
* For smaller files we can simply pass the file data as a variable | |
* (type_data), for larger files you can write the data to a temporary file | |
* and pass the file name (TYPE_FILE). | |
* | |
* @param \Scrivo\Context $context A valid Scrivo context. | |
* @param \Scrivo\String $action The file name to use in the | |
* download headers, this will be prepended with a string representation | |
* of the WWW_ROOT variabele. | |
* @param int $type the type of data to download, either type_data or | |
* TYPE_FILE. | |
* @param string|\Scrivo\String $data The file data (type_data), or | |
* file name (TYPE_FILE). | |
*/ | |
public function __construct(\Scrivo\Context $context, | |
\Scrivo\String $action, $type, $data) { | |
\Scrivo\ArgumentCheck::assertArgs(func_get_args(), array( | |
null, | |
null, | |
array(\Scrivo\ArgumentCheck::TYPE_INTEGER, | |
array(self::type_data, self::TYPE_FILE)), | |
array(array(\Scrivo\ArgumentCheck::TYPE_STRING, "Scrivo\String")) | |
)); | |
if ($type == self::TYPE_FILE) { | |
if (!($data instanceof \Scrivo\String)) { | |
throw new \Scrivo\SystemException("Invalid argument type"); | |
} | |
} else { | |
\Scrivo\ArgumentCheck::assert( | |
$data, \Scrivo\ArgumentCheck::TYPE_STRING); | |
} | |
// Get a 'filename save' representation of the WWW_ROOT variable. | |
$wr = $context->config->WWW_ROOT->replace( | |
\Scrivo\String::create(array("http://", "https://")), | |
new \Scrivo\String(""))->replace( | |
new \Scrivo\String("/"), new \Scrivo\String("_")); | |
$this->action = new \Scrivo\String($wr . "_" . $action); | |
$this->type = $type; | |
$this->data = $data; | |
} | |
/** | |
* Output the file data to stdout. If the file data was read from a | |
* temporary file, the file will be deleted afterwards. | |
*/ | |
public function outputData() { | |
if ($this->type == self::TYPE_FILE) { | |
readfile($this->data); | |
unlink($this->data); | |
} else if ($this->type == self::type_data) { | |
echo $this->data; | |
} | |
} | |
/** | |
* Get the file name to use in the download headers. | |
*/ | |
public function getFileName() { | |
return $this->action; | |
} | |
} | |