コード例 #1
0
ファイル: Topic.class.php プロジェクト: AlexSSN/altocms
 /**
  * Получить список голосований в топике-опросе по списку ID
  *
  * @param array $aTopicsId    - Список ID топиков
  * @param int   $iUserId      - ID пользователя
  *
  * @return array
  */
 public function GetTopicsQuestionVoteByArray($aTopicsId, $iUserId)
 {
     if (!$aTopicsId) {
         return array();
     }
     if (Config::Get('sys.cache.solid')) {
         return $this->GetTopicsQuestionVoteByArraySolid($aTopicsId, $iUserId);
     }
     if (!is_array($aTopicsId)) {
         $aTopicsId = array($aTopicsId);
     }
     $aTopicsId = array_unique($aTopicsId);
     $aTopicsQuestionVote = array();
     $aTopicIdNotNeedQuery = array();
     // * Делаем мульти-запрос к кешу
     $aCacheKeys = F::Array_ChangeValues($aTopicsId, 'topic_question_vote_', '_' . $iUserId);
     if (false !== ($data = E::ModuleCache()->Get($aCacheKeys))) {
         // * проверяем что досталось из кеша
         foreach ($aCacheKeys as $iIndex => $sKey) {
             /** @var ModuleTopic_EntityTopicQuestionVote[] $data */
             if (array_key_exists($sKey, $data)) {
                 if ($data[$sKey]) {
                     $aTopicsQuestionVote[$data[$sKey]->getTopicId()] = $data[$sKey];
                 } else {
                     $aTopicIdNotNeedQuery[] = $aTopicsId[$iIndex];
                 }
             }
         }
     }
     // * Смотрим каких топиков не было в кеше и делаем запрос в БД
     $aTopicIdNeedQuery = array_diff($aTopicsId, array_keys($aTopicsQuestionVote));
     $aTopicIdNeedQuery = array_diff($aTopicIdNeedQuery, $aTopicIdNotNeedQuery);
     $aTopicIdNeedStore = $aTopicIdNeedQuery;
     if ($aTopicIdNeedQuery) {
         if ($data = $this->oMapper->GetTopicsQuestionVoteByArray($aTopicIdNeedQuery, $iUserId)) {
             foreach ($data as $oTopicVote) {
                 // * Добавляем к результату и сохраняем в кеш
                 $aTopicsQuestionVote[$oTopicVote->getTopicId()] = $oTopicVote;
                 E::ModuleCache()->Set($oTopicVote, "topic_question_vote_{$oTopicVote->getTopicId()}_{$oTopicVote->getVoterId()}", array(), 60 * 60 * 24 * 4);
                 $aTopicIdNeedStore = array_diff($aTopicIdNeedStore, array($oTopicVote->getTopicId()));
             }
         }
     }
     // * Сохраняем в кеш запросы не вернувшие результата
     foreach ($aTopicIdNeedStore as $sId) {
         E::ModuleCache()->Set(null, "topic_question_vote_{$sId}_{$iUserId}", array(), 60 * 60 * 24 * 4);
     }
     // * Сортируем результат согласно входящему массиву
     $aTopicsQuestionVote = F::Array_SortByKeysArray($aTopicsQuestionVote, $aTopicsId);
     return $aTopicsQuestionVote;
 }
コード例 #2
0
ファイル: User.class.php プロジェクト: AntiqS/altocms
 /**
  * Получить список отношений друзей
  *
  * @param   int|array $aUsersId - Список ID пользователей проверяемых на дружбу
  * @param   int       $iUserId  - ID пользователя у которого проверяем друзей
  *
  * @return ModuleUser_EntityFriend[]
  */
 public function GetFriendsByArray($aUsersId, $iUserId)
 {
     if (Config::Get('sys.cache.solid')) {
         return $this->GetFriendsByArraySolid($aUsersId, $iUserId);
     }
     if (!$aUsersId) {
         return array();
     } elseif (!is_array($aUsersId)) {
         $aUsersId = array($aUsersId);
     } else {
         $aUsersId = array_unique($aUsersId);
     }
     $aFriends = array();
     $aUserIdNotNeedQuery = array();
     // * Делаем мульти-запрос к кешу
     $aCacheKeys = F::Array_ChangeValues($aUsersId, 'user_friend_', '_' . $iUserId);
     if (false !== ($data = E::ModuleCache()->Get($aCacheKeys))) {
         // * проверяем что досталось из кеша
         foreach ($aCacheKeys as $iIndex => $sKey) {
             if (array_key_exists($sKey, $data)) {
                 if ($data[$sKey]) {
                     $aFriends[$data[$sKey]->getFriendId()] = $data[$sKey];
                 } else {
                     $aUserIdNotNeedQuery[] = $aUsersId[$iIndex];
                 }
             }
         }
     }
     // * Смотрим каких френдов не было в кеше и делаем запрос в БД
     $aUserIdNeedQuery = array_diff($aUsersId, array_keys($aFriends));
     $aUserIdNeedQuery = array_diff($aUserIdNeedQuery, $aUserIdNotNeedQuery);
     $aUserIdNeedStore = $aUserIdNeedQuery;
     if ($aUserIdNeedQuery) {
         if ($data = $this->oMapper->GetFriendsByArrayId($aUserIdNeedQuery, $iUserId)) {
             foreach ($data as $oFriend) {
                 // * Добавляем к результату и сохраняем в кеш
                 $aFriends[$oFriend->getFriendId($iUserId)] = $oFriend;
                 /**
                  * Тут кеш нужно будет продумать как-то по другому.
                  * Пока не трогаю, ибо этот код все равно не выполняется.
                  * by Kachaev
                  */
                 E::ModuleCache()->Set($oFriend, "user_friend_{$oFriend->getFriendId()}_{$oFriend->getUserId()}", array(), 'P4D');
                 $aUserIdNeedStore = array_diff($aUserIdNeedStore, array($oFriend->getFriendId()));
             }
         }
     }
     // * Сохраняем в кеш запросы не вернувшие результата
     foreach ($aUserIdNeedStore as $sId) {
         E::ModuleCache()->Set(null, "user_friend_{$sId}_{$iUserId}", array(), 'P4D');
     }
     // * Сортируем результат согласно входящему массиву
     $aFriends = F::Array_SortByKeysArray($aFriends, $aUsersId);
     return $aFriends;
 }
