/** * Получить типы блогов * * @param array $aFilter * @param bool $bTypeCodesOnly * * @return ModuleBlog_EntityBlogType[] */ public function GetBlogTypes($aFilter = array(), $bTypeCodesOnly = false) { $aResult = array(); $sCacheKey = 'blog_types'; if (false === ($data = E::ModuleCache()->Get($sCacheKey, 'tmp'))) { if (false === ($data = E::ModuleCache()->Get($sCacheKey))) { /** @var ModuleBlog_EntityBlogType[] $data */ $data = $this->oMapper->GetBlogTypes(); E::ModuleCache()->Set($data, $sCacheKey, array('blog_update', 'blog_new'), 'P30D'); } E::ModuleCache()->Set($data, $sCacheKey, array('blog_update', 'blog_new'), 'P30D', 'tmp'); } $aBlogTypes = array(); if ($data) { foreach ($data as $nKey => $oBlogType) { $bOk = true; if (isset($aFilter['include_type'])) { $bOk = $bOk && $aFilter['include_type'] == $oBlogType->GetTypeCode(); if (!$bOk) { continue; } } if (isset($aFilter['exclude_type'])) { $bOk = $bOk && $aFilter['exclude_type'] != $oBlogType->GetTypeCode(); if (!$bOk) { continue; } } if (isset($aFilter['is_active'])) { $bOk = $bOk && $oBlogType->IsActive(); if (!$bOk) { continue; } } if (isset($aFilter['not_active'])) { $bOk = $bOk && !$oBlogType->IsActive(); if (!$bOk) { continue; } } if (isset($aFilter['allow_add'])) { $bOk = $bOk && $oBlogType->IsAllowAdd(); if (!$bOk) { continue; } } if (isset($aFilter['allow_list'])) { $bOk = $bOk && $oBlogType->IsShowTitle(); if (!$bOk) { continue; } } if (isset($aFilter['min_rate_add'])) { $bOk = $bOk && $oBlogType->GetMinRateAdd() <= $aFilter['min_rate_add']; if (!$bOk) { continue; } } if (isset($aFilter['min_rate_list'])) { $bOk = $bOk && $oBlogType->GetMinRateList() <= $aFilter['min_rate_list']; if (!$bOk) { continue; } } if (isset($aFilter['min_rate_write'])) { $bOk = $bOk && $oBlogType->GetMinRateWrite() <= $aFilter['min_rate_write']; if (!$bOk) { continue; } } if (isset($aFilter['min_rate_read'])) { $bOk = $bOk && $oBlogType->GetMinRateRead() <= $aFilter['min_rate_read']; if (!$bOk) { continue; } } if (isset($aFilter['min_rate_comment'])) { $bOk = $bOk && $oBlogType->GetMinRateComment() <= $aFilter['min_rate_comment']; if (!$bOk) { continue; } } if (isset($aFilter['acl_write'])) { $bOk = $bOk && $oBlogType->GetAclWrite() & $aFilter['acl_write']; if (!$bOk) { continue; } } if (isset($aFilter['acl_read'])) { $bOk = $bOk && $oBlogType->GetAclRead() & $aFilter['acl_read']; if (!$bOk) { continue; } } if (isset($aFilter['acl_comment'])) { $bOk = $bOk && $oBlogType->GetAclComment() & $aFilter['acl_comment']; if (!$bOk) { continue; } } // Проверим, есть ли в данном типе блога вообще типы контента /** @var ModuleTopic_EntityContentType[] $aContentTypes */ if ($aContentTypes = $oBlogType->getContentTypes()) { foreach ($aContentTypes as $iCTId => $oContentType) { // Тип контента не активирован if (!$oContentType->getActive()) { unset($aContentTypes[$iCTId]); } // Тип контента включен, но создавать могу только админы if (!$oContentType->isAccessible()) { unset($aContentTypes[$iCTId]); } } } // Проверим существующие типы контента на возможность создания пользователей if ($bOk) { $aBlogTypes[$oBlogType->GetTypeCode()] = $oBlogType; } $data[$nKey] = null; } } if ($aBlogTypes) { if ($bTypeCodesOnly) { $aResult = array_keys($aBlogTypes); } else { $aResult = $aBlogTypes; } } return $aResult; }