Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Attribute/Type.php
Строк: 234
<?php

namespace ConcreteCoreAttribute;

use 
ConcreteCoreFoundationObject;
use 
ConcreteCoreAttributeView as AttributeTypeView;
use 
GettextTranslations;
use 
Database;
use 
ConcreteCorePackagePackageList;
use 
Environment;
use 
Package;
use 
Core;

/**
 * Base class for attribute types.
 *
 * @method static Type[] getList(string|false $akCategoryHandle) Deprecated method. Use Key::getAttributeTypeList instead.
 */
class Type extends Object
{
    
/** @var  ConcreteCoreAttributeController */
    
public $controller;
    public 
$atName;
    public 
$atHandle;

    protected 
$atID;
    protected 
$pkgID;

    public function 
getAttributeTypeID()
    {
        return 
$this->atID;
    }

    public function 
getAttributeTypeHandle()
    {
        return 
$this->atHandle;
    }

    public function 
getAttributeTypeName()
    {
        return 
$this->atName;
    }

    public function 
getController()
    {
        return 
$this->controller;
    }

    
/** Returns the display name for this attribute type (localized and escaped accordingly to $format)
     * @param string $format = 'html'
     *    Escape the result in html format (if $format is 'html').
     *    If $format is 'text' or any other value, the display name won't be escaped.
     *
     * @return string
     */
    
public function getAttributeTypeDisplayName($format 'html')
    {
        
$value tc('AttributeTypeName'$this->getAttributeTypeName());
        switch (
$format) {
            case 
'html':
                return 
h($value);
            case 
'text':
            default:
                return 
$value;
        }
    }

    public static function 
getByID($atID)
    {
        
$db Database::get();
        
$row $db->GetRow('select atID, pkgID, atHandle, atName from AttributeTypes where atID = ?', array($atID));
        
$at = new static();
        
$at->setPropertiesFromArray($row);
        
$at->loadController();

        return 
$at;
    }

    public function 
__destruct()
    {
        unset(
$this->controller);
    }

    public static function 
__callStatic($name$arguments)
    {
        if (
strcasecmp($name'getList') === 0) {
            return 
call_user_func_array('static::getAttributeTypeList'$arguments);
        }
        
trigger_error("Call to undefined method ".__CLASS__."::$name()"E_USER_ERROR);
    }

    public static function 
getAttributeTypeList($akCategoryHandle false)
    {
        
$db Database::get();
        
$list = array();
        if (
$akCategoryHandle == false) {
            
$r $db->Execute('select atID from AttributeTypes order by atID asc');
        } else {
            
$r $db->Execute(
                
'select atID from AttributeTypeCategories inner join AttributeKeyCategories on AttributeTypeCategories.akCategoryID = AttributeKeyCategories.akCategoryID and AttributeKeyCategories.akCategoryHandle = ? order by atID asc',
                array(
$akCategoryHandle)
            );
        }

        while (
$row $r->FetchRow()) {
            
$list[] = static::getByID($row['atID']);
        }
        
$r->Close();

        return 
$list;
    }

    public function 
export($xml)
    {
        
$db Database::get();
        
$atype $xml->addChild('attributetype');
        
$atype->addAttribute('handle'$this->getAttributeTypeHandle());
        
$atype->addAttribute('package'$this->getPackageHandle());
        
$categories $db->GetCol(
            
'select akCategoryHandle from AttributeKeyCategories inner join AttributeTypeCategories where AttributeKeyCategories.akCategoryID = AttributeTypeCategories.akCategoryID and AttributeTypeCategories.atID = ?',
            array(
$this->getAttributeTypeID())
        );
        if (
count($categories) > 0) {
            
$cat $atype->addChild('categories');
            foreach (
$categories as $catHandle) {
                
$cat->addChild('category')->addAttribute('handle'$catHandle);
            }
        }
    }

    public static function 
exportList($xml)
    {
        
$attribs = static::getAttributeTypeList();
        
$db Database::get();
        
$axml $xml->addChild('attributetypes');
        foreach (
$attribs as $at) {
            
$at->export($axml);
        }
    }

    public function 
delete()
    {
        
$db Database::get();
        if (
method_exists($this->controller'deleteType')) {
            
$this->controller->deleteType();
        }
        
$db->Execute("delete from AttributeTypes where atID = ?", array($this->atID));
        
$db->Execute("delete from AttributeTypeCategories where atID = ?", array($this->atID));
    }