コード例 #3
0
ファイル: Talk.class.php プロジェクト: hard990/altocms
 /**
  * Получить список отношений разговор-юзер по списку айдишников
  *
  * @param array $aTalksId    Список ID сообщений
  * @param int   $iUserId    ID пользователя
  *
  * @return array
  */
 public function GetTalkUsersByArray($aTalksId, $iUserId)
 {
     if (!is_array($aTalksId)) {
         $aTalksId = array($aTalksId);
     }
     $aTalksId = array_unique($aTalksId);
     $aTalkUsers = array();
     $aTalkIdNotNeedQuery = array();
     // Делаем мульти-запрос к кешу
     $aCacheKeys = F::Array_ChangeValues($aTalksId, 'talk_user_', '_' . $iUserId);
     if (false !== ($data = E::ModuleCache()->Get($aCacheKeys))) {
         // проверяем что досталось из кеша
         foreach ($aCacheKeys as $iIndex => $sKey) {
             if (array_key_exists($sKey, $data)) {
                 if ($data[$sKey]) {
                     $aTalkUsers[$data[$sKey]->getTalkId()] = $data[$sKey];
                 } else {
                     $aTalkIdNotNeedQuery[] = $aTalksId[$iIndex];
                 }
             }
         }
     }
     // Смотрим чего не было в кеше и делаем запрос в БД
     $aTalkIdNeedQuery = array_diff($aTalksId, array_keys($aTalkUsers));
     $aTalkIdNeedQuery = array_diff($aTalkIdNeedQuery, $aTalkIdNotNeedQuery);
     $aTalkIdNeedStore = $aTalkIdNeedQuery;
     if ($aTalkIdNeedQuery) {
         if ($data = $this->oMapper->GetTalkUserByArray($aTalkIdNeedQuery, $iUserId)) {
             foreach ($data as $oTalkUser) {
                 // Добавляем к результату и сохраняем в кеш
                 $aTalkUsers[$oTalkUser->getTalkId()] = $oTalkUser;
                 E::ModuleCache()->Set($oTalkUser, "talk_user_{$oTalkUser->getTalkId()}_{$oTalkUser->getUserId()}", array("update_talk_user_{$oTalkUser->getTalkId()}"), 60 * 60 * 24 * 4);
                 $aTalkIdNeedStore = array_diff($aTalkIdNeedStore, array($oTalkUser->getTalkId()));
             }
         }
     }
     // Сохраняем в кеш запросы не вернувшие результата
     foreach ($aTalkIdNeedStore as $sId) {
         E::ModuleCache()->Set(null, "talk_user_{$sId}_{$iUserId}", array("update_talk_user_{$sId}"), 60 * 60 * 24 * 4);
     }
     // Сортируем результат согласно входящему массиву
     $aTalkUsers = F::Array_SortByKeysArray($aTalkUsers, $aTalksId);
     return $aTalkUsers;
 }
