ModulePoll_EntityPoll

Package application.modules.poll
Inheritance class ModulePoll_EntityPoll » EntityORM » Entity » LsObject
Since 2.0
Source Code /application/classes/modules/poll/entity/Poll.entity.class.php
Сущность опроса

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
_aData array Данные сущности, на этот массив мапятся методы set* и get* Entity
_aManyToManyRelations array Объекты связей many_to_many EntityORM
_aOriginalData array Массив исходных данных сущности EntityORM
aBehaviors array Список поведений LsObject
aFields array Список полей таблицы сущности EntityORM
aRelations ModulePoll_EntityPoll
aRelationsData array Список данных связей EntityORM
aValidateErrors array Список ошибок валидации в разрезе полей, например Entity
aValidateRules ModulePoll_EntityPoll
bIsNew bool Флаг новая или нет сущность EntityORM
sPrimaryKey null|string Имя поля с первичным ключом в БД Entity
sValidateScenario string Сценарий валиадции полей Entity

Public Methods

Hide inherited methods

MethodDescriptionDefined By
Add() Добавление сущности в БД EntityORM
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
Delete() Удаление сущности из БД EntityORM
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
Init() Метод инициализации сущности, вызывается при её создании Entity
Reload() Обновляет данные сущности из БД EntityORM
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
Save() Сохранение сущности в БД (если новая то создается) EntityORM
ShowColumns() Возвращает список полей сущности EntityORM
ShowPrimaryIndex() Возвращает primary индекс сущности EntityORM
Update() Обновление сущности в БД EntityORM
ValidateCheckAnswersRaw() ModulePoll_EntityPoll
ValidateCheckTargetRaw() ModulePoll_EntityPoll
ValidateCheckTitle() ModulePoll_EntityPoll
ValidateCheckType() ModulePoll_EntityPoll
_SetIsNew() Установка флага "новая" EntityORM
_Validate() Выполняет валидацию данных сущности Entity
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля EntityORM
__clone() При клонировании сбрасываем поведения LsObject
__construct() Установка связей EntityORM
__get() Используется для доступа к связанным данным типа MANY_TO_MANY EntityORM
_addValidateError() Добавляет для поля ошибку в список ошибок Entity
_clearValidateErrors() Очищает список всех ошибок или для конкретного поля Entity
_createValidators() Создает и возвращает список валидаторов для сущности Entity
_getData() Получает массив данных сущности Entity
_getDataArray() Рекурсивное преобразование объекта и вложенных объектов в массив Entity
_getDataFields() Возвращает данные для списка полей сущности EntityORM
_getDataOne() Возвращает данные по конкретному полю Entity
_getField() Возвращает поле в нужном формате EntityORM
_getFields() Возвращает список полей сущности EntityORM
_getManyToManyRelationEntity() Возвращает сущность связи при many to many EntityORM
_getOriginalData() Возвращает все данные сущности EntityORM
_getOriginalDataOne() Возвращает "оригинальные" данные по конкретному полю EntityORM
_getPrimaryKey() Получение primary key из схемы таблицы EntityORM
_getPrimaryKeyValue() Получение значения primary key EntityORM
_getRelations() Возвращает список связей EntityORM
_getRelationsData() Возвращает список данный связей EntityORM
_getTreeParentKey() Получение имени родительского поля. Используется в связи RELATION_TYPE_TREE EntityORM
_getTreeParentKeyValue() Получение значения родителя. Используется в связи RELATION_TYPE_TREE EntityORM
_getValidateError() Возвращает первую ошибку для поля или среди всех полей Entity
_getValidateErrors() Возвращает список ошибок для всех полей или одного поля Entity
_getValidateRules() Возвращает список правил для валидации Entity
_getValidateScenario() Возвращает текущий сценарий валидации Entity
_getValidators() Возвращает список валидаторов с учетом текущего сценария Entity
_hasValidateErrors() Проверяет есть ли ошибки валидации Entity
_isNew() Новая или нет сущность EntityORM
_setData() Устанавливает данные сущности EntityORM
_setDataSafe() Устанавливает данные, но только те, которые есть в $this->aValidateRules Entity
_setManyToManyRelations() Устанавливает вспомогательные объекты для связи many_to_many EntityORM
_setRelationsData() Устанавливает данные связей EntityORM
_setValidateScenario() Устанавливает сценарий валидации Entity
getAncestors() Для сущности со связью RELATION_TYPE_TREE возвращает список всех предков EntityORM
getAnswerPercent() ModulePoll_EntityPoll
getChildren() Для сущности со связью RELATION_TYPE_TREE возвращает список прямых потомков EntityORM
getCountVoteAnswerMax() ModulePoll_EntityPoll
getDescendants() Для сущности со связью RELATION_TYPE_TREE возвращает список всех потомков EntityORM
getParent() Для сущности со связью RELATION_TYPE_TREE возвращает предка EntityORM
isAllowRemove() Проверяет возможность удаления опроса, не пользователем, а в принципе ModulePoll_EntityPoll
isAllowUpdate() Проверяет доступность опроса для изменения ModulePoll_EntityPoll
isAllowVote() Проверяет возможность голосования в опросе, не пользователем, а в принципе ModulePoll_EntityPoll
resetRelationsData() Сбрасывает данные необходимой связи EntityORM
setAncestors() Для сущности со связью RELATION_TYPE_TREE устанавливает предков EntityORM
setChildren() Для сущности со связью RELATION_TYPE_TREE устанавливает потомков EntityORM
setDescendants() Для сущности со связью RELATION_TYPE_TREE устанавливает потомков EntityORM
setParent() Для сущности со связью RELATION_TYPE_TREE устанавливает предка EntityORM

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject
_Method() Проксирует вызов методов в модуль сущности EntityORM
afterDelete() ModulePoll_EntityPoll
afterSave() ModulePoll_EntityPoll
beforeDelete() Хук, срабатывает перед удалением сущности EntityORM
beforeSave() ModulePoll_EntityPoll

