Вход Регистрация
Файл: contao-3.5.8/system/modules/core/models/FilesModel.php
Строк: 442
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */

namespace Contao;


/**
 * Reads and writes file entries
 *
 * The files themselves reside in the files directory. This class only handles
 * the corresponding database entries (database aided file system).
 *
 * @property integer $id
 * @property integer $pid
 * @property integer $tstamp
 * @property string  $uuid
 * @property string  $type
 * @property string  $path
 * @property string  $extension
 * @property string  $hash
 * @property boolean $found
 * @property string  $name
 * @property boolean $protected
 * @property integer $importantPartX
 * @property integer $importantPartY
 * @property integer $importantPartWidth
 * @property integer $importantPartHeight
 * @property string  $meta
 *
 * @method static FilesModel|null findByIdOrAlias($val, $opt=array())
 * @method static FilesModel|null findByPath($val, $opt=array())
 * @method static FilesModel|null findOneBy($col, $val, $opt=array())
 * @method static FilesModel|null findOneByPid($val, $opt=array())
 * @method static FilesModel|null findOneByTstamp($val, $opt=array())
 * @method static FilesModel|null findOneByType($val, $opt=array())
 * @method static FilesModel|null findOneByExtension($val, $opt=array())
 * @method static FilesModel|null findOneByHash($val, $opt=array())
 * @method static FilesModel|null findOneByFound($val, $opt=array())
 * @method static FilesModel|null findOneByName($val, $opt=array())
 * @method static FilesModel|null findOneByProtected($val, $opt=array())
 * @method static FilesModel|null findOneByImportantPartX($val, $opt=array())
 * @method static FilesModel|null findOneByImportantPartY($val, $opt=array())
 * @method static FilesModel|null findOneByImportantPartWidth($val, $opt=array())
 * @method static FilesModel|null findOneByImportantPartHeight($val, $opt=array())
 * @method static FilesModel|null findOneByMeta($val, $opt=array())
 *
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByPid($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByTstamp($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByType($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByExtension($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByHash($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByFound($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByName($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByProtected($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByImportantPartX($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByImportantPartY($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByImportantPartWidth($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByImportantPartHeight($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findByMeta($val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findBy($col, $val, $opt=array())
 * @method static ModelCollection|FilesModel[]|FilesModel|null findAll($opt=array())
 *
 * @method static integer countById($id, $opt=array())
 * @method static integer countByPid($val, $opt=array())
 * @method static integer countByTstamp($val, $opt=array())
 * @method static integer countByUuid($val, $opt=array())
 * @method static integer countByType($val, $opt=array())
 * @method static integer countByPath($val, $opt=array())
 * @method static integer countByExtension($val, $opt=array())
 * @method static integer countByHash($val, $opt=array())
 * @method static integer countByFound($val, $opt=array())
 * @method static integer countByName($val, $opt=array())
 * @method static integer countByProtected($val, $opt=array())
 * @method static integer countByImportantPartX($val, $opt=array())
 * @method static integer countByImportantPartY($val, $opt=array())
 * @method static integer countByImportantPartWidth($val, $opt=array())
 * @method static integer countByImportantPartHeight($val, $opt=array())
 * @method static integer countByMeta($val, $opt=array())
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class FilesModel extends Model
{

    
/**
     * Table name
     * @var string
     */
    
protected static $strTable 'tl_files';


    
/**
     * Find a file by its primary key (backwards compatibility)
     *
     * @param mixed $varValue   The value
     * @param array $arrOptions An optional options array
     *
     * @return static A model or null if there is no file
     */
    
public static function findByPk($varValue, array $arrOptions=array())
    {
        if (static::
$strPk == 'id')
        {
            return static::
findById($varValue$arrOptions);
        }

        return 
parent::findByPk($varValue$arrOptions);
    }


    
/**
     * Find a file by its ID or UUID (backwards compatibility)
     *
     * @param mixed $intId      The ID or UUID
     * @param array $arrOptions An optional options array
     *
     * @return static A model or null if there is no file
     */
    
public static function findById($intId, array $arrOptions=array())
    {
        if (
Validator::isUuid($intId))
        {
            return static::
findByUuid($intId$arrOptions);
        }

        return static::
findOneBy('id'$intId$arrOptions);
    }


    
/**
     * Find multiple files by their IDs or UUIDs (backwards compatibility)
     *
     * @param array $arrIds     An array of IDs or UUIDs
     * @param array $arrOptions An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null if there are no files
     */
    
public static function findMultipleByIds($arrIds, array $arrOptions=array())
    {
        if (!
is_array($arrIds) || empty($arrIds))
        {
            return 
null;
        }

        if (
Validator::isUuid(current($arrIds)))
        {
            return static::
findMultipleByUuids($arrIds$arrOptions);
        }

        return 
parent::findMultipleByIds($arrIds$arrOptions);
    }


    
