<commit_before><commit_msg>Реализован класс-адаптер для загрузки и обработки удаленных файлов по URL-адресу<commit_after><?php
/**
 * @author <NAME> <<EMAIL>>
 * @copyright Copyright &copy; S.E.M. 2017-
 * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
 */
namespace sem\filestorage\adapters;

use yii\web\UploadedFile;
use yii\base\NotSupportedException;
use sem\helpers\FileHelper;

/**
 * Класс реализует логику загрузки и сохранения удаленного файла
 */
class RemoteFile extends UploadedFile
{

    /**
     * @param string $url URL-адрес для загрузки файла
     * @inheritdoc
     */
    public function __construct($url, $config = array())
    {
        
        if (($f = @file_get_contents($url)) !== false) {
            
            
            if ($tmp = tempnam(sys_get_temp_dir(), "f_")) {
            
                if (@file_put_contents($tmp, $f) !== false) {

                    // Прямая инициализация объекта
                    $this->tempName = $tmp;
                    $this->name = basename($url);
                    $this->size = filesize($this->tempName);
                    $this->type = FileHelper::getMimeTypeByExtension($this->name);
                    $this->error = UPLOAD_ERR_OK;


                } else {

                    $this->error = UPLOAD_ERR_CANT_WRITE;

                }
            
            } else {

                $this->error = UPLOAD_ERR_NO_TMP_DIR;
            }
            
        } else {
            
            $this->error = UPLOAD_ERR_NO_FILE;
            
        }

        parent::__construct($config);
    }
    
    /**
     * @inheritdoc
     */
    public function saveAs($file, $deleteTempFile = true)
    {
        if ($this->error == UPLOAD_ERR_OK) {
            if ($deleteTempFile) {
                return rename($this->tempName, $file);
            } else {
                return copy($this->tempName, $file);
            }
        }
        return false;
    }

    /**
     * @inheritdoc
     */
    public static function getInstance($model, $attribute)
    {
        throw new NotSupportedException("Метод 'getInstance' не поддерживается для данной реализации");
    }
    
    /**
     * @inheritdoc
     */
    public static function getInstances($model, $attribute)
    {
        throw new NotSupportedException("Метод 'getInstances' не поддерживается для данной реализации");
    }
    
    /**
     * @inheritdoc
     */
    public static function getInstanceByName($name)
    {
        throw new NotSupportedException("Метод 'getInstanceByName' не поддерживается для данной реализации");
    }
    
    /**
     * @inheritdoc
     */    
    public static function getInstancesByName($name)
    {
        throw new NotSupportedException("Метод 'getInstancesByName' не поддерживается для данной реализации");
    }
    
    /**
     * @inheritdoc
     */
    public static function reset()
    {
        throw new NotSupportedException("Метод 'reset' не поддерживается для данной реализации");
    }
}
{'fraction_non_alphanumeric': 0.11228533685601057, 'fraction_numerical': 0.001321003963011889, 'mean_word_length': 1.8361423220973783, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1168479', 'n_tokens_mistral': 928, 'n_tokens_neox': 955, 'n_words': 183}