Property Details

aRelations property
protected $aRelations;

aValidateRules property
protected $aValidateRules;

Method Details

ValidateCheckAnswersRaw() method
public void ValidateCheckAnswersRaw()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#130 (show)
public function ValidateCheckAnswersRaw()
{
    if (!
$this->_isNew() and !$this->isAllowUpdate()) {
        return 
true;
    }

    
$aAnswersRaw $this->getAnswersRaw();
    if (!
is_array($aAnswersRaw)) {
        return 
'Необходимо заполнить варианты ответов';
    }
    if (
count($aAnswersRaw) < 2) {
        return 
'Необходимо заполнить больше одного варианта ответов';
    }
    
/**
     * Здесь может быть два варианта - создание опроса или редактирование, при редактирование могут передаваться ID ответов
     */
    
if (!$this->_isNew()) {
        
$aAnswersOld $this->Poll_GetAnswerItemsByFilter(array(
                
'poll_id' => $this->getId(),
                
'#index-from-primary'
            
));
    } else {
        
$aAnswersOld = array();
    }
    
$aAnswers = array();
    foreach (
$aAnswersRaw as $aAnswer) {
        if (
$this->_isNew() or !(isset($aAnswer['id']) and isset($aAnswersOld[$aAnswer['id']]) and $oAnswer $aAnswersOld[$aAnswer['id']])) {
            
$oAnswer Engine::GetEntity('ModulePoll_EntityAnswer');
        }
        if (
$oAnswer->getId()) {
            
/**
             * Фильтруем список старых ответов для будущего удаления оставшихся
             */
            
unset($aAnswersOld[$oAnswer->getId()]);
        }
        
$oAnswer->setTitle(isset($aAnswer['title']) ? $aAnswer['title'] : '');
        if (!
$oAnswer->_Validate()) {
            return 
$oAnswer->_getValidateError();
        }
        
$aAnswers[] = $oAnswer;
    }
    
$this->setAnswersObject($aAnswers);

    foreach (
$aAnswersOld as $oAnswer) {
        if (
$oAnswer->getCountVote()) {
            return 
'Нельзя удалить вариант ответа, за который уже голосовали';
        }
    }

    
$this->setAnswersObjectForRemove($aAnswersOld);
    return 
true;
}

ValidateCheckTargetRaw() method
public void ValidateCheckTargetRaw()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#183 (show)
public function ValidateCheckTargetRaw()
{
    
$aTarget $this->getTargetRaw();

    
$sTargetType = isset($aTarget['type']) ? $aTarget['type'] : '';
    
$sTargetId = isset($aTarget['id']) ? $aTarget['id'] : '';
    
$sTargetTmp = isset($aTarget['tmp']) ? $aTarget['tmp'] : '';

    if (
$sTargetId) {
        
$sTargetTmp null;
        if (!
$this->Poll_CheckTarget($sTargetType$sTargetId)) {
            return 
'Неверный тип объекта';
        }
    } else {
        
$sTargetId null;
        if (!
$sTargetTmp or !$this->Poll_IsAllowTargetType($sTargetType)) {
            return 
'Неверный тип объекта';
        }
        if (
$this->Poll_GetPollByFilter(array('target_tmp' => $sTargetTmp'target_type <>' => $sTargetType))) {
            return 
'Временный идентификатор уже занят';
        }
    }

    
$this->setTargetType($sTargetType);
    
$this->setTargetId($sTargetId);
    
$this->setTargetTmp($sTargetTmp);
    return 
true;
}