コード例 #4
0
ファイル: Blog.class.php プロジェクト: AlexSSN/altocms
 /**
  * Получить список отношений блог-юзер по списку айдишников
  *
  * @param array|int $aBlogId Список ID блогов
  * @param int       $iUserId ID пользователя
  *
  * @return ModuleBlog_EntityBlogUser[]
  */
 public function GetBlogUsersByArrayBlog($aBlogId, $iUserId)
 {
     if (!$aBlogId) {
         return array();
     }
     if (Config::Get('sys.cache.solid')) {
         return $this->GetBlogUsersByArrayBlogSolid($aBlogId, $iUserId);
     }
     if (!is_array($aBlogId)) {
         $aBlogId = array(intval($aBlogId));
     }
     $aBlogId = array_unique($aBlogId);
     $aBlogUsers = array();
     $aBlogIdNotNeedQuery = array();
     // * Делаем мульти-запрос к кешу
     $aCacheKeys = F::Array_ChangeValues($aBlogId, 'blog_relation_user_', '_' . $iUserId);
     if (false !== ($data = E::ModuleCache()->Get($aCacheKeys))) {
         // * проверяем что досталось из кеша
         foreach ($aCacheKeys as $iIndex => $sKey) {
             if (array_key_exists($sKey, $data)) {
                 if ($data[$sKey]) {
                     $aBlogUsers[$data[$sKey]->getBlogId()] = $data[$sKey];
                 } else {
                     $aBlogIdNotNeedQuery[] = $aBlogId[$iIndex];
                 }
             }
         }
     }
     // * Смотрим каких блогов не было в кеше и делаем запрос в БД
     $aBlogIdNeedQuery = array_diff($aBlogId, array_keys($aBlogUsers));
     $aBlogIdNeedQuery = array_diff($aBlogIdNeedQuery, $aBlogIdNotNeedQuery);
     $aBlogIdNeedStore = $aBlogIdNeedQuery;
     if ($aBlogIdNeedQuery) {
         if ($data = $this->oMapper->GetBlogUsersByArrayBlog($aBlogIdNeedQuery, $iUserId)) {
             foreach ($data as $oBlogUser) {
                 // * Добавляем к результату и сохраняем в кеш
                 $aBlogUsers[$oBlogUser->getBlogId()] = $oBlogUser;
                 E::ModuleCache()->Set($oBlogUser, "blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}", array(), 'P4D');
                 $aBlogIdNeedStore = array_diff($aBlogIdNeedStore, array($oBlogUser->getBlogId()));
             }
         }
     }
     // * Сохраняем в кеш запросы не вернувшие результата
     foreach ($aBlogIdNeedStore as $sId) {
         E::ModuleCache()->Set(null, "blog_relation_user_{$sId}_{$iUserId}", array(), 'P4D');
     }
     // * Сортируем результат согласно входящему массиву
     $aBlogUsers = F::Array_SortByKeysArray($aBlogUsers, $aBlogId);
     return $aBlogUsers;
 }
コード例 #5
0
ファイル: function.php プロジェクト: AntiqS/altocms
function func_array_sort_by_keys($array, $aKeys)
{
    return F::Array_SortByKeysArray($array, $aKeys);
}
コード例 #6
0
ファイル: Comment.class.php プロジェクト: AntiqS/altocms
 /**
  * Список комментов по ID
  *
  * @param array|int $aCommentsId    Список ID комментариев
  *
  * @return array
  */
 public function GetCommentsByArrayId($aCommentsId)
 {
     if (!$aCommentsId) {
         return array();
     }
     if (Config::Get('sys.cache.solid')) {
         return $this->GetCommentsByArrayIdSolid($aCommentsId);
     }
     if (!is_array($aCommentsId)) {
         $aCommentsId = array($aCommentsId);
     }
     $aCommentsId = array_unique($aCommentsId);
     $aComments = array();
     $aCommentIdNotNeedQuery = array();
     // * Делаем мульти-запрос к кешу
     $aCacheKeys = F::Array_ChangeValues($aCommentsId, 'comment_');
     if (false !== ($data = E::ModuleCache()->Get($aCacheKeys))) {
         // * Проверяем что досталось из кеша
         foreach ($aCacheKeys as $iIndex => $sKey) {
             if (array_key_exists($sKey, $data)) {
                 if ($data[$sKey]) {
                     $aComments[$data[$sKey]->getId()] = $data[$sKey];
                 } else {
                     $aCommentIdNotNeedQuery[] = $aCommentsId[$iIndex];
                 }
             }
         }
     }
     // * Смотрим каких комментов не было в кеше и делаем запрос в БД
     $aCommentIdNeedQuery = array_diff($aCommentsId, array_keys($aComments));
     $aCommentIdNeedQuery = array_diff($aCommentIdNeedQuery, $aCommentIdNotNeedQuery);
     $aCommentIdNeedStore = $aCommentIdNeedQuery;
     if ($aCommentIdNeedQuery) {
         if ($data = $this->oMapper->GetCommentsByArrayId($aCommentIdNeedQuery)) {
             foreach ($data as $oComment) {
                 // * Добавляем к результату и сохраняем в кеш
                 $aComments[$oComment->getId()] = $oComment;
                 E::ModuleCache()->Set($oComment, "comment_{$oComment->getId()}", array(), 'P4D');
                 $aCommentIdNeedStore = array_diff($aCommentIdNeedStore, array($oComment->getId()));
             }
         }
     }
     // * Сохраняем в кеш запросы не вернувшие результата
     foreach ($aCommentIdNeedStore as $nId) {
         E::ModuleCache()->Set(null, "comment_{$nId}", array(), 'P4D');
     }
     // * Сортируем результат согласно входящему массиву
     $aComments = F::Array_SortByKeysArray($aComments, $aCommentsId);
     return $aComments;
 }