/**
  * Инициализация начального списка необходимых для загрузки компонентов
  */
 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);
     }
 }
Exemplo n.º 2
0
 /**
  * Получает дополнительные данные(объекты) для блогов по их 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;
 }
Exemplo n.º 3
0
 /**
  * Получает дополнительные данные(объекты) для юзеров по их 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;
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 6
0
 /**
  * Получает дополнительные данные(объекты) для топиков по их 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;
 }
Exemplo n.º 7
0
 /**
  * Получает дополнительные данные(объекты) для топиков по их 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;
 }
Exemplo n.º 8
0
 /**
  * Получает дополнительные данные(объекты) для комментов по их 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;
 }
Exemplo n.º 9
0
 /**
  * Получает дополнительные данные(объекты) для разговоров по их 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;
 }
Exemplo n.º 10
0
 /**
  * Получение записей по 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;
 }
Exemplo n.º 11
0
 /**
  * Получает дополнительные данные(объекты) для постов
  *
  * @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;
 }
Exemplo n.º 12
0
 /**
  * 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;
 }
Exemplo n.º 13
0
 /**
  * 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;
 }