Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/File/FileList.php
Строк: 209
<?php
namespace ConcreteCoreFile;

use 
ConcreteCoreSearchItemListDatabaseAttributedItemList as DatabaseItemList;
use 
ConcreteCoreSearchPermissionableListItemInterface;
use 
ConcreteCoreSearchPaginationPermissionablePagination;
use 
Database;
use 
Core;
use 
DoctrineDBALQuery;
use 
PagerfantaAdapterDoctrineDbalAdapter;
use 
ConcreteCoreSearchPaginationPagination;
use 
FileAttributeKey;

class 
FileList extends DatabaseItemList implements PermissionableListItemInterface
{

    
/** @var  Closure | integer | null */
    
protected $permissionsChecker;
    
    protected 
$paginationPageParameter 'ccm_paging_fl';

    
/**
     * Columns in this array can be sorted via the request.
     * @var array
     */
    
protected $autoSortColumns = array(
        
'fv.fvFilename',
        
'fv.fvTitle',
        
'f.fDateAdded',
        
'fv.fvDateAdded',
        
'fv.fvSize'
    
);

    protected function 
getAttributeKeyClassName()
    {
        return 
'\Concrete\Core\Attribute\Key\FileKey';
    }

    public function 
setPermissionsChecker(Closure $checker)
    {
        
$this->permissionsChecker $checker;
    }

    public function 
ignorePermissions()
    {
        
$this->permissionsChecker = -1;
    }

    public function 
createQuery()
    {
        
$this->query->select('f.fID')
            ->
from('Files''f')
            ->
innerJoin('f''FileVersions''fv''f.fID = fv.fID and fv.fvIsApproved = 1')
            ->
leftJoin('f''FileSearchIndexAttributes''fsi''f.fID = fsi.fID')
            ->
leftJoin('f''Users''u''f.uID = u.uID');
    }

    public function 
getTotalResults()
    {
        
$u = new User();
        if (
$this->permissionsChecker === -1) {
            
$query $this->deliverQueryObject();
            return 
$query->select('count(distinct f.fID)')->setMaxResults(1)->execute()->fetchColumn();
        } else {
            return -
1// unknown
        
}
    }

    protected function 
createPaginationObject()
    {
        
$u = new User();
        if (
$this->permissionsChecker === -1) {
            
$adapter = new DoctrineDbalAdapter($this->deliverQueryObject(), function ($query) {
                
$query->select('count(distinct f.fID)')->setMaxResults(1);
            });
            
$pagination = new Pagination($this$adapter);
        } else {
            
$pagination = new PermissionablePagination($this);
        }
        return 
$pagination;
    }

    
/**
     * @param $queryRow
     * @return ConcreteCoreFileFile
     */
    
public function getResult($queryRow)
    {
        
$f File::getByID($queryRow['fID']);
        if (
is_object($f) && $this->checkPermissions($f)) {
            return 
$f;
        }
    }

    public function 
checkPermissions($mixed)
    {

        if (isset(
$this->permissionsChecker)) {
            if (
$this->permissionsChecker === -1) {
                return 
true;
            } else {
                return 
call_user_func_array($this->permissionsChecker, array($mixed));
            }
        }

        
$fp = new Permissions($mixed);
        return 
$fp->canViewFile();
    }

    public function 
filterByType($type)
    {
        
$this->filter('fvType'$type);
    }

    public function 
filterByExtension($extension)
    {
        
$this->query->andWhere('fv.fvExtension = :fvExtension');
        
$this->query->setParameter('fvExtension'$extension);
    }

    
/**
     * Filters by "keywords" (which searches everything including filenames,
     * title, users who uploaded the file, tags)
     */
    
public function filterByKeywords($keywords)
    {
        
$expressions = array(
            
$this->query->expr()->like('fv.fvFilename'':keywords'),
            
$this->query->expr()->like('fv.fvDescription'':keywords'),
            
$this->query->expr()->like('fv.fvTitle'':keywords'),
            
$this->query->expr()->like('fv.fvTags'':keywords'),
            
$this->query->expr()->eq('uName'':keywords')
        );

        
$keys FileAttributeKey::getSearchableIndexedList();
        foreach (
$keys as $ak) {
            
$cnt $ak->getController();
            
$expressions[] = $cnt->searchKeywords($keywords$this->query);
        }
        
$expr $this->query->expr();
        
$this->query->andWhere(call_user_func_array(array($expr'orX'), $expressions));
        
$this->query->setParameter('keywords''%' $keywords '%');
    }

    public function 
filterBySet($fs)
    {
        
$table 'fsf' $fs->getFileSetID();
        
$this->query->leftJoin('f''FileSetFiles'$table'f.fID = ' $table '.fID');
        
$this->query->andWhere($table '.fsID = :fsID' $fs->getFileSetID());
        
$this->query->setParameter('fsID' $fs->getFileSetID(), $fs->getFileSetID());
    }

    public function 
filterByNoSet()
    {
        
$this->query->leftJoin('f''FileSetFiles''fsex''f.fID = fsex.fID');
        
$this->query->andWhere('fsex.fsID is null');
    }

    
/**
     * Filters the file list by file size (in kilobytes)
     */
    
public function filterBySize($from$to)
    {
        
$this->query->andWhere('fv.fvSize >= :fvSizeFrom');
        
$this->query->andWhere('fv.fvSize <= :fvSizeTo');
        
$this->query->setParameter('fvSizeFrom'$from 1024);
        
$this->query->setParameter('fvSizeTo'$to 1024);
    }

    
/**
     * Filters by public date
     * @param string $date
     */
    
public function filterByDateAdded($date$comparison '=')
    {
        
$this->query->andWhere($this->query->expr()->comparison('f.fDateAdded'$comparison$this->query->createNamedParameter($date)));
    }

    public function 
filterByOriginalPageID($ocID)
    {
        
$this->query->andWhere('f.ocID = :ocID');
        
$this->query->setParameter('ocID'$ocID);
    }

    
/**
     * filters a FileList by the uID of the approving User
     * @param int $uID
     * @return void
     */
    
public function filterByApproverUserID($uID)
    {
        
$this->query->andWhere('fv.fvApproverUID = :fvApproverUID');
        
$this->query->setParameter('fvApproverUID'$uID);
    }

    
/**
     * filters a FileList by the uID of the owning User
     * @param int $uID
     * @return void
     * @since 5.4.1.1+
     */
    
public function filterByAuthorUserID($uID)
    {
        
$this->query->andWhere('fv.fvAuthorUID = :fvAuthorUID');
        
$this->query->setParameter('fvAuthorUID'$uID);
    }

    
/**
     * Filters by "tags" only.
     */
    
public function filterByTags($tags)
    {
        
$this->query->andWhere(
            
$this->query->expr()->andX(
                
$this->query->expr()->like('fv.fvTags'':tags')
            )
        );
        
$this->query->setParameter('tags''%' $tags '%');
    }

    
/**
     * Sorts by filename in ascending order.
     */
    
public function sortByFilenameAscending()
    {
        
$this->query->orderBy('fv.fvFilename''asc');
    }

    
/**
     * Sorts by file set display order in ascending order.
     */
    
public function sortByFileSetDisplayOrder()
    {
        
$this->query->orderBy('fsDisplayOrder''asc');
    }

}
Онлайн: 3
Реклама