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

namespace ConcreteCoreAttributeKey;

use 
ConcreteCoreAttributeType as AttributeType;
use 
Database;
use 
CacheLocal;
use 
Package;
use 
ConcreteCoreAttributeValueValueList as AttributeValueList;
use 
ConcreteCoreAttributeValueUserValue as UserAttributeValue;

class 
UserKey extends Key
{
    public static function 
getDefaultIndexedSearchTable()
    {
        return 
'UserSearchIndexAttributes';
    }

    protected 
$searchIndexFieldDefinition = array(
        
'columns' => array(
            array(
'name' => 'uID''type' => 'integer''options' => array('unsigned' => true'default' => 0'notnull' => true)),
        ),
        
'primary' => array('uID'),
    );

    public static function 
getAttributes($uID$method 'getValue')
    {
        
$db Database::connection();
        
$values $db->fetchAll("select avID, akID from UserAttributeValues where uID = ?", array($uID));
        
$avl = new AttributeValueList();
        foreach (
$values as $val) {
            
$ak = static::getByID($val['akID']);
            if (
is_object($ak)) {
                
$value $ak->getAttributeValue($val['avID'], $method);
                
$avl->addAttributeValue($ak$value);
            }
        }

        return 
$avl;
    }

    public function 
getAttributeKeyDisplayOrder()
    {
        return 
$this->displayOrder;
    }

    public function 
load($akIdentifier$loadBy 'akID')
    {
        
parent::load($akIdentifier$loadBy);
        if (isset(
$this->akID) && $this->akID) {
            
$db Database::connection();
            
$row $db->GetRow("select uakProfileDisplay, uakMemberListDisplay, displayOrder, uakProfileEdit, uakProfileEditRequired, uakRegisterEdit, uakRegisterEditRequired, uakIsActive from UserAttributeKeys where akID = ?", array($this->akID));
            
$this->setPropertiesFromArray($row);
        }
    }

    public function 
getAttributeValue($avID$method 'getValue')
    {
        
$av UserAttributeValue::getByID($avID);
        
$av->setAttributeKey($this);

        return 
$av->{$method}();
    }

    public static function 
getByID($akID)
    {
        
$ak = new static();
        
$ak->load($akID);
        if (
$ak->getAttributeKeyID() > 0) {
            return 
$ak;
        }
    }

    public static function 
getByHandle($akHandle)
    {
        
$ak CacheLocal::getEntry('user_attribute_key_by_handle'$akHandle);
        if (
is_object($ak)) {
            return 
$ak;
        } elseif (
$ak == -1) {
            return 
false;
        }
        
$ak = -1;
        
$db Database::connection();

        
$q "SELECT ak.akID
            FROM AttributeKeys ak
            INNER JOIN AttributeKeyCategories akc ON ak.akCategoryID = akc.akCategoryID
            WHERE ak.akHandle = ?
            AND akc.akCategoryHandle = 'user'"
;
        
$akID $db->fetchColumn($q, array($akHandle));
        if (
$akID 0) {
            
$ak = static::getByID($akID);
        }

        
CacheLocal::set('user_attribute_key_by_handle'$akHandle$ak);
        if (
$ak === -1) {
            return 
false;
        }

        return 
$ak;
    }

    public function 
export($axml$exporttype 'full')
    {
        
$akey parent::export($axml$exporttype);
        
$akey->addAttribute('profile-displayed'$this->uakProfileDisplay);
        
$akey->addAttribute('profile-editable'$this->uakProfileEdit);
        
$akey->addAttribute('profile-required'$this->uakProfileEditRequired);
        
$akey->addAttribute('register-editable'$this->uakRegisterEdit);
        
$akey->addAttribute('register-required'$this->uakRegisterEditRequired);
        
$akey->addAttribute('member-list-displayed'$this->uakMemberListDisplay);

        return 
$akey;
    }

    public static function 
import(SimpleXMLElement $ak)
    {
        
$type AttributeType::getByHandle($ak['type']);
        
$pkg false;
        if (
$ak['package']) {
            
$pkg Package::getByHandle($ak['package']);
        }
        
$akn = static::add($type, array(
            
'akHandle' => $ak['handle'],
            
'akName' => $ak['name'],
            
'akIsSearchableIndexed' => $ak['indexed'],
            
'akIsSearchable' => $ak['searchable'],
            
'uakProfileDisplay' => $ak['profile-displayed'],
            
'uakProfileEdit' => $ak['profile-editable'],
            
'uakProfileEditRequired' => $ak['profile-required'],
            
'uakRegisterEdit' => $ak['register-editable'],
            
'uakRegisterEditRequired' => $ak['register-required'],
            
'uakMemberListDisplay' => $ak['member-list-displayed'],
        ), 
$pkg);

        
$akn->getController()->importKey($ak);
    }

    public function 
isAttributeKeyDisplayedOnProfile()
    {
        return 
$this->uakProfileDisplay;
    }

    public function 
isAttributeKeyEditableOnProfile()
    {
        return 
$this->uakProfileEdit;
    }

    public function 
isAttributeKeyRequiredOnProfile()
    {
        return 
$this->uakProfileEditRequired;
    }

    public function 
isAttributeKeyEditableOnRegister()
    {
        return 
$this->uakRegisterEdit;
    }

    public function 
isAttributeKeyRequiredOnRegister()
    {
        return 
$this->uakRegisterEditRequired;
    }

    public function 
isAttributeKeyDisplayedOnMemberList()
    {
        return 
$this->uakMemberListDisplay;
    }

    public function 
isAttributeKeyActive()
    {
        return 
$this->uakIsActive;
    }

    public function 
activate()
    {
        
$db Database::connection();
        
$this->refreshCache();
        
$db->executeQuery('update UserAttributeKeys set uakIsActive = 1 where akID = ?', array($this->akID));
    }

    public function 
deactivate()
    {
        
$db Database::connection();
        
$this->refreshCache();
        
$db->executeQuery('update UserAttributeKeys set uakIsActive = 0 where akID = ?', array($this->akID));
    }

    public static function 
getList()
    {
        
$list parent::getAttributeKeyList('user');
        
usort($list, function ($a$b) {
            if (
$a->getAttributeKeyDisplayOrder() == $b->getAttributeKeyDisplayOrder()) {
                return 
0;
            } else {
                return (
$a->getAttributeKeyDisplayOrder() < $b->getAttributeKeyDisplayOrder()) ? -1;
            }
        });

        return 
$list;
    }

    protected function 
saveAttribute($uo$value false)
    {
        
// We check a cID/cvID/akID combo, and if that particular combination has an attribute value ID that
        // is NOT in use anywhere else on the same cID, cvID, akID combo, we use it (so we reuse IDs)
        // otherwise generate new IDs
        
$av $uo->getAttributeValueObject($thistrue);
        
parent::saveAttribute($av$value);
        
$db Database::connection();
        
$v = array($uo->getUserID(), $this->getAttributeKeyID(), $av->getAttributeValueID());
        
$db->Replace('UserAttributeValues', array(
            
'uID' => $uo->getUserID(),
            
'akID' => $this->getAttributeKeyID(),
            
'avID' => $av->getAttributeValueID(),
        ), array(
'uID''akID'));

        
$uo->reindex();
        unset(
$uo);
    }

    public static function 
add($type$args$pkg false)
    {
        
CacheLocal::delete('user_attribute_key_by_handle'$args['akHandle']);

        
$ak parent::addAttributeKey('user'$type$args$pkg);

        
extract($args);

        if (
$uakProfileDisplay != 1) {
            
$uakProfileDisplay 0;
        }
        if (
$uakMemberListDisplay != 1) {
            
$uakMemberListDisplay 0;
        }
        if (
$uakProfileEdit != 1) {
            
$uakProfileEdit 0;
        }
        if (
$uakProfileEditRequired != 1) {
            
$uakProfileEditRequired 0;
        }
        if (
$uakRegisterEdit != 1) {
            
$uakRegisterEdit 0;
        }
        if (
$uakRegisterEditRequired != 1) {
            
$uakRegisterEditRequired 0;
        }

        if (isset(
$uakIsActive) && (!$uakIsActive)) {
            
$uakIsActive 0;
        } else {
            
$uakIsActive 1;
        }

        
$db Database::connection();
        
$displayOrder $db->fetchColumn('select max(displayOrder) from UserAttributeKeys');
        if (!
$displayOrder) {
            
$displayOrder 0;
        }
        ++
$displayOrder;
        
$v = array($ak->getAttributeKeyID(), $uakProfileDisplay$uakMemberListDisplay$uakProfileEdit$uakProfileEditRequired$uakRegisterEdit$uakRegisterEditRequired$displayOrder$uakIsActive);
        
$db->executeQuery('insert into UserAttributeKeys (akID, uakProfileDisplay, uakMemberListDisplay, uakProfileEdit, uakProfileEditRequired, uakRegisterEdit, uakRegisterEditRequired, displayOrder, uakIsActive) values (?, ?, ?, ?, ?, ?, ?, ?, ?)'$v);

        
$nak = new static();
        
$nak->load($ak->getAttributeKeyID());

        return 
$nak;
    }

    public function 
update($args)
    {
        
$ak parent::update($args);

        
extract($args);

        if (
$uakProfileDisplay != 1) {
            
$uakProfileDisplay 0;
        }
        if (
$uakMemberListDisplay != 1) {
            
$uakMemberListDisplay 0;
        }
        if (
$uakProfileEdit != 1) {
            
$uakProfileEdit 0;
        }
        if (
$uakProfileEditRequired != 1) {
            
$uakProfileEditRequired 0;
        }
        if (
$uakRegisterEdit != 1) {
            
$uakRegisterEdit 0;
        }
        if (
$uakRegisterEditRequired != 1) {
            
$uakRegisterEditRequired 0;
        }
        
$db Database::connection();
        
$v = array($uakProfileDisplay$uakMemberListDisplay$uakProfileEdit$uakProfileEditRequired$uakRegisterEdit$uakRegisterEditRequired$ak->getAttributeKeyID());
        
$db->executeQuery('update UserAttributeKeys set uakProfileDisplay = ?, uakMemberListDisplay = ?, uakProfileEdit= ?, uakProfileEditRequired = ?, uakRegisterEdit = ?, uakRegisterEditRequired = ? where akID = ?'$v);
    }

    public function 
delete()
    {
        
parent::delete();
        
$db Database::connection();
        
$db->executeQuery('delete from UserAttributeKeys where akID = ?', array($this->getAttributeKeyID()));
        
$r $db->executeQuery('select avID from UserAttributeValues where akID = ?', array($this->getAttributeKeyID()));
        while (
$row $r->FetchRow()) {
            
$db->executeQuery('delete from AttributeValues where avID = ?', array($row['avID']));
        }
        
$db->executeQuery('delete from UserAttributeValues where akID = ?', array($this->getAttributeKeyID()));
    }

    public static function 
getColumnHeaderList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsColumnHeader' => 1));
    }

    public static function 