    public static function 
getListByPackage($pkg)
    {
        
$db Database::get();
        
$list = array();
        
$r $db->Execute(
            
'select atID from AttributeTypes where pkgID = ? order by atID asc',
            array(
$pkg->getPackageID())
        );
        while (
$row $r->FetchRow()) {
            
$list[] = static::getByID($row['atID']);
        }
        
$r->Close();

        return 
$list;
    }

    public function 
getPackageID()
    {
        return 
$this->pkgID;
    }

    public function 
getPackageHandle()
    {
        return 
PackageList::getHandle($this->pkgID);
    }

    public function 
isAssociatedWithCategory($cat)
    {
        
$db Database::get();
        
$r $db->GetOne(
            
"select count(akCategoryID) from AttributeTypeCategories where akCategoryID = ? and atID = ?",
            array(
$cat->getAttributeKeyCategoryID(), $this->getAttributeTypeID())
        );

        return 
$r 0;
    }

    public static function 
getByHandle($atHandle)
    {
        
// Handle legacy handles
        
switch ($atHandle) {
            case 
'date':
                
$atHandle 'date_time';
                break;
        }

        
$db Database::get();
        
$row $db->GetRow(
            
'select atID, pkgID, atHandle, atName from AttributeTypes where atHandle = ?',
            array(
$atHandle)
        );
        if (
$row && $row['atID']) {
            
$at = new static();
            
$at->setPropertiesFromArray($row);
            
$at->loadController();

            return 
$at;
        }
    }

    public static function 
add($atHandle$atName$pkg false)
    {
        
$pkgID 0;
        if (
is_object($pkg)) {
            
$pkgID $pkg->getPackageID();
        }
        
$db Database::get();
        
$db->Execute(
            
'insert into AttributeTypes (atHandle, atName, pkgID) values (?, ?, ?)',
            array(
$atHandle$atName$pkgID)
        );
        
$id $db->Insert_ID();
        
$est = static::getByID($id);

        
$path $est->getAttributeTypeFilePath(FILENAME_ATTRIBUTE_DB);
        if (
$path) {
            
Package::installDB($path);
        }

        return 
$est;
    }

    public function 
getValue($avID)
    {
        
$cnt $this->getController();

        return 
$cnt->getValue($avID);
    }

    public function 
render($view$ak false$value false$return false)
    {
        
// local scope
        
if ($value) {
            
$av = new AttributeTypeView($value);
        } else {
            if (
$ak) {
                
$av = new AttributeTypeView($ak);
            } else {
                
$av = new AttributeTypeView($this);
            }
        }
        
ob_start();
        
$av->render($view);
        
$contents ob_get_contents();
        
ob_end_clean();
        if (
$return) {
            return 
$contents;
        } else {
            print 
$contents;
        }
    }

    public function 
getAttributeTypeIconSRC()
    {
        
$env Environment::get();
        
$url $env->getURL(
            
implode('/', array(DIRNAME_ATTRIBUTES '/' $this->getAttributeTypeHandle() . '/' FILENAME_BLOCK_ICON)),
            
$this->getPackageHandle()
        );

        return 
$url;
    }

    public function 
getAttributeTypeFilePath($_file)
    {
        
$env Environment::get();
        
$r $env->getRecord(
            
implode('/', array(DIRNAME_ATTRIBUTES '/' $this->getAttributeTypeHandle() . '/' $_file)),
            
$this->getPackageHandle()
        );
        if (
$r->exists()) {
            return 
$r->file;
        }
    }

    public function 
getAttributeTypeFileURL($_file)
    {
        
$env Environment::get();
        
$r $env->getRecord(
            
implode('/', array(DIRNAME_ATTRIBUTES '/' $this->getAttributeTypeHandle() . '/' $_file)),
            
$this->getPackageHandle()
        );
        if (
$r->exists()) {
            return 
$r->url;
        }
    }

    public function 
loadController()
    {
        
$env Environment::get();
        
$r $env->getRecord(DIRNAME_ATTRIBUTES '/' $this->atHandle '/' FILENAME_CONTROLLER);
        
$prefix $r->override true $this->getPackageHandle();
        
$atHandle Core::make('helper/text')->camelcase($this->atHandle);
        
$class core_class('Attribute\' . $atHandle . '\Controller', $prefix);
        $this->controller = Core::make($class, array($this));
    }

    public static function exportTranslations()
    {
        $translations = new Translations();
        $attribs = static::getAttributeTypeList();
        foreach ($attribs as $type) {
            $translations->insert('
AttributeTypeName', $type->getAttributeTypeName());
        }

        return $translations;
    }
}
Онлайн: 0
Реклама