/**
     * Find a file by its UUID
     *
     * @param string $strUuid    The UUID string
     * @param array  $arrOptions An optional options array
     *
     * @return static A model or null if there is no file
     */
    
public static function findByUuid($strUuid, array $arrOptions=array())
    {
        
$t = static::$strTable;

        
// Convert UUIDs to binary
        
if (Validator::isStringUuid($strUuid))
        {
            
$strUuid StringUtil::uuidToBin($strUuid);
        }

        return static::
findOneBy(array("$t.uuid=UNHEX(?)"), bin2hex($strUuid), $arrOptions);
    }


    
/**
     * Find multiple files by their UUIDs
     *
     * @param array $arrUuids   An array of UUIDs
     * @param array $arrOptions An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null if there are no files
     */
    
public static function findMultipleByUuids($arrUuids, array $arrOptions=array())
    {
        if (!
is_array($arrUuids) || empty($arrUuids))
        {
            return 
null;
        }

        
$t = static::$strTable;

        foreach (
$arrUuids as $k=>$v)
        {
            
// Convert UUIDs to binary
            
if (Validator::isStringUuid($v))
            {
                
$v StringUtil::uuidToBin($v);
            }

            
$arrUuids[$k] = "UNHEX('" bin2hex($v) . "')";
        }

        if (!isset(
$arrOptions['order']))
        {
            
$arrOptions['order'] = "$t.uuid!=" implode(", $t.uuid!="$arrUuids);
        }

        return static::
findBy(array("$t.uuid IN(" implode(","$arrUuids) . ")"), null$arrOptions);
    }


    
/**
     * Find multiple files by their paths
     *
     * @param array $arrPaths   An array of file paths
     * @param array $arrOptions An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null if there are no files
     */
    
public static function findMultipleByPaths($arrPaths, array $arrOptions=array())
    {
        if (!
is_array($arrPaths) || empty($arrPaths))
        {
            return 
null;
        }

        
$t = static::$strTable;

        if (!isset(
$arrOptions['order']))
        {
            
$arrOptions['order'] = Database::getInstance()->findInSet("$t.path"$arrPaths);
        }

        return static::
findBy(array("$t.path IN(" implode(','array_fill(0count($arrPaths), '?')) . ")"), $arrPaths$arrOptions);
    }


    
/**
     * Find multiple files with the same base path
     *
     * @param string $strPath    The base path
     * @param array  $arrOptions An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null if there are no matching files
     */
    
public static function findMultipleByBasepath($strPath, array $arrOptions=array())
    {
        
$t = static::$strTable;

        return static::
findBy(array("$t.path LIKE ?"), $strPath '%'$arrOptions);
    }


    
/**
     * Find multiple files by UUID and a list of extensions
     *
     * @param array $arrUuids      An array of file UUIDs
     * @param array $arrExtensions An array of file extensions
     * @param array $arrOptions    An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null of there are no matching files
     */
    
public static function findMultipleByUuidsAndExtensions($arrUuids$arrExtensions, array $arrOptions=array())
    {
        if (!
is_array($arrUuids) || empty($arrUuids) || !is_array($arrExtensions) || empty($arrExtensions))
        {
            return 
null;
        }

        foreach (
$arrExtensions as $k=>$v)
        {
            if (!
preg_match('/^[a-z0-9]{2,5}$/i'$v))
            {
                unset(
$arrExtensions[$k]);
            }
        }

        
$t = static::$strTable;

        foreach (
$arrUuids as $k=>$v)
        {
            
// Convert UUIDs to binary
            
if (Validator::isStringUuid($v))
            {
                
$v StringUtil::uuidToBin($v);
            }

            
$arrUuids[$k] = "UNHEX('" bin2hex($v) . "')";
        }

        if (!isset(
$arrOptions['order']))
        {
            
$arrOptions['order'] = "$t.uuid!=" implode(", $t.uuid!="$arrUuids);
        }

        return static::
findBy(array("$t.uuid IN(" implode(","$arrUuids) . ") AND $t.extension IN('" implode("','"$arrExtensions) . "')"), null$arrOptions);
    }


    
/**
     * Find all files in a folder
     *
     * @param string $strPath    The folder path
     * @param array  $arrOptions An optional options array
     *
     * @return ModelCollection|FilesModel[]|FilesModel|null A collection of models or null if there are no matching files
     */
    
public static function findMultipleFilesByFolder($strPath, array $arrOptions=array())
    {
        
$t = static::$strTable;
        
$strPath str_replace(array('\', '%', '_'), array('\\', '\%', '\_'), $strPath);

        return static::findBy(array("$t.type='
file' AND $t.path LIKE ? AND $t.path NOT LIKE ?"), array($strPath.'/%', $strPath.'/%/%'), $arrOptions);
    }


    /**
     * Do not reload the data upon insert
     *
     * @param integer $intType The query type (Model::INSERT or Model::UPDATE)
     */
    protected function postSave($intType) {}
}
Онлайн: 0
Реклама