36 import(
'dataface-public-api.php');
37 if ( !isset( $request[
'-field'] ) ) die(
"Could not complete request. No field name specified.");
38 if ( !isset( $request[
'-table'] ) ) die(
"Could not complete request. No table specified.");
40 $record =& df_get_record($request[
'-table'], $request);
41 if ( strpos($request[
'-field'],
'.') ===
false ){
42 die(
"ParseRelatedBlobRequest only works for -field parameters refering to related fields.");
44 list($relationship, $relativeField) = explode(
'.', $request[
'-field']);
45 if ( @$request[
'-where'] ) $where = stripslashes($request[
'-where']);
47 $rrecords =& $record->getRelatedRecordObjects($relationship, 0, 1, $where);
48 if (count($rrecords) == 0 ){
49 die(
"No records found");
51 $rrecord =& $rrecords[0];
53 $relationshipRef =& $rrecord->_relationship;
54 $domainTable =& $relationshipRef->getDomainTable();
57 $destinationTables = $relationshipRef->destinationTables();
58 $domainTable = reset($destinationTables);
60 $out = array(
'-table'=>$domainTable,
'-field'=>$relativeField);
63 foreach ( array_keys($domainTableRef->keys()) as $key){
64 $out[$key] = $rrecord->strval($key);
84 import(
'Dataface/Table.php');
85 import(
'Dataface/QueryTool.php');
87 if ( strpos(@$request[
'-field'],
'.') !== false ){
91 if ( !isset( $request[
'-field'] ) ) die(
"Could not complete request. No field name specified.");
92 if ( !isset( $request[
'-table'] ) ) die(
"Could not complete request. No table specified.");
100 $lastTableUpdate =
$table->getUpdateTime();
101 $lastTableUpdate = strtotime($lastTableUpdate);
103 $query =&
$app->getQuery();
104 $rec =& df_get_record(
$table->tablename, $query);
105 if ( !$rec )
throw new Exception(
"No record found to match the request.", E_USER_ERROR);
109 header(
'HTTP/1.0 500 Internal Server Error');
110 echo
'<h1>Internal Server Error</h1>';
111 error_log(
$field->getMessage());
115 if ( !$rec->checkPermission(
'view', array(
'field'=>
$fieldname)) ){
116 header(
'HTTP/1.1 403 Forbidden');
117 echo
'<h1>Access Forbidden</h1>';
123 $savepath =
$field[
'savepath'];
127 header(
'HTTP/1.0 404 Not Found');
128 echo
'<h1>404 File Not Found</h1>';
133 header(
'Content-type: '.$rec->getMimetype(
$fieldname));
134 header(
'Content-disposition: attachment; filename="'.basename($rec->val(
$fieldname)).
'"');
135 echo file_get_contents($savepath.
'/'.basename($rec->val(
$fieldname)));
139 if ( !
$table->isBlob(
$fieldname) ) die(
"blob.php can only be used to load BLOB or Binary columns. The requested field '$fieldname' is not a blob");
142 if ( isset($request[
'-index']) )
$index = $request[
'-index'];
146 foreach (
$keys as $key){
147 $cachePath .= urlencode($key).
'='.urlencode($_REQUEST[$key]).
'&';
154 $files = glob($cachePath.
'-*');
158 foreach (
$files as $file){
160 if ( preg_match(
'/.*-([^\-]+)$/', $file, $matches) ){
162 if ( intval($time)>$lastTableUpdate){
172 if ( $found !==
false ){
173 $contents = file_get_contents($found);
180 if ( isset($field[
'filename']) and $field[
'filename']){
184 $record->loadBlobs =
true;
186 $found = $cachePath.
'-'.time();
187 $found=str_replace(
"?",
"-",$found);
188 if ( $fh = fopen($found,
"w") ){
189 fwrite($fh, $contents);
196 if ( !isset( $record ) ){
201 if ( isset($field[
'filename']) and $field[
'filename']){
211 if ( isset($field[
'filename']) and $field[
'filename']){
212 $filename = $record->getValue($field[
'filename'],
$index);
220 if(extension_loaded(
'fileinfo')) {
221 $res = finfo_open(FILEINFO_MIME_TYPE);
223 }
else if (function_exists(
'mime_content_type')) {
229 throw new Exception(
"Could not find mimetype for field '$fieldname'", E_USER_ERROR);
233 if ( !isset($filename) ){
234 $filename = $request[
'-table'].
'_'.$request[
'-field'].
'_'.date(
'Y_m_d_H_i_s');
241 header(
'Content-disposition: attachment; filename="'.$filename.
'"');