Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Block/BlockType/BlockTypeList.php
Строк: 107
<?php
namespace ConcreteCoreBlockBlockType;
use 
Core;
use 
Loader;
use 
Environment;
use 
CacheLocal;
use 
BlockType as ConcreteBlockType;
use 
Package;
use 
ConcreteCoreLegacyDatabaseItemList;

class 
BlockTypeList extends DatabaseItemList {

    protected 
$autoSortColumns = array('btHandle''btID''btDisplayOrder');
    protected 
$includeInternalBlockTypes false;

    function 
__construct() {
        
$this->setQuery("select btID from BlockTypes");
        
$this->sortByMultiple('btDisplayOrder asc''btName asc''btID asc');
    }
    public function 
includeInternalBlockTypes()
    {
        
$this->includeInternalBlockTypes true;
    }

    public function 
get($itemsToGet 100$offset 0) {
        if (!
$this->includeInternalBlockTypes) {
            
$this->filter('btIsInternal'false);
        }
        
$r parent::get$itemsToGetintval($offset));
        
$blocktypes = array();
        foreach(
$r as $row) {
            
$bt ConcreteBlockType::getByID($row['btID']);
            if (
is_object($bt)) {
                
$blocktypes[] = $bt;
            }
        }
        return 
$blocktypes;
    }

    public function 
filterByPackage(Package $pkg) {
        
$this->filter('pkgID'$pkg->getPackageID());
    }

    
/**
     * @todo comment this one
     * @param string $xml
     * @return void
     */
    
public static function exportList($xml) {
        
$btl = new static();
        
$blocktypes $btl->get();
        
$nxml $xml->addChild('blocktypes');
        foreach(
$blocktypes as $bt) {
            
$type $nxml->addChild('blocktype');
            
$type->addAttribute('handle'$bt->getBlockTypeHandle());
            
$type->addAttribute('package'$bt->getPackageHandle());
        }
    }

    
/**
     * returns an array of Block Types used in the concrete5 Dashboard
     * @return BlockType[]
     */
    
public static function getDashboardBlockTypes() {
        
$btl = new static();
        
$btl->filter(false'btHandle like 'dashboard_%'');
        
$blockTypes $btl->get();
        return 
$blockTypes;
    }

    
/**
     * Gets a list of block types that are not installed, used to get blocks that can be installed
     * This function only surveys the web/blocks directory - it's not looking at the package level.
     * @return BlockType[]
     */
    
public static function getAvailableList() {
        
$blocktypes = array();
        
$dir DIR_FILES_BLOCK_TYPES;
        
$db Loader::db();

        
$btHandles $db->GetCol("select btHandle from BlockTypes order by btDisplayOrder asc, btName asc, btID asc");

        
$aDir = array();
        if (
is_dir($dir)) {
            
$handle opendir($dir);
            while((
$file readdir($handle)) !== false) {
                if (
strpos($file'.') === false) {
                    
$fdir $dir '/' $file;
                    if (
is_dir($fdir) && !in_array($file$btHandles) && file_exists($fdir '/' FILENAME_BLOCK_CONTROLLER)) {
                        
$bt BlockType::getByHandle($file);
                        if (!
is_object($bt)) {
                            
$bt = new BlockType;
                            
$bt->setBlockTypeHandle($file);
                            
$class $bt->getBlockTypeClass();
                            
$bta = new $class;
                            
$bt->setBlockTypeName($bta->getBlockTypeName());
                            
$bt->setBlockTypeDescription($bta->getBlockTypeDescription());
                            
$bt->hasCustomViewTemplate file_exists(DIR_FILES_BLOCK_TYPES '/' $file '/' FILENAME_BLOCK_VIEW);
                            
$bt->hasCustomEditTemplate file_exists(DIR_FILES_BLOCK_TYPES '/' $file '/' FILENAME_BLOCK_EDIT);
                            
$bt->hasCustomAddTemplate file_exists(DIR_FILES_BLOCK_TYPES '/' $file '/' FILENAME_BLOCK_ADD);
                            
$bt->installed false;

                        } else {
                            
$bt->installed true;
                        }

                        
$blocktypes[] = $bt;
                    }
                }
            }
        }

        return 
$blocktypes;
    }

    
/**
     * gets a list of installed BlockTypes
     * @return BlockType[]
     */
    
public static function getInstalledList() {
        
$btl = new static();
        return 
$btl->get();
    }

    public static function 
resetBlockTypeDisplayOrder($column 'btID') {
        
$db Loader::db();
        
/** @var ConcreteCoreCacheCache $cache */
        
$cache Core::make('cache');
        
$stmt $db->Prepare("UPDATE BlockTypes SET btDisplayOrder = ? WHERE btID = ?");
        
$btDisplayOrder 1;
        
$blockTypes $db->GetArray("SELECT btID, btHandle, btIsInternal FROM BlockTypes ORDER BY {$column} ASC");
        foreach (
$blockTypes as $bt) {
            if (
$bt['btIsInternal']) {
                
$db->Execute($stmt, array(0$bt['btID']));
            } else {
                
$db->Execute($stmt, array($btDisplayOrder$bt['btID']));
                
$btDisplayOrder++;
            }
            
$cache->delete('blockTypeByID/' .$bt['btID']);
            
$cache->delete('blockTypeByHandle/' $bt['btHandle']);
        }
        
$cache->delete('blockTypeList');
    }

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