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
Property | Type | Description | Defined 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
Method | Description | Defined 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
Method | Description | Defined 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 / $iCountAll, 1), 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;
}
Проверяет возможность голосования в опросе, не пользователем, а в принципе Важно понимать, что здесь нет проверки на права доступа