ValidateCheckTitle() method
public void ValidateCheckTitle()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#103 (show)
public function ValidateCheckTitle()
{
    
$this->setTitle(htmlspecialchars($this->getTitle()));
    return 
true;
}

ValidateCheckType() method
public void ValidateCheckType()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#109 (show)
public function ValidateCheckType()
{
    if (!
$this->_isNew() and $this->getCountVote()) {
        
/**
         * Запрещаем смену типа
         */
        
$this->setCountAnswerMax($this->_getOriginalDataOne('count_answer_max'));
        return 
true;
    }
    
$iCount $this->getCountAnswerMax();
    if (
$this->getType() == 'one') {
        
$this->setCountAnswerMax(1);
        return 
true;
    } else {
        if (
$iCount 2) {
            return 
'Максимальное количество вариантов ответа должно быть больше одного';
        }
    }
    return 
true;
}

afterDelete() method
protected void afterDelete()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#84 (show)
protected function afterDelete()
{
    
parent::afterDelete();
    
/**
     * Удаляем варианты ответов
     */
    
$aAnswerItems $this->Poll_GetAnswerItemsByPollId($this->getId());
    foreach (
$aAnswerItems as $oAnswer) {
        
$oAnswer->Delete();
    }
    
/**
     * Удаляем голосования
     */
    
$aVoteItems $this->Poll_GetVoteItemsByPollId($this->getId());
    foreach (
$aVoteItems as $oVote) {
        
$oVote->Delete();
    }
}

afterSave() method
protected void afterSave()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#62 (show)
protected function afterSave()
{
    
parent::afterSave();
    
/**
     * Сохраняем варианты
     */
    
if ($aAnswers $this->getAnswersObject()) {
        foreach (
$aAnswers as $oAnswer) {
            
$oAnswer->setPollId($this->getId());
            
$oAnswer->Save();
        }
    }
    
/**
     * Удаляем варианты
     */
    
if ($aAnswers $this->getAnswersObjectForRemove()) {
        foreach (
$aAnswers as $oAnswer) {
            
$oAnswer->Delete();
        }
    }
}

beforeSave() method
protected void beforeSave()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#52 (show)
protected function beforeSave()
{
    if (
$bResult parent::beforeSave()) {
        if (
$this->_isNew()) {
            
$this->setDateCreate(date("Y-m-d H:i:s"));
        }
    }
    return 
$bResult;
}

getAnswerPercent() method
public void getAnswerPercent($oAnswer)
$oAnswer
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#256 (show)
public function getAnswerPercent($oAnswer)
{
    
$iCountAll $this->getCountVote();
    if (
$iCountAll == 0) {
        return 
0;
    } else {
        return 
number_format(round($oAnswer->getCountVote() * 100 $iCountAll1), 1'.''');
    }
}

getCountVoteAnswerMax() method
public void getCountVoteAnswerMax()
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#266 (show)
public function getCountVoteAnswerMax()
{
    
$iMax 0;
    
$aAnswers $this->getAnswers();
    foreach (
$aAnswers as $oAnswer) {
        if (
$oAnswer->getCountVote() > $iMax) {
            
$iMax $oAnswer->getCountVote();
        }
    }
    return 
$iMax;
}

isAllowRemove() method
public bool isAllowRemove()
{return} bool
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#233 (show)
public function isAllowRemove()
{
    if (
$this->getCountVote() || $this->getCountAbstain()) {
        return 
false;
    }
    return 
true;
}

Проверяет возможность удаления опроса, не пользователем, а в принципе Важно понимать, что здесь нет проверки на права доступа

isAllowUpdate() method
public bool isAllowUpdate()
{return} bool
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#218 (show)
public function isAllowUpdate()
{
    
$iTime $this->getDateCreate();
    if ((
time() - strtotime($iTime)) > Config::Get('module.poll.time_limit_update')) {
        return 
false;
    }
    return 
true;
}

Проверяет доступность опроса для изменения Важно понимать, что здесь нет проверки на права доступа

isAllowVote() method
public bool isAllowVote()
{return} bool
Source Code: /application/classes/modules/poll/entity/Poll.entity.class.php#247 (show)
public function isAllowVote()
{
    
$sDateEnd $this->getDateEnd();
    if (
$sDateEnd and (time() - strtotime($sDateEnd)) > 0) {
        return 
false;
    }
    return 
true;
}

Проверяет возможность голосования в опросе, не пользователем, а в принципе Важно понимать, что здесь нет проверки на права доступа