Вход Регистрация
Файл: concrete5.7.5.6/concrete/controllers/search/files.php
Строк: 156
<?php
namespace ConcreteControllerSearch;

use 
ConcreteCoreHttpResponseAssetGroup;
use 
Controller;
use 
FileList;
use 
ConcreteCoreSearchStickyRequest;
use 
ConcreteCoreFileSearchColumnSetColumnSet as FileSearchColumnSet;
use 
ConcreteCoreFileSearchResultResult as FileSearchResult;
use 
FileAttributeKey;
use 
Permissions;
use 
Loader;
use 
FileSet;
use 
URL;
use 
ConcreteCoreFileTypeType as FileType;
use 
FilePermissions;
use 
stdClass;

class 
Files extends Controller
{
    protected 
$fields = array();

    
/** @var ConcreteCoreFileFileList */
    
protected $fileList;

    public function 
__construct()
    {
        
$this->searchRequest = new StickyRequest('files');
        
$this->fileList = new FileList($this->searchRequest);
    }

    public function 
search()
    {
        
$cp FilePermissions::getGlobal();
        if (
$cp->canSearchFiles() || $cp->canAddFile()) {

            if (
$_REQUEST['submitSearch']) {
                
$this->searchRequest->resetSearchRequest();
            }

            
$req $this->searchRequest->getSearchRequest();
            
$columns FileSearchColumnSet::getCurrent();

            if (!
$this->fileList->getActiveSortColumn()) {
                
$col $columns->getDefaultSortColumn();
                
$this->fileList->sanitizedSortBy($col->getColumnKey(), $col->getColumnDefaultSortDirection());
            }

            
// first thing, we check to see if a saved search is being used
            
if (isset($req['fssID'])) {
                
$fs FileSet::getByID($req['fssID']);
                if (
$fs->getFileSetType() == FileSet::TYPE_SAVED_SEARCH) {
                    
$req $fs->getSavedSearchRequest();
                    
$columns $fs->getSavedSearchColumns();
                    
$colsort $columns->getDefaultSortColumn();
                    
$this->fileList->addToSearchRequest('ccm_order_dir'$colsort->getColumnDefaultSortDirection());
                    
$this->fileList->addToSearchRequest('ccm_order_by'$colsort->getColumnKey());
                }
            }
            
$keywords htmlentities($req['fKeywords'], ENT_QUOTESAPP_CHARSET);

            if (
$keywords != '') {
                
$this->fileList->filterByKeywords($keywords);
            }

            if (
$req['numResults']) {
                
$this->fileList->setItemsPerPage(intval($req['numResults']));
            }

            if ((isset(
$req['fsIDNone']) && $req['fsIDNone'] == 1) || (is_array($req['fsID']) && in_array(-1$req['fsID']))) {
                
$this->fileList->filterByNoSet();
            } else {
                if (
is_array($req['fsID'])) {
                    foreach (
$req['fsID'] as $fsID) {
                        
$fs FileSet::getByID($fsID);
                        if (
is_object($fs)) {
                            
$this->fileList->filterBySet($fs);
                        }
                    }
                } elseif (isset(
$req['fsID']) && $req['fsID'] != '' && $req['fsID'] > 0) {
                    
$set $req['fsID'];
                    
$fs FileSet::getByID($set);
                    if (
is_object($fs)) {
                        
$this->fileList->filterBySet($fs);
                    }
                }
            }

            
$selectedSets = array();
            if (
is_array($req['field'])) {
                foreach (
$req['field'] as $i => $item) {
                    
$this->fields[] = $this->getField($item);
                    
// due to the way the form is setup, index will always be one more than the arrays
                    
if ($item != '') {
                        switch (
$item) {
                            case 
"extension":
                                
$extension $req['extension'];
                                
$this->fileList->filterByExtension($extension);
                                break;
                            case 
"type":
                                
$type $req['type'];
                                
$this->fileList->filterByType($type);
                                break;
                            case 
"date_added":
                                
$wdt Loader::helper('form/date_time');
                                
/* @var $wdt ConcreteCoreFormServiceWidgetDateTime */
                                
$dateFrom $wdt->translate('date_added_from'$req);
                                if (
$dateFrom) {
                                    
$this->fileList->filterByDateAdded($dateFrom'>=');
                                }
                                
$dateTo $wdt->translate('date_added_to'$req);
                                if (
$dateTo) {
                                    if (
preg_match('/^(.+\d+:\d+):00$/'$dateTo$m)) {
                                        
$dateTo $m[1] . ':59';
                                    }
                                    
$this->fileList->filterByDateAdded($dateTo'<=');
                                }
                                break;
                            case 
'added_to':
                                
$ocID $req['ocIDSearchField'];
                                if (
$ocID 0) {
                                    
$this->fileList->filterByOriginalPageID($ocID);
                                }
                                break;
                            case 
"size":
                                
$from $req['size_from'];
                                
$to $req['size_to'];
                                
$this->fileList->filterBySize($from$to);
                                break;
                            default:
                                
$akID $item;
                                
$fak FileAttributeKey::get($akID);
                                
$type $fak->getAttributeType();
                                
$cnt $type->getController();
                                
$cnt->setRequestArray($req);
                                
$cnt->setAttributeKey($fak);
                                
$cnt->searchForm($this->fileList);
                                break;
                        }
                    }
                }
            }
            if (isset(
$req['numResults'])) {
                
$this->fileList->setItemsPerPage(intval($req['numResults']));
            }

            
$this->fileList->setPermissionsChecker(function($file) {
                
$cp = new Permissions($file);
                return 
$cp->canViewFileInFileManager();
            });

            
$ilr = new FileSearchResult($columns$this->fileListURL::to('/ccm/system/search/files/submit'), $this->fields);
            
$this->result $ilr;
        } else {
            return 
false;
        }
    }

    public function 
getSearchResultObject()
    {
        return 
$this->result;
    }

    public function 
getListObject()
    {
        return 
$this->fileList;
    }

    public function 
field($field)
    {
        
$r $this->getField($field);
        
Loader::helper('ajax')->sendResult($r);
    }

    protected function 
getField($field)
    {
        
$r = new stdClass();
        
$r->field $field;
        
$searchRequest $this->searchRequest->getSearchRequest();
        
$wdt Loader::helper('form/date_time');
        
/* @var $wdt ConcreteCoreFormServiceWidgetDateTime */
        
$html '';
        switch (
$field) {
            case 
'size':
                
$form Loader::helper('form');
                
$html .= $form->text('size_from'$searchRequest['size_from'], array('style' => 'width:  60px'));
                
$html .= t('to');
                
$html .= $form->text('size_to'$searchRequest['size_to'], array('style' => 'width: 60px'));
                
$html .= t('KB');
                break;
            case 
'type':
                
$form Loader::helper('form');
                
$t1 FileType::getTypeList();
                
$types = array();
                foreach (
$t1 as $value) {
                    
$types[$value] = FileType::getGenericTypeText($value);
                }
                
$html .= $form->select('type'$types$searchRequest['type'], array('style' => 'width: 120px'));
                break;
            case 
'extension':
                
$form Loader::helper('form');
                
$ext1 FileType::getUsedExtensionList();
                
$extensions = array();
                foreach (
$ext1 as $value) {
                    
$extensions[$value] = $value;
                }
                
$html .= $form->select('extension'$extensions$searchRequest['extensions'], array('style' => 'width: 120px'));
                break;
            case 
'date_added':
                
$html .= $wdt->datetime('date_added_from'$wdt->translate('date_added_from'$searchRequest)) . t('to') . $wdt->datetime('date_added_to'$wdt->translate('date_added_to'$searchRequest));
                break;
            case 
'added_to':
                
$ps Loader::helper("form/page_selector");
                
$html .= $ps->selectPage('ocIDSearchField');
                break;
            default:
                if (
Loader::helper('validation/numbers')->integer($field)) {
                    
$ak FileAttributeKey::getByID($field);
                    
$html .= $ak->render('search'nulltrue);
                }
                break;
        }
        
$r->html $html;
        
$ag ResponseAssetGroup::get();
        
$r->assets = array();
        foreach (
$ag->getAssetsToOutput() as $position => $assets) {
            foreach (
$assets as $asset) {
                if (
is_object($asset)) {
                    
// have to do a check here because we might be included a dumb javascript call like i18n_js
                    
$r->assets[$asset->getAssetType()][] = $asset->getAssetURL();
                }
            }
        }
        return 
$r;
    }

    public function 
submit()
    {
        
$this->search();
        
Loader::helper('ajax')->sendResult($this->result->getJSONObject());
    }

    public function 
getFields()
    {
        return 
$this->fields;
    }


    const 
FILTER_BY_TYPE 'type';                  //!< @javascript-exported
    
const FILTER_BY_SIZE 'size';                  //!< @javascript-exported
    
const FILTER_BY_EXTENSION 'extension';        //!< @javascript-exported
    
const FILTER_BY_ADDED_DATE 'date_added';      //!< @javascript-exported
    
const FILTER_BY_ADDED_TO_PAGE 'added_to';     //!< @javascript-exported

    
public static function getSearchFields()
    {
        
// Warning:
        // concrete/js/build/core/file-manager/search.js uses those array keys too 
        
$r = array(
            
self::FILTER_BY_SIZE          => t('Size'),
            
self::FILTER_BY_TYPE          => t('Type'),
            
self::FILTER_BY_EXTENSION     => t('Extension'),
            
self::FILTER_BY_ADDED_DATE    => t('Added Between'),
            
self::FILTER_BY_ADDED_TO_PAGE => t('Added to Page')
        );
        
$sfa FileAttributeKey::getSearchableList();
        foreach (
$sfa as $ak) {
            
$r[$ak->getAttributeKeyID()] = $ak->getAttributeKeyDisplayName();
        }
        
natcasesort($r);

        return 
$r;
    }

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