getEditableList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsEditable' => 1));
    }

    public static function 
getSearchableList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsSearchable' => 1));
    }

    public static function 
getSearchableIndexedList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsSearchableIndexed' => 1));
    }

    public static function 
getImporterList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsAutoCreated' => 1));
    }

    public static function 
getPublicProfileList()
    {
        
$tattribs self::getList();
        
$attribs = array();
        foreach (
$tattribs as $uak) {
            if ((!
$uak->isAttributeKeyDisplayedOnProfile()) || (!$uak->isAttributeKeyActive())) {
                continue;
            }
            
$attribs[] = $uak;
        }
        unset(
$tattribs);

        return 
$attribs;
    }

    public static function 
getRegistrationList()
    {
        
$tattribs self::getList();
        
$attribs = array();
        foreach (
$tattribs as $uak) {
            if ((!
$uak->isAttributeKeyEditableOnRegister()) || (!$uak->isAttributeKeyActive())) {
                continue;
            }
            
$attribs[] = $uak;
        }
        unset(
$tattribs);

        return 
$attribs;
    }

    public static function 
getMemberListList()
    {
        
$tattribs self::getList();
        
$attribs = array();
        foreach (
$tattribs as $uak) {
            if ((!
$uak->isAttributeKeyDisplayedOnMemberList()) || (!$uak->isAttributeKeyActive())) {
                continue;
            }
            
$attribs[] = $uak;
        }
        unset(
$tattribs);

        return 
$attribs;
    }

    public static function 
getEditableInProfileList()
    {
        
$tattribs self::getList();
        
$attribs = array();
        foreach (
$tattribs as $uak) {
            if ((!
$uak->isAttributeKeyEditableOnProfile()) || (!$uak->isAttributeKeyActive())) {
                continue;
            }
            
$attribs[] = $uak;
        }
        unset(
$tattribs);

        return 
$attribs;
    }

    public static function 
getUserAddedList()
    {
        return 
parent::getAttributeKeyList('user', array('akIsAutoCreated' => 0));
    }

    public static function 
updateAttributesDisplayOrder($uats)
    {
        
$db Database::connection();
        for (
$i 0$i count($uats); ++$i) {
            
$uak = static::getByID($uats[$i]);
            
$uak->refreshCache();
            
$v = array($uats[$i]);
            
$db->executeQuery("update UserAttributeKeys set displayOrder = {$i} where akID = ?"$v);
        }
    }
}
Онлайн: 0
Реклама