/** * Инициализация начального списка необходимых для загрузки компонентов */ public function InitComponentsList() { if ($aList = Config::Get('components') and is_array($aList)) { func_array_simpleflip($aList, array()); $this->aComponentsList = array_merge_recursive($this->aComponentsList, $aList); } }
/** * Получает дополнительные данные(объекты) для блогов по их ID * */ public function GetBlogsAdditionalData($aBlogId, $aAllowData = array('vote', 'owner' => array(), 'relation_user')) { func_array_simpleflip($aAllowData); if (!is_array($aBlogId)) { $aBlogId = array($aBlogId); } /** * Получаем блоги */ $aBlogs = $this->GetBlogsByArrayId($aBlogId); /** * Формируем ID дополнительных данных, которые нужно получить */ $aUserId = array(); foreach ($aBlogs as $oBlog) { if (isset($aAllowData['owner'])) { $aUserId[] = $oBlog->getOwnerId(); } } /** * Получаем дополнительные данные */ $aBlogUsers = array(); $aBlogsVote = array(); $aUsers = isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId); if (isset($aAllowData['relation_user']) and $this->oUserCurrent) { $aBlogUsers = $this->GetBlogUsersByArrayBlog($aBlogId, $this->oUserCurrent->getId()); } if (isset($aAllowData['vote']) and $this->oUserCurrent) { $aBlogsVote = $this->Vote_GetVoteByArray($aBlogId, 'blog', $this->oUserCurrent->getId()); } /** * Добавляем данные к результату - списку блогов */ foreach ($aBlogs as $oBlog) { if (isset($aUsers[$oBlog->getOwnerId()])) { $oBlog->setOwner($aUsers[$oBlog->getOwnerId()]); } else { $oBlog->setOwner(null); // или $oBlog->setOwner(new ModuleUser_EntityUser()); } if (isset($aBlogUsers[$oBlog->getId()])) { $oBlog->setUserIsJoin(true); $oBlog->setUserIsAdministrator($aBlogUsers[$oBlog->getId()]->getIsAdministrator()); $oBlog->setUserIsModerator($aBlogUsers[$oBlog->getId()]->getIsModerator()); } else { $oBlog->setUserIsJoin(false); $oBlog->setUserIsAdministrator(false); $oBlog->setUserIsModerator(false); } if (isset($aBlogsVote[$oBlog->getId()])) { $oBlog->setVote($aBlogsVote[$oBlog->getId()]); } else { $oBlog->setVote(null); } } return $aBlogs; }
/** * Получает дополнительные данные(объекты) для юзеров по их ID * */ public function GetUsersAdditionalData($aUserId, $aAllowData = array('vote', 'session', 'friend')) { func_array_simpleflip($aAllowData); if (!is_array($aUserId)) { $aUserId = array($aUserId); } /** * Получаем юзеров */ $aUsers = $this->GetUsersByArrayId($aUserId); /** * Получаем дополнительные данные */ $aSessions = array(); $aFriends = array(); $aVote = array(); if (isset($aAllowData['session'])) { $aSessions = $this->GetSessionsByArrayId($aUserId); } if (isset($aAllowData['friend']) and $this->oUserCurrent) { $aFriends = $this->GetFriendsByArray($aUserId, $this->oUserCurrent->getId()); } if (isset($aAllowData['vote']) and $this->oUserCurrent) { $aVote = $this->Vote_GetVoteByArray($aUserId, 'user', $this->oUserCurrent->getId()); } /** * Добавляем данные к результату */ foreach ($aUsers as $oUser) { if (isset($aSessions[$oUser->getId()])) { $oUser->setSession($aSessions[$oUser->getId()]); } else { $oUser->setSession(null); // или $oUser->setSession(new ModuleUser_EntitySession()); } if ($aFriends && isset($aFriends[$oUser->getId()])) { $oUser->setUserFriend($aFriends[$oUser->getId()]); } else { $oUser->setUserFriend(null); } if (isset($aVote[$oUser->getId()])) { $oUser->setVote($aVote[$oUser->getId()]); } else { $oUser->setVote(null); } } return $aUsers; }
public function GetQuestionAdditionalData($aQuestionId, $aAllowData = null, $aOrder = null) { if (is_null($aAllowData)) { $aAllowData = array('owner' => array()); } func_array_simpleflip($aAllowData); if (!is_array($aQuestionId)) { $aQuestionId = array($aQuestionId); } $aQuestion = $this->GetQuestionByArrayId($aQuestionId, $aOrder); $aCategoryId = array(); foreach ($aQuestion as $oQuestion) { $aCategoryId[] = $oQuestion->getCategoryId(); } $aCategories = $this->PluginReceptiondesk_Category_GetCategoryAdditionalData($aCategoryId); foreach ($aQuestion as $oQuestion) { if (isset($aCategories[$oQuestion->getCategoryId()])) { $oQuestion->setCategory($aCategories[$oQuestion->getCategoryId()]); } else { $oQuestion->setCategory(null); } } return $aQuestion; }
/** * Получить список сущностей по фильтру * * @param array $aFilter Фильтр * @param string|null $sEntityFull Название класса сущности * @return array */ public function GetItemsByFilter($aFilter = array(), $sEntityFull = null) { if (is_null($aFilter)) { $aFilter = array(); } $sEntityFull = $this->_NormalizeEntityRootName($sEntityFull); $aFilter = $this->_applyScopes($sEntityFull, $aFilter); /** * Хук для возможности изменения фильтра */ $this->RunBehaviorHook('module_orm_GetItemsByFilter_before', array('aFilter' => &$aFilter, 'sEntityFull' => $sEntityFull), true); // Если параметр #cache указан и пуст, значит игнорируем кэширование для запроса if (array_key_exists('#cache', $aFilter) && !$aFilter['#cache']) { $aEntities = $this->oMapperORM->GetItemsByFilter($aFilter, $sEntityFull); } else { $aFilterCache = $aFilter; unset($aFilterCache['#with']); $sCacheKey = $sEntityFull . '_items_by_filter_' . serialize($aFilterCache); $aCacheTags = array($sEntityFull . '_save', $sEntityFull . '_delete'); $iCacheTime = 60 * 60 * 24; // скорее лучше хранить в свойстве сущности, для возможности выборочного переопределения // переопределяем из параметров if (isset($aFilter['#cache'][0])) { $sCacheKey = $aFilter['#cache'][0]; } if (isset($aFilter['#cache'][1])) { $aCacheTags = $aFilter['#cache'][1]; } if (isset($aFilter['#cache'][2])) { $iCacheTime = $aFilter['#cache'][2]; } if (false === ($aEntities = $this->Cache_Get($sCacheKey))) { $aEntities = $this->oMapperORM->GetItemsByFilter($aFilter, $sEntityFull); $this->Cache_Set($aEntities, $sCacheKey, $aCacheTags, $iCacheTime); } } /** * Если необходимо подцепить связанные данные */ if (count($aEntities) and isset($aFilter['#with'])) { if (!is_array($aFilter['#with'])) { $aFilter['#with'] = array($aFilter['#with']); } /** * Приводим значение к единой форме ассоциативного массива: array('user'=>array(), 'topic'=>array('blog_id'=>123) ) */ func_array_simpleflip($aFilter['#with'], array()); /** * Формируем список примари ключей */ $aEntityPrimaryKeys = array(); foreach ($aEntities as $oEntity) { $aEntityPrimaryKeys[] = $oEntity->_getPrimaryKeyValue(); } $oEntityEmpty = Engine::GetEntity($sEntityFull); $aRelations = $oEntityEmpty->_getRelations(); foreach ($aFilter['#with'] as $sRelationName => $aRelationFilter) { if (!isset($aRelations[$sRelationName])) { continue; } /** * Если нужна дополнительная обработка через коллбек * Параметр в обработчике должен приниматься по ссылке */ if (isset($aRelationFilter['#callback-filter']) and $aRelationFilter['#callback-filter'] instanceof Closure) { $callback = $aRelationFilter['#callback-filter']; $callback($aEntities, $aRelationFilter); } /** * Если необходимо, то выставляем сразу нужное значение и не делаем никаких запросов */ if (isset($aRelationFilter['#value-set'])) { foreach ($aEntities as $oEntity) { $oEntity->_setData(array($sRelationName => $aRelationFilter['#value-set'])); } continue; } /** * Чистим фильтр от коллбека, иначе он может пройти дальше по цепочке вызовов */ unset($aRelationFilter['#callback-filter']); $sRelType = $aRelations[$sRelationName]['type']; $sRelEntity = $this->Plugin_GetRootDelegater('entity', $aRelations[$sRelationName]['rel_entity']); // получаем корневую сущность, без учета наследников $sRelKey = $aRelations[$sRelationName]['rel_key']; if (!array_key_exists($sRelationName, $aRelations) or !in_array($sRelType, array(EntityORM::RELATION_TYPE_BELONGS_TO, EntityORM::RELATION_TYPE_HAS_ONE, EntityORM::RELATION_TYPE_HAS_MANY, EntityORM::RELATION_TYPE_MANY_TO_MANY))) { throw new Exception("The entity <{$sEntityFull}> not have relation <{$sRelationName}>"); } /** * Делаем общий запрос по всем ключам */ $oRelEntityEmpty = Engine::GetEntity($sRelEntity); $sRelModuleName = Engine::GetModuleName($sRelEntity); $sRelEntityName = Engine::GetEntityName($sRelEntity); $sRelPluginPrefix = Engine::GetPluginPrefix($sRelEntity); $sRelPrimaryKey = method_exists($oRelEntityEmpty, '_getPrimaryKey') ? $oRelEntityEmpty->_getPrimaryKey() : 'id'; if ($sRelType == EntityORM::RELATION_TYPE_BELONGS_TO) { /** * Формируем список ключей */ $aEntityKeyValues = array(); foreach ($aEntities as $oEntity) { $aEntityKeyValues[] = $oEntity->_getDataOne($sRelKey); } $aEntityKeyValues = array_unique($aEntityKeyValues); $sKeyTo = $aRelations[$sRelationName]['rel_key_to'] ?: $sRelPrimaryKey; $aFilterRel = array($sKeyTo . ' in' => $aEntityKeyValues, '#index-from' => $sKeyTo); $aFilterRel = array_merge($aFilterRel, $aRelationFilter); $aRelData = Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter", array($aFilterRel)); } elseif ($sRelType == EntityORM::RELATION_TYPE_HAS_ONE) { $aFilterRel = array($sRelKey . ' in' => $aEntityPrimaryKeys, '#index-from' => $sRelKey); $aFilterRel = array_merge($aFilterRel, $aRelationFilter, $aRelations[$sRelationName]['filter']); $aRelData = Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter", array($aFilterRel)); } elseif ($sRelType == EntityORM::RELATION_TYPE_HAS_MANY) { if ($aRelations[$sRelationName]['key_from']) { /** * Формируем список ключей */ $aEntityKeyValues = array(); foreach ($aEntities as $oEntity) { $aEntityKeyValues[] = $oEntity->_getDataOne($aRelations[$sRelationName]['key_from']); } $aEntityKeyValues = array_unique($aEntityKeyValues); } $aFilterRel = array($sRelKey . ' in' => $aRelations[$sRelationName]['key_from'] ? $aEntityKeyValues : $aEntityPrimaryKeys, '#index-group' => $sRelKey); $aFilterRel = array_merge($aFilterRel, $aRelationFilter, $aRelations[$sRelationName]['filter']); $aRelData = Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter", array($aFilterRel)); } elseif ($sRelType == EntityORM::RELATION_TYPE_MANY_TO_MANY) { $sEntityJoin = $aRelations[$sRelationName]['join_entity']; $sKeyJoin = $aRelations[$sRelationName]['join_key']; $aFilterAdd = $aRelations[$sRelationName]['filter']; if (!array_key_exists('#value-default', $aRelationFilter)) { $aRelationFilter['#value-default'] = array(); } $aFilterRel = array_merge($aFilterAdd, $aRelationFilter); $aRelData = Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByJoinEntity", array($sEntityJoin, $sKeyJoin, $sRelKey, $aEntityPrimaryKeys, $aFilterRel)); $aRelData = $this->_setIndexesGroupJoinField($aRelData, $sKeyJoin); } /** * Собираем набор */ foreach ($aEntities as $oEntity) { if ($sRelType == EntityORM::RELATION_TYPE_BELONGS_TO) { $sKeyData = $oEntity->_getDataOne($sRelKey); } elseif (in_array($sRelType, array(EntityORM::RELATION_TYPE_HAS_ONE, EntityORM::RELATION_TYPE_HAS_MANY, EntityORM::RELATION_TYPE_MANY_TO_MANY))) { $sKeyData = $oEntity->_getPrimaryKeyValue(); } else { break; } if ($sRelType == EntityORM::RELATION_TYPE_HAS_MANY and $aRelations[$sRelationName]['key_from']) { $sKeyData = $oEntity->_getDataOne($aRelations[$sRelationName]['key_from']); } if (isset($aRelData[$sKeyData])) { $oEntity->_setData(array($sRelationName => $aRelData[$sKeyData])); } elseif (isset($aRelationFilter['#value-default'])) { $oEntity->_setData(array($sRelationName => $aRelationFilter['#value-default'])); } if ($sRelType == EntityORM::RELATION_TYPE_MANY_TO_MANY) { // Создаём объекты-обёртки для связей MANY_TO_MANY $oEntity->_setManyToManyRelations(new ORMRelationManyToMany($oEntity->_getRelationsData($sRelationName)), $sRelationName); } } } } /** * Returns assotiative array, indexed by PRIMARY KEY or another field. */ if (in_array('#index-from-primary', $aFilter, true) || !empty($aFilter['#index-from'])) { $aEntities = $this->_setIndexesFromField($aEntities, $aFilter); } /** * Группирует результирующий массив по ключам необходимого поля */ if (!empty($aFilter['#index-group'])) { $aEntities = $this->_setIndexesGroupField($aEntities, $aFilter); } /** * Хук для возможности кастомной обработки результата */ $this->RunBehaviorHook('module_orm_GetItemsByFilter_after', array('aEntities' => $aEntities, 'aFilter' => $aFilter, 'sEntityFull' => $sEntityFull), true); /** * Если запрашиваем постраничный список, то возвращаем сам список и общее количество записей */ if (isset($aFilter['#page'])) { if (isset($aFilter['#cache'][0])) { /** * Задан собственный ключ для хранения кеша, поэтому нужно его сменить для передачи в GetCount* * Добавляем префикс 'count_' */ $aFilter['#cache'][0] = 'count_' . $aFilter['#cache'][0]; } return array('collection' => $aEntities, 'count' => $this->GetCountItemsByFilter($aFilter, $sEntityFull)); } return $aEntities; }
/** * Получает дополнительные данные(объекты) для топиков по их ID * * @param array $aTopicId Список ID топиков * @param array|null $aAllowData Список типов дополнительных данных, которые нужно подключать к топикам * @return array */ public function GetTopicsAdditionalData($aTopicId, $aAllowData = null) { if (is_null($aAllowData)) { $aAllowData = array('user' => array(), 'blog' => array('owner' => array(), 'relation_user'), 'vote', 'favourite', 'comment_new', 'properties'); } func_array_simpleflip($aAllowData); if (!is_array($aTopicId)) { $aTopicId = array($aTopicId); } /** * Получаем "голые" топики */ $aTopics = $this->GetTopicsByArrayId($aTopicId); /** * Формируем ID дополнительных данных, которые нужно получить */ $aUserId = array(); $aBlogId = array(); foreach ($aTopics as $oTopic) { if (isset($aAllowData['user'])) { $aUserId[] = $oTopic->getUserId(); } if (isset($aAllowData['blog'])) { $aBlogId = array_merge($aBlogId, $oTopic->getBlogIds()); } } /** * Получаем дополнительные данные */ $aTopicsVote = array(); $aFavouriteTopics = array(); $aTopicsRead = array(); $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); $aBlogs = isset($aAllowData['blog']) && is_array($aAllowData['blog']) ? $this->Blog_GetBlogsAdditionalData($aBlogId, $aAllowData['blog']) : $this->Blog_GetBlogsAdditionalData($aBlogId); if (isset($aAllowData['vote']) and $this->oUserCurrent) { $aTopicsVote = $this->Vote_GetVoteByArray($aTopicId, 'topic', $this->oUserCurrent->getId()); } if (isset($aAllowData['favourite']) and $this->oUserCurrent) { $aFavouriteTopics = $this->GetFavouriteTopicsByArray($aTopicId, $this->oUserCurrent->getId()); } if (isset($aAllowData['comment_new']) and $this->oUserCurrent) { $aTopicsRead = $this->GetTopicsReadByArray($aTopicId, $this->oUserCurrent->getId()); } /** * Добавляем данные к результату - списку топиков */ foreach ($aTopics as $oTopic) { if (isset($aUsers[$oTopic->getUserId()])) { $oTopic->setUser($aUsers[$oTopic->getUserId()]); } else { $oTopic->setUser(null); // или $oTopic->setUser(new ModuleUser_EntityUser()); } $aBlogsTopic = array(); foreach ($oTopic->getBlogIds() as $iBlogId) { if (isset($aBlogs[$iBlogId])) { $aBlogsTopic[] = $aBlogs[$iBlogId]; } } $oTopic->setBlogs($aBlogsTopic); if (isset($aTopicsVote[$oTopic->getId()])) { $oTopic->setVote($aTopicsVote[$oTopic->getId()]); } else { $oTopic->setVote(null); } if (isset($aFavouriteTopics[$oTopic->getId()])) { $oTopic->setFavourite($aFavouriteTopics[$oTopic->getId()]); } else { $oTopic->setFavourite(null); } if (isset($aTopicsRead[$oTopic->getId()])) { $oTopic->setCountCommentNew($oTopic->getCountComment() - $aTopicsRead[$oTopic->getId()]->getCommentCountLast()); $oTopic->setDateRead($aTopicsRead[$oTopic->getId()]->getDateRead()); } else { $oTopic->setCountCommentNew(0); $oTopic->setDateRead(date("Y-m-d H:i:s")); } } /** * Цепляем дополнительные поля */ if (isset($aAllowData['properties'])) { $this->Property_RewriteGetItemsByFilter($aTopics, array('#properties' => true)); } return $aTopics; }
/** * Получает дополнительные данные(объекты) для топиков по их ID * * @param array $aTopicId Список ID топиков * @param array|null $aAllowData Список типов дополнительных данных, которые нужно подключать к топикам * @return array */ public function GetTopicsAdditionalData($aTopicId, $aAllowData = null) { if (is_null($aAllowData)) { $aAllowData = array('user' => array(), 'blog' => array('owner' => array(), 'relation_user'), 'vote', 'favourite', 'comment_new'); } func_array_simpleflip($aAllowData); if (!is_array($aTopicId)) { $aTopicId = array($aTopicId); } /** * Получаем "голые" топики */ $aTopics = $this->GetTopicsByArrayId($aTopicId); /** * Формируем ID дополнительных данных, которые нужно получить */ $aUserId = array(); $aBlogId = array(); $aTopicIdQuestion = array(); $aPhotoMainId = array(); foreach ($aTopics as $oTopic) { if (isset($aAllowData['user'])) { $aUserId[] = $oTopic->getUserId(); } if (isset($aAllowData['blog'])) { $aBlogId[] = $oTopic->getBlogId(); } if ($oTopic->getType() == 'question') { $aTopicIdQuestion[] = $oTopic->getId(); } if ($oTopic->getType() == 'photoset' and $oTopic->getPhotosetMainPhotoId()) { $aPhotoMainId[] = $oTopic->getPhotosetMainPhotoId(); } } /** * Получаем дополнительные данные */ $aTopicsVote = array(); $aFavouriteTopics = array(); $aTopicsQuestionVote = array(); $aTopicsRead = array(); $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); $aBlogs = isset($aAllowData['blog']) && is_array($aAllowData['blog']) ? $this->Blog_GetBlogsAdditionalData($aBlogId, $aAllowData['blog']) : $this->Blog_GetBlogsAdditionalData($aBlogId); if (isset($aAllowData['vote']) and $this->oUserCurrent) { $aTopicsVote = $this->Vote_GetVoteByArray($aTopicId, 'topic', $this->oUserCurrent->getId()); $aTopicsQuestionVote = $this->GetTopicsQuestionVoteByArray($aTopicIdQuestion, $this->oUserCurrent->getId()); } if (isset($aAllowData['favourite']) and $this->oUserCurrent) { $aFavouriteTopics = $this->GetFavouriteTopicsByArray($aTopicId, $this->oUserCurrent->getId()); } if (isset($aAllowData['comment_new']) and $this->oUserCurrent) { $aTopicsRead = $this->GetTopicsReadByArray($aTopicId, $this->oUserCurrent->getId()); } $aPhotosetMainPhotos = $this->GetTopicPhotosByArrayId($aPhotoMainId); /** * Добавляем данные к результату - списку топиков */ foreach ($aTopics as $oTopic) { if (isset($aUsers[$oTopic->getUserId()])) { $oTopic->setUser($aUsers[$oTopic->getUserId()]); } else { $oTopic->setUser(null); // или $oTopic->setUser(new ModuleUser_EntityUser()); } if (isset($aBlogs[$oTopic->getBlogId()])) { $oTopic->setBlog($aBlogs[$oTopic->getBlogId()]); } else { $oTopic->setBlog(null); // или $oTopic->setBlog(new ModuleBlog_EntityBlog()); } if (isset($aTopicsVote[$oTopic->getId()])) { $oTopic->setVote($aTopicsVote[$oTopic->getId()]); } else { $oTopic->setVote(null); } if (isset($aFavouriteTopics[$oTopic->getId()])) { $oTopic->setFavourite($aFavouriteTopics[$oTopic->getId()]); } else { $oTopic->setFavourite(null); } if (isset($aTopicsQuestionVote[$oTopic->getId()])) { $oTopic->setUserQuestionIsVote(true); } else { $oTopic->setUserQuestionIsVote(false); } if (isset($aTopicsRead[$oTopic->getId()])) { $oTopic->setCountCommentNew($oTopic->getCountComment() - $aTopicsRead[$oTopic->getId()]->getCommentCountLast()); $oTopic->setDateRead($aTopicsRead[$oTopic->getId()]->getDateRead()); } else { $oTopic->setCountCommentNew(0); $oTopic->setDateRead(date("Y-m-d H:i:s")); } if (isset($aPhotosetMainPhotos[$oTopic->getPhotosetMainPhotoId()])) { $oTopic->setPhotosetMainPhoto($aPhotosetMainPhotos[$oTopic->getPhotosetMainPhotoId()]); } else { $oTopic->setPhotosetMainPhoto(null); } } return $aTopics; }
/** * Получает дополнительные данные(объекты) для комментов по их ID * * @param array $aCommentId Список ID комментов * @param array|null $aAllowData Список типов дополнительных данных, которые нужно получить для комментариев * @return array */ public function GetCommentsAdditionalData($aCommentId, $aAllowData = null) { if (is_null($aAllowData)) { $aAllowData = array('vote', 'target', 'favourite', 'user' => array()); } func_array_simpleflip($aAllowData); if (!is_array($aCommentId)) { $aCommentId = array($aCommentId); } /** * Получаем комменты */ $aComments = $this->GetCommentsByArrayId($aCommentId); /** * Формируем ID дополнительных данных, которые нужно получить */ $aUserId = array(); $aTargetId = array('topic' => array(), 'talk' => array()); foreach ($aComments as $oComment) { if (isset($aAllowData['user'])) { $aUserId[] = $oComment->getUserId(); } if (isset($aAllowData['target'])) { $aTargetId[$oComment->getTargetType()][] = $oComment->getTargetId(); } } /** * Получаем дополнительные данные */ $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); /** * В зависимости от типа target_type достаем данные */ $aTargets = array(); //$aTargets['topic']=isset($aAllowData['target']) && is_array($aAllowData['target']) ? $this->Topic_GetTopicsAdditionalData($aTargetId['topic'],$aAllowData['target']) : $this->Topic_GetTopicsAdditionalData($aTargetId['topic']); $aTargets['topic'] = $this->Topic_GetTopicsAdditionalData($aTargetId['topic'], array('blog' => array('owner' => array()), 'user' => array())); $aVote = array(); if (isset($aAllowData['vote']) and $this->oUserCurrent) { $aVote = $this->Vote_GetVoteByArray($aCommentId, 'comment', $this->oUserCurrent->getId()); } if (isset($aAllowData['favourite']) and $this->oUserCurrent) { $aFavouriteComments = $this->Favourite_GetFavouritesByArray($aCommentId, 'comment', $this->oUserCurrent->getId()); } /** * Добавляем данные к результату */ foreach ($aComments as $oComment) { if (isset($aUsers[$oComment->getUserId()])) { $oComment->setUser($aUsers[$oComment->getUserId()]); } else { $oComment->setUser(null); // или $oComment->setUser(new ModuleUser_EntityUser()); } if (isset($aTargets[$oComment->getTargetType()][$oComment->getTargetId()])) { $oComment->setTarget($aTargets[$oComment->getTargetType()][$oComment->getTargetId()]); } else { $oComment->setTarget(null); } if (isset($aVote[$oComment->getId()])) { $oComment->setVote($aVote[$oComment->getId()]); } else { $oComment->setVote(null); } if (isset($aFavouriteComments[$oComment->getId()])) { $oComment->setIsFavourite(true); } else { $oComment->setIsFavourite(false); } } return $aComments; }
/** * Получает дополнительные данные(объекты) для разговоров по их ID * * @param array $aTalkId Список ID сообщений * @param array|null $aAllowData Список дополнительных типов подгружаемых в объект * @return array */ public function GetTalksAdditionalData($aTalkId, $aAllowData = null) { if (is_null($aAllowData)) { $aAllowData = array('user', 'talk_user', 'favourite', 'comment_last'); } func_array_simpleflip($aAllowData); if (!is_array($aTalkId)) { $aTalkId = array($aTalkId); } /** * Получаем "голые" разговоры */ $aTalks = $this->GetTalksByArrayId($aTalkId); /** * Формируем ID дополнительных данных, которые нужно получить */ if (isset($aAllowData['favourite']) and $this->oUserCurrent) { $aFavouriteTalks = $this->Favourite_GetFavouritesByArray($aTalkId, 'talk', $this->oUserCurrent->getId()); } $aUserId = array(); $aCommentLastId = array(); foreach ($aTalks as $oTalk) { if (isset($aAllowData['user'])) { $aUserId[] = $oTalk->getUserId(); } if (isset($aAllowData['comment_last']) and $oTalk->getCommentIdLast()) { $aCommentLastId[] = $oTalk->getCommentIdLast(); } } /** * Получаем дополнительные данные */ $aTalkUsers = array(); $aCommentLast = array(); $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); if (isset($aAllowData['talk_user']) and $this->oUserCurrent) { $aTalkUsers = $this->GetTalkUsersByArray($aTalkId, $this->oUserCurrent->getId()); } if (isset($aAllowData['comment_last'])) { $aCommentLast = $this->Comment_GetCommentsAdditionalData($aCommentLastId, array()); } /** * Добавляем данные к результату - списку разговоров */ foreach ($aTalks as $oTalk) { if (isset($aUsers[$oTalk->getUserId()])) { $oTalk->setUser($aUsers[$oTalk->getUserId()]); } else { $oTalk->setUser(null); // или $oTalk->setUser(new ModuleUser_EntityUser()); } if (isset($aTalkUsers[$oTalk->getId()])) { $oTalk->setTalkUser($aTalkUsers[$oTalk->getId()]); } else { $oTalk->setTalkUser(null); } if (isset($aFavouriteTalks[$oTalk->getId()])) { $oTalk->setIsFavourite(true); } else { $oTalk->setIsFavourite(false); } if ($oTalk->getCommentIdLast() and isset($aCommentLast[$oTalk->getCommentIdLast()])) { $oTalk->setCommentLast($aCommentLast[$oTalk->getCommentIdLast()]); } else { $oTalk->setCommentLast(null); } } return $aTalks; }
/** * Получение записей по ID с дополнительные связаными данными * * @param $aWallId * @param array $aAllowData * * @return array */ public function GetWallAdditionalData($aWallId, $aAllowData = array('user' => array(), 'reply')) { func_array_simpleflip($aAllowData); if (!is_array($aWallId)) { $aWallId = array($aWallId); } $aWalls = $this->GetWallsByArrayId($aWallId); /** * Формируем ID дополнительных данных, которые нужно получить */ $aUserId = array(); $aWallReplyId = array(); foreach ($aWalls as $oWall) { if (isset($aAllowData['user'])) { $aUserId[] = $oWall->getUserId(); } /** * Список последних записей хранится в строке через запятую */ if (isset($aAllowData['reply']) and is_null($oWall->getPid()) and $oWall->getLastReply()) { $aReply = explode(',', trim($oWall->getLastReply())); $aWallReplyId = array_merge($aWallReplyId, $aReply); } } /** * Получаем дополнительные данные */ $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); $aWallReply = array(); if (isset($aAllowData['reply']) and count($aWallReplyId)) { $aWallReply = $this->GetWallAdditionalData($aWallReplyId, array('user' => array())); } /** * Добавляем данные к результату */ foreach ($aWalls as $oWall) { if (isset($aUsers[$oWall->getUserId()])) { $oWall->setUser($aUsers[$oWall->getUserId()]); } else { $oWall->setUser(null); // или $oWall->setUser(new ModuleUser_EntityUser()); } $aReply = array(); if ($oWall->getLastReply()) { $aReplyId = explode(',', trim($oWall->getLastReply())); foreach ($aReplyId as $iReplyId) { if (isset($aWallReply[$iReplyId])) { $aReply[] = $aWallReply[$iReplyId]; } } } $oWall->setLastReplyWall($aReply); } return $aWalls; }
/** * Получает дополнительные данные(объекты) для постов * * @param array $aPosts Список топиков * @param array|null $aAllowData Список дополнительных данных, которые нужно подключать к топикам * @return array */ public function GetPostsAdditionalData($aPosts, $aAllowData = null) { if (is_null($aAllowData)) { $aAllowData = array('vote'); } if (is_string($aAllowData)) { $aAllowData = explode(',', $aAllowData); } func_array_simpleflip($aAllowData); $sOne = false; if (!is_array($aPosts)) { $sOne = $aPosts->getId(); $aPosts = array($sOne => $aPosts); } $aPostId = array(); $aUsersId = array(); /** * Формируем ID дополнительных данных, которые нужно получить */ foreach ($aPosts as $oPost) { $aPostId[] = $oPost->getId(); $aUsersId[$oPost->getUserId()] = 1; } /** * Получаем дополнительные данные */ $aVote = array(); $aUsers = array(); if (isset($aAllowData['vote']) && $this->oUserCurrent) { $aVote = $this->Vote_GetVoteByArray($aPostId, 'forum_post', $this->oUserCurrent->getId()); } if ($aUsersId) { //добавь кеш $aUsers = $this->GetUserItemsByArrayUserId(array_keys($aUsersId)); } /** * Добавляем данные к результату - списку топиков */ foreach ($aPosts as $oPost) { if (isset($aVote[$oPost->getId()])) { $oPost->setVote($aVote[$oPost->getId()]); } else { $oPost->setVote(null); } if (isset($aUsers[$oPost->getUserId()])) { $oPost->setUserForum($aUsers[$oPost->getUserId()]); } else { $oPost->setUserForum(null); } } return $sOne ? $aPosts[$sOne] : $aPosts; }
/** * Get images additional data * * @param array $aImagesId * @param array $aAllowData * @return array */ public function GetImagesAdditionalData($aImagesId, $aAllowData = array('user' => array(), 'vote', 'favourite', 'comment_new')) { func_array_simpleflip($aAllowData); if (!is_array($aImagesId)) { $aImagesId = array($aImagesId); } $aImages = $this->GetImagesByArrayId($aImagesId); $aUserId = array(); foreach ($aImages as $oImage) { /* @var $oImage PluginLsgallery_ModuleImage_EntityImage */ if (isset($aAllowData['user'])) { $aUserId[] = $oImage->getUserId(); } } $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); if (isset($aAllowData['favourite']) && $this->oUserCurrent) { $aFavouriteImages = $this->GetFavouriteImagesByArray($aImagesId, $this->oUserCurrent->getId()); } if (isset($aAllowData['comment_new']) && $this->oUserCurrent) { $aImagesRead = $this->GetImagesReadByArray($aImagesId, $this->oUserCurrent->getId()); } if (isset($aAllowData['vote']) && $this->oUserCurrent) { $aImagesVote = $this->Vote_GetVoteByArray($aImagesId, 'image', $this->oUserCurrent->getId()); } foreach ($aImages as $oImage) { if (isset($aUsers[$oImage->getUserId()])) { $oImage->setUser($aUsers[$oImage->getUserId()]); } else { $oImage->setUser(null); } if (isset($aFavouriteImages[$oImage->getId()])) { $oImage->setIsFavourite(true); } else { $oImage->setIsFavourite(false); } if (isset($aImagesRead[$oImage->getId()])) { $oImage->setCountCommentNew($oImage->getCountComment() - $aImagesRead[$oImage->getId()]->getCommentCountLast()); $oImage->setDateRead($aImagesRead[$oImage->getId()]->getDateRead()); } else { $oImage->setCountCommentNew(0); $oImage->setDateRead(date("Y-m-d H:i:s")); } if (isset($aImagesVote[$oImage->getId()])) { $oImage->setVote($aImagesVote[$oImage->getId()]); } else { $oImage->setVote(null); } } return $aImages; }
/** * Get albums additional data * * @todo Подтягивание картинок * @param array $aAlbumsId * @param array $aAllowData * @return array */ public function GetAlbumsAdditionalData($aAlbumsId, $aAllowData = array('user' => array(), 'cover' => array())) { func_array_simpleflip($aAllowData); if (!is_array($aAlbumsId)) { $aAlbumsId = array($aAlbumsId); } $aAlbums = $this->GetAlbumsByArrayId($aAlbumsId); $aUserId = array(); $aImageId = array(); foreach ($aAlbums as $oAlbum) { /* @var $oAlbum PluginLsgallery_ModuleAlbum_EntityAlbum */ if (isset($aAllowData['user'])) { $aUserId[] = $oAlbum->getUserId(); } if (isset($aAllowData['cover'])) { $aImageId[] = $oAlbum->getCoverId(); } } $aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId, $aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId); $aImages = isset($aAllowData['cover']) && is_array($aAllowData['cover']) ? $this->PluginLsgallery_Image_GetImagesAdditionalData($aImageId, $aAllowData['cover']) : $this->PluginLsgallery_Image_GetImagesAdditionalData($aUserId); foreach ($aAlbums as $oAlbum) { if (isset($aUsers[$oAlbum->getUserId()])) { $oAlbum->setUser($aUsers[$oAlbum->getUserId()]); } else { $oAlbum->setUser(null); } if (isset($aImages[$oAlbum->getCoverId()])) { $oAlbum->setCover($aImages[$oAlbum->getCoverId()]); } else { $oAlbum->setCover(null); } } return $aAlbums; }