Page MenuHomeIn-Portal Phabricator

download_helper.php
No OneTemporary

File Metadata

Created
Wed, Oct 8, 7:32 AM

download_helper.php

<?php
/**
* @version $Id: download_helper.php 16522 2017-01-20 20:28:16Z alex $
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class DownloadHelper extends kHelper {
function CheckAccess($file_id, $product_id)
{
$sql = 'SELECT FileAccessId FROM '.TABLE_PREFIX.'UserFileAccess
WHERE PortalUserId = '.$this->Application->RecallVar('user_id').'
AND ProductId = '.$product_id;
return $this->Conn->GetOne($sql);
}
function SendFile($file_id, $product_id)
{
/** @var kDBItem $file_object */
$file_object = $this->Application->recallObject('file', null, Array('skip_autoload' => true));
if ( $file_id ) {
$sql = 'SELECT FileId, FilePath, RealPath, MIMEType
FROM ' . $this->Application->getUnitConfig('file')->getTableName() . '
WHERE FileId = ' . $file_id;
}
else {
$sql = 'SELECT FileId, FilePath, RealPath, MIMEType
FROM ' . $this->Application->getUnitConfig('file')->getTableName() . '
WHERE ProductId = ' . $product_id . ' AND IsPrimary = 1';
}
$file_info = $this->Conn->GetRow($sql);
$field_options = $file_object->GetFieldOptions('RealPath');
$file_info['real_path'] = FULL_PATH.$field_options['upload_dir'].'/'.$file_info['RealPath'];
$file_info = $this->DoSendFile($file_info);
return $file_info;
}
function DoSendFile($file_info)
{
$this->Application->setContentType(kUtil::mimeContentType($file_info['real_path']), false);
header('Content-Disposition: attachment; filename="' . $file_info['FilePath'] . '"');
header('Content-Length: ' . filesize($file_info['real_path']));
$file_info['download_start'] = time();
readfile($file_info['real_path']);
flush();
$file_info['download_end'] = time(); // this is incorrect
define('SKIP_OUT_COMPRESSION', 1);
return $file_info;
}
function LogDownload($product_id, $file_info)
{
$down_object = $this->Application->recallObject('down', null, Array('skip_autoload' => true));
$user_object = $this->Application->recallObject('u.current');
$product_object = $this->Application->recallObject( 'p' );
$down_object->SetDBField('PortalUserId', $this->Application->RecallVar('user_id'));
$down_object->SetDBField('Username', $user_object->GetDBField('Username'));
$down_object->SetDBField('ProductId', $product_id);
$down_object->SetDBField('ProductName', $product_object->GetField('Name'));
$down_object->SetDBField('FileId', $file_info['FileId']);
$down_object->SetDBField('Filename', $file_info['FilePath']);
$down_object->SetDBField('IPAddress', $this->Application->getClientIp());
$down_object->SetDBField('StartedOn_date', $file_info['download_start']);
$down_object->SetDBField('StartedOn_time', $file_info['download_start']);
$down_object->Create();
}
}

Event Timeline