Example #1
0
 /**
  * Получить типы блогов
  *
  * @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;
 }