За последние 24 часа нас посетили 18139 программистов и 1651 робот. Сейчас ищут 1643 программиста ...

Старт открытого beta-тестрования Handy.CMS 3.1

Тема в разделе "Решения, алгоритмы", создана пользователем .scu, 25 июл 2009.

  1. .scu

    .scu Активный пользователь

    С нами с:
    16 апр 2009
    Сообщения:
    3
    Симпатии:
    0
    Один из плюсов системы для разработчиков — возможность разработки собственных модулей.

    Возможности Handy.CMS 3.1
    Handy.CMS — это гармония удобства и функциональности
    • AJAX-based административный интерфейс
    • Кеширование не только публичной, но и административной части сайта, что значительно ускоряет работу
    • Расширенная система разграничения прав доступа не только к модулям, но и к отдельным элементам
    • Иерархическое управление администраторами
    • Гибкая работа с шаблонизатором — возможность установки любого шаблонизатора (шаблонизатор по-умолчанию Smarty)
    • Возможность разработчикам создавать собственные модули системы с помощью Handy.CMS API
    • SEO-пак: ЧПУ (при разработке модулей внешний разработчик может сам задавать формат адресов), meta&keywords
    • Возможность работы с систему через систему специальных меток и макросов
    • Возможность установки системы на дизайн любой сложности, система не ставит ограничений
    • Возможность создания, перемещения, редактирования и удаления разделов любого уровня вложенности
    • Возможность создания различных языковых версий системы
    • Система бекапов базы данных
    • Автоматическая система обновлений

    Требования для работы системы
    — ОС 32-bit
    — PHP 5.2.1 и выше
    — Apache
    — MySQL 4 и выше
    — Модуля для PHP: Curl, GD2, simpleXML
    — Zend Optimizer 3.3+

    Лучшим 5-ти бета-тестерам будут подарены по 2 лицензии на релизную версию Handy.CMS 3.1.
    Регистрация beta-тестера: handycms.ru/forum/
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    посмотрел первую страницу

    Код (Text):
    1.  
    2. ";"+Math.random()+
    3.     "' alt='' title='LiveInternet: �������� ����� ���������� �� 24"+
    4.     " ����, ����������� �� 24 ���� � �� �������' "+
    5.     "border='0' width='88' height='31' style='opacity: 20; -moz-opacity: 20; filter: alpha(opacity=20); '><\/a>")
    уже не интеерсно при таком отношении.
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это, блин не бета тестирование, это гамма-код.
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну что за...

    Код (Text):
    1.  
    2. $_document_load is not defined
    3. [Break on this error] $_document_load("reinit");
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    На основе PunBB

    яя. умилило...
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    зарегился. захожу в профиль.

    http://handycms.ru/forum/user/24/


    Сообщение в разделе

    Beta-тестерам

    Для участия в бета-тестировании Вам необходимо зарегистрироваться.


    жжоте!
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    не. ни хрена не юзер-френдли... абыдно...
    а так хотелось потестить и лицензию получить.

    =)
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я вот хочу модуль написать, есть где API посмотреть?
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Mr.M.I.T.

    это чито?
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    нет. спасибо... такое даже читать не хочу

    class admin_class {
    var $drevo=array();
    var $multi_drevo=array();
    var $mid_cat=array();
    function see_adm() {
    global $db,$cnf;
    print "
    <html>
    <head>
    <title>Àäìèíöåíòð </title>
    <META http-equiv=content-type content=\"text/html; charset=cp-1251\">
    <META NAME=\"Generator\" CONTENT=\"MITCMS [ http://mit-home.nov.ru ] \">
    <LINK href=\"style.css\" type=text/css rel=stylesheet>
    </head>
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    и это тоже не хочу

    $cnf['path']=$_SERVER['DOCUMENT_ROOT']; // стартовая директория (рекомендуется не менять)

    p.s. обязательно поменяю. гыгыгы
     
  14. .scu

    .scu Активный пользователь

    С нами с:
    16 апр 2009
    Сообщения:
    3
    Симпатии:
    0
    Mr.M.I.T., Не вводите людей в заблуждение, Ваш архив не имеет никакого отношения к Handy.CMS :)

    To 440Hz: Вы не внимательно читали правила перед регистрацией, там указано, что после регистрации необходимо прислать письмо с данными о бета-тестере.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну эт уже в чт. примерно смогу.
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    440Hz
    года 3 назад писал это =)
     
  17. SeregA

    SeregA Активный пользователь

    С нами с:
    2 фев 2006
    Сообщения:
    269
    Симпатии:
    0
    Адрес:
    Saint Petersburg, Russia
    http://obsudim.ru/files/handy-cms.3.1-2.jpg
    не хорошо скриншоты из винды прикручивать внутрь окошка Сафари мака)))
    а логотип читается как "/нанду/"
    а вообще симпатичненько!
     
  18. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это и пугает. битрикс вообше красота внутри.
     
  19. SeregA

    SeregA Активный пользователь

    С нами с:
    2 фев 2006
    Сообщения:
    269
    Симпатии:
    0
    Адрес:
    Saint Petersburg, Russia
    ну там уже клиника, им можно
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    у меня етсь последние исходники битрикса.
    пипец.
    иногда почитываю... ошень позновательно

    32М исходники...

    PHP:
    1.  
    2. <?
    3. IncludeModuleLangFile(__FILE__);
    4.  
    5. class CAllBlog
    6. {
    7.     function IsBlogOwner($ID, $userID)
    8.     {
    9.         $ID = IntVal($ID);
    10.         $userID = IntVal($userID);
    11.         if ($userID <= 0)
    12.             return False;
    13.  
    14.         $arBlog = CBlog::GetByID($ID);
    15.         if ($arBlog)
    16.         {
    17.             if (IntVal($arBlog["OWNER_ID"]) == $userID)
    18.                 return True;
    19.         }
    20.         return False;
    21.     }
    22.  
    23.     function CanUserCreateBlog($userID = 0)
    24.     {
    25.  
    26.         $userID = IntVal($userID);
    27.  
    28.         if ($userID > 0 && CBlogUser::IsLocked($userID))
    29.             return False;
    30.        
    31.         $arGroups = false;
    32.         if($userID > 0)
    33.             $arGroups = CUser::GetUserGroup($userID);
    34.            
    35.         $blogModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("blog", $arGroups);
    36.         if ($blogModulePermissions >= "N")
    37.             return True;
    38.  
    39.         return False;
    40. //      return True;
    41.     }
    42.  
    43.     function CanUserViewBlogs($arUserGroups = array())
    44.     {
    45.         /*
    46.         $blogModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("blog");
    47.         if ($blogModulePermissions >= "K")
    48.             return True;
    49.  
    50.         return False;
    51.         */
    52.         return True;
    53.     }
    54.  
    55.     function CanUserManageBlog($ID, $userID = 0)
    56.     {
    57.         $ID = IntVal($ID);
    58.         $userID = IntVal($userID);
    59.  
    60.         if ($userID <= 0)
    61.             return False;
    62.  
    63.         $blogModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("blog");
    64.         if ($blogModulePermissions >= "W")
    65.             return True;
    66.  
    67.         if (CBlog::IsBlogOwner($ID, $userID))
    68.             return True;
    69.  
    70.         return False;
    71.     }
    72.  
    73.     function GetBlogUserPostPerms($ID, $userID = 0)
    74.     {
    75.         $ID = IntVal($ID);
    76.         $userID = IntVal($userID);
    77.  
    78.         $arAvailPerms = array_keys($GLOBALS["AR_BLOG_PERMS"]);
    79.  
    80.         $blogModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("blog");
    81.         if ($blogModulePermissions >= "W")
    82.             return $arAvailPerms[count($arAvailPerms) - 1];
    83.  
    84.         if (CBlog::IsBlogOwner($ID, $userID))
    85.             return $arAvailPerms[count($arAvailPerms) - 1];
    86.  
    87.         $arBlogUser = CBlogUser::GetByID($userID, BLOG_BY_USER_ID);
    88.         if ($arBlogUser && $arBlogUser["ALLOW_POST"] != "Y")
    89.             return $arAvailPerms[0];
    90.  
    91.         $arUserGroups = CBlogUser::GetUserGroups($userID, $ID, "Y", BLOG_BY_USER_ID);
    92.  
    93.         $perms = CBlogUser::GetUserPerms($arUserGroups, $ID, 0, BLOG_PERMS_POST, BLOG_BY_USER_ID);
    94.         if ($perms)
    95.             return $perms;
    96.  
    97.         return $arAvailPerms[0];
    98.     }
    99.  
    100.     function GetBlogUserCommentPerms($ID, $userID)
    101.     {
    102.         $ID = IntVal($ID);
    103.         $userID = IntVal($userID);
    104.  
    105.         $arAvailPerms = array_keys($GLOBALS["AR_BLOG_PERMS"]);
    106.  
    107.         $blogModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("blog");
    108.         if ($blogModulePermissions >= "W")
    109.             return $arAvailPerms[count($arAvailPerms) - 1];
    110.  
    111.         if (CBlog::IsBlogOwner($ID, $userID))
    112.             return $arAvailPerms[count($arAvailPerms) - 1];
    113.  
    114.         $arBlog = CBlog::GetByID($ID);
    115.         if ($arBlog["ENABLE_COMMENTS"] != "Y")
    116.             return $arAvailPerms[0];
    117.  
    118.         $arBlogUser = CBlogUser::GetByID($userID, BLOG_BY_USER_ID);
    119.         if ($arBlogUser && $arBlogUser["ALLOW_POST"] != "Y")
    120.             return $arAvailPerms[0];
    121.  
    122.         $arUserGroups = CBlogUser::GetUserGroups($userID, $ID, "Y", BLOG_BY_USER_ID);
    123.  
    124.         $perms = CBlogUser::GetUserPerms($arUserGroups, $ID, 0, BLOG_PERMS_COMMENT, BLOG_BY_USER_ID);
    125.         if ($perms)
    126.             return $perms;
    127.  
    128.         return $arAvailPerms[0];
    129.     }
    130.  
    131.     /*************** ADD, UPDATE, DELETE *****************/
    132.     function CheckFields($ACTION, &$arFields, $ID = 0)
    133.     {
    134.         global $DB;
    135.  
    136.         if ((is_set($arFields, "NAME") || $ACTION=="ADD") && strlen($arFields["NAME"]) <= 0)
    137.         {
    138.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_NAME"), "EMPTY_NAME");
    139.             return false;
    140.         }
    141.         elseif (is_set($arFields, "NAME"))
    142.         {
    143.             $dbResult = CBlog::GetList(array(), array("NAME" => $arFields["NAME"], "!ID" => $ID), false, false, array("ID"));
    144.             if ($dbResult->Fetch())
    145.             {
    146.                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_DUBLICATE_NAME"), "DUBLICATE_NAME");
    147.                 return false;
    148.             }
    149.         }
    150.  
    151.         if ((is_set($arFields, "URL") || $ACTION=="ADD") && strlen($arFields["URL"]) <= 0)
    152.         {
    153.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_URL"), "EMPTY_URL");
    154.             return false;
    155.         }
    156.         elseif (is_set($arFields, "URL"))
    157.         {
    158.             $urlCheck = preg_replace("/[^a-zA-Z0-9_-]/is", "", $arFields["URL"]);
    159.             if ($urlCheck != $arFields["URL"])
    160.             {
    161.                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_BAD_URL"), "BAD_URL");
    162.                 return false;
    163.             }
    164.  
    165.             $dbResult = CBlog::GetList(array(), array("URL" => $arFields["URL"], "!ID" => $ID), false, false, array("ID"));
    166.             if ($dbResult->Fetch())
    167.             {
    168.                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_DUBLICATE_URL"), "DUBLICATE_URL");
    169.                 return false;
    170.             }
    171.  
    172.             if (in_array(strtolower($arFields["URL"]), $GLOBALS["AR_BLOG_RESERVED_NAMES"]))
    173.             {
    174.                 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $arFields["URL"], GetMessage("BLG_GB_RESERVED_NAME")), "RESERVED_NAME");
    175.                 return false;
    176.             }
    177.         }
    178.  
    179.         if (is_set($arFields, "DATE_CREATE") && (!$DB->IsDate($arFields["DATE_CREATE"], false, LANG, "FULL")))
    180.         {
    181.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_DATE_CREATE"), "EMPTY_DATE_CREATE");
    182.             return false;
    183.         }
    184.  
    185.         if (is_set($arFields, "DATE_UPDATE") && (!$DB->IsDate($arFields["DATE_UPDATE"], false, LANG, "FULL")))
    186.         {
    187.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_DATE_UPDATE"), "EMPTY_DATE_UPDATE");
    188.             return false;
    189.         }
    190.  
    191.         if (is_set($arFields, "LAST_POST_DATE") && (!$DB->IsDate($arFields["LAST_POST_DATE"], false, LANG, "FULL")))
    192.         {
    193.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_LAST_POST_DATE"), "EMPTY_LAST_POST_DATE");
    194.             return false;
    195.         }
    196.  
    197.         if ((is_set($arFields, "OWNER_ID") || $ACTION=="ADD") && IntVal($arFields["OWNER_ID"]) <= 0)
    198.         {
    199.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_OWNER_ID"), "EMPTY_OWNER_ID");
    200.             return false;
    201.         }
    202.         elseif (is_set($arFields, "OWNER_ID"))
    203.         {
    204.             $dbResult = CUser::GetByID($arFields["OWNER_ID"]);
    205.             if (!$dbResult->Fetch())
    206.             {
    207.                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_ERROR_NO_OWNER_ID"), "ERROR_NO_OWNER_ID");
    208.                 return false;
    209.             }
    210.         }
    211.  
    212.         if ((is_set($arFields, "GROUP_ID") || $ACTION=="ADD") && IntVal($arFields["GROUP_ID"]) <= 0)
    213.         {
    214.             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_EMPTY_GROUP_ID"), "EMPTY_GROUP_ID");
    215.             return false;
    216.         }
    217.         elseif (is_set($arFields, "GROUP_ID"))
    218.         {
    219.             $dbResult = CBlogGroup::GetByID($arFields["GROUP_ID"]);
    220.             if (!$dbResult)
    221.             {
    222.                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GB_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP_ID");
    223.                 return false;
    224.             }
    225.         }
    226.  
    227.         if ((is_set($arFields, "ACTIVE") || $ACTION=="ADD") && $arFields["ACTIVE"] != "Y" && $arFields["ACTIVE"] != "N")
    228.             $arFields["ACTIVE"] = "Y";
    229.         if ((is_set($arFields, "ENABLE_COMMENTS") || $ACTION=="ADD") && $arFields["ENABLE_COMMENTS"] != "Y" && $arFields["ENABLE_COMMENTS"] != "N")
    230.             $arFields["ENABLE_COMMENTS"] = "Y";
    231.         if ((is_set($arFields, "ENABLE_IMG_VERIF") || $ACTION=="ADD") && $arFields["ENABLE_IMG_VERIF"] != "Y" && $arFields["ENABLE_IMG_VERIF"] != "N")
    232.             $arFields["ENABLE_IMG_VERIF"] = "N";
    233.         if ((is_set($arFields, "ENABLE_RSS") || $ACTION=="ADD") && $arFields["ENABLE_RSS"] != "Y" && $arFields["ENABLE_RSS"] != "N")
    234.             $arFields["ENABLE_RSS"] = "N";
    235.  
    236.         return True;
    237.     }
    238.  
    239.     function Delete($ID)
    240.     {
    241.         global $DB;
    242.  
    243.         $ID = IntVal($ID);
    244.         $bSuccess = True;
    245.  
    246.         $db_events = GetModuleEvents("blog", "OnBeforeBlogDelete");
    247.         while ($arEvent = $db_events->Fetch())
    248.             if (ExecuteModuleEvent($arEvent, $ID)===false)
    249.                 return false;
    250.  
    251.         $events = GetModuleEvents("blog", "OnBlogDelete");
    252.         while ($arEvent = $events->Fetch())
    253.             ExecuteModuleEvent($arEvent, $ID);
    254.  
    255.         $arBlog = CBlog::GetByID($ID);
    256.  
    257.         $DB->StartTransaction();
    258.  
    259.         if ($bSuccess)
    260.             $bSuccess = $DB->Query("DELETE FROM b_blog_user2blog WHERE BLOG_ID = ".$ID."", true);
    261.         if ($bSuccess)
    262.             $bSuccess = $DB->Query("DELETE FROM b_blog_user_group_perms WHERE BLOG_ID = ".$ID."", true);
    263.         if ($bSuccess)
    264.             $bSuccess = $DB->Query("DELETE FROM b_blog_user2user_group WHERE BLOG_ID = ".$ID."", true);
    265.         if ($bSuccess)
    266.             $bSuccess = $DB->Query("DELETE FROM b_blog_user_group WHERE BLOG_ID = ".$ID."", true);
    267.         if ($bSuccess)
    268.             $bSuccess = $DB->Query("DELETE FROM b_blog_trackback WHERE BLOG_ID = ".$ID."", true);
    269.         if ($bSuccess)
    270.             $bSuccess = $DB->Query("DELETE FROM b_blog_comment WHERE BLOG_ID = ".$ID."", true);
    271.         if ($bSuccess)
    272.             $bSuccess = $DB->Query("DELETE FROM b_blog_post WHERE BLOG_ID = ".$ID."", true);
    273.         if ($bSuccess)
    274.             $bSuccess = $DB->Query("DELETE FROM b_blog_category WHERE BLOG_ID = ".$ID."", true);
    275.  
    276.         if ($bSuccess)
    277.         {
    278.             unset($GLOBALS["BLOG_CACHE_".$ID]);
    279.             unset($GLOBALS["BLOG4OWNER_CACHE_".$arBlog["OWNER_ID"]]);
    280.         }
    281.  
    282.         if ($bSuccess)
    283.             $bSuccess = $DB->Query("DELETE FROM b_blog WHERE ID = ".$ID."", true);
    284.  
    285.         if ($bSuccess)
    286.             $DB->Commit();
    287.         else
    288.             $DB->Rollback();
    289.  
    290.         if ($bSuccess)
    291.         {
    292.             if (CModule::IncludeModule("search"))
    293.             {
    294.                 CSearch::DeleteIndex("blog", false, "POST", $ID);
    295.                 CSearch::DeleteIndex("blog", "B".$ID);
    296.             }
    297.         }
    298.        
    299.         if ($bSuccess)
    300.         {
    301.             $res = CBlogImage::GetList(array(), array("BLOG_ID"=>$ID));
    302.             while($aImg = $res->Fetch())
    303.                 CBlogImage::Delete($aImg['ID']);
    304.         }
    305.         if ($bSuccess)
    306.             $GLOBALS["USER_FIELD_MANAGER"]->Delete("BLOG_BLOG", $ID);
    307.  
    308.         return $bSuccess;
    309.     }
    310.  
    311.     function SetBlogPerms($ID, $arPerms = array(), $permsType = BLOG_PERMS_POST)
    312.     {
    313.         global $DB;
    314.  
    315.         $ID = IntVal($ID);
    316.         $permsType = (($permsType == BLOG_PERMS_COMMENT) ? BLOG_PERMS_COMMENT : BLOG_PERMS_POST);
    317.  
    318.         $arBlog = CBlog::GetByID($ID);
    319.         if ($arBlog)
    320.         {
    321.             $DB->StartTransaction();
    322.  
    323.             foreach ($arPerms as $key => $value)
    324.             {
    325.                 $dbGroupPerms = CBlogUserGroupPerms::GetList(
    326.                     array(),
    327.                     array(
    328.                         "BLOG_ID" => $ID,
    329.                         "USER_GROUP_ID" => $key,
    330.                         "PERMS_TYPE" => $permsType,
    331.                         "POST_ID" => 0
    332.                     ),
    333.                     false,
    334.                     false,
    335.                     array("ID")
    336.                 );
    337.                 if ($arGroupPerms = $dbGroupPerms->Fetch())
    338.                 {
    339.                     CBlogUserGroupPerms::Update(
    340.                         $arGroupPerms["ID"],
    341.                         array("PERMS" => $value)
    342.                     );
    343.                 }
    344.                 else
    345.                 {
    346.                     CBlogUserGroupPerms::Add(
    347.                         array(
    348.                             "BLOG_ID" => $arBlog["ID"],
    349.                             "USER_GROUP_ID" => $key,
    350.                             "PERMS_TYPE" => $permsType,
    351.                             "POST_ID" => false,
    352.                             "AUTOSET" => "N",
    353.                             "PERMS" => $value
    354.                         )
    355.                     );
    356.                 }
    357.             }
    358.  
    359.             $DB->Commit();
    360.         }
    361.     }
    362.  
    363.     function SetStat($ID)
    364.     {
    365.         global $DB;
    366.         $ID = IntVal($ID);
    367.  
    368.         $dbBlogPost = CBlogPost::GetList(
    369.             array("DATE_PUBLISH" => "DESC"),
    370.             array(
    371.                 "BLOG_ID" => $ID,
    372.                 "<=DATE_PUBLISH" => ConvertTimeStamp(false, "FULL", false),
    373.                 "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH
    374.             ),
    375.             false,
    376.             array("nTopCount" => 1),
    377.             array("ID", "DATE_PUBLISH")
    378.         );
    379.         if ($arBlogPost = $dbBlogPost->Fetch())
    380.         {
    381.             $arFields = array(
    382.                 "LAST_POST_ID" => $arBlogPost["ID"],
    383.                 "LAST_POST_DATE" => $arBlogPost["DATE_PUBLISH"],
    384.                 "=DATE_UPDATE" => $DB->CurrentTimeFunction()
    385.             );
    386.         }
    387.         else
    388.         {
    389.             $arFields = array(
    390.                 "LAST_POST_ID" => false,
    391.                 "LAST_POST_DATE" => false,
    392.                 "=DATE_UPDATE" => $DB->CurrentTimeFunction()
    393.             );
    394.         }
    395.         CBlog::Update($ID, $arFields);
    396.     }
    397.  
    398.     //*************** COMMON UTILS *********************/
    399.     function GetFilterOperation($key)
    400.     {
    401.         $strNegative = "N";
    402.         if (substr($key, 0, 1)=="!")
    403.         {
    404.             $key = substr($key, 1);
    405.             $strNegative = "Y";
    406.         }
    407.  
    408.         $strOrNull = "N";
    409.         if (substr($key, 0, 1)=="+")
    410.         {
    411.             $key = substr($key, 1);
    412.             $strOrNull = "Y";
    413.         }
    414.  
    415.         if (substr($key, 0, 2)==">=")
    416.         {
    417.             $key = substr($key, 2);
    418.             $strOperation = ">=";
    419.         }
    420.         elseif (substr($key, 0, 1)==">")
    421.         {
    422.             $key = substr($key, 1);
    423.             $strOperation = ">";
    424.         }
    425.         elseif (substr($key, 0, 2)=="<=")
    426.         {
    427.             $key = substr($key, 2);
    428.             $strOperation = "<=";
    429.         }
    430.         elseif (substr($key, 0, 1)=="<")
    431.         {
    432.             $key = substr($key, 1);
    433.             $strOperation = "<";
    434.         }
    435.         elseif (substr($key, 0, 1)=="@")
    436.         {
    437.             $key = substr($key, 1);
    438.             $strOperation = "IN";
    439.         }
    440.         elseif (substr($key, 0, 1)=="~")
    441.         {
    442.             $key = substr($key, 1);
    443.             $strOperation = "LIKE";
    444.         }
    445.         elseif (substr($key, 0, 1)=="%")
    446.         {
    447.             $key = substr($key, 1);
    448.             $strOperation = "QUERY";
    449.         }
    450.         else
    451.         {
    452.             $strOperation = "=";
    453.         }
    454.  
    455.         return array("FIELD" => $key, "NEGATIVE" => $strNegative, "OPERATION" => $strOperation, "OR_NULL" => $strOrNull);
    456.     }
    457.  
    458.     function PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
    459.     {
    460.         global $DB;
    461.  
    462.         $strSqlSelect = "";
    463.         $strSqlFrom = "";
    464.         $strSqlWhere = "";
    465.         $strSqlGroupBy = "";
    466.         $strSqlOrderBy = "";
    467.  
    468.         $arGroupByFunct = array("COUNT", "AVG", "MIN", "MAX", "SUM");
    469.  
    470.         $arAlreadyJoined = array();
    471.  
    472.         // GROUP BY -->
    473.         if (is_array($arGroupBy) && count($arGroupBy)>0)
    474.         {
    475.             $arSelectFields = $arGroupBy;
    476.             foreach ($arGroupBy as $key => $val)
    477.             {
    478.                 $val = strtoupper($val);
    479.                 $key = strtoupper($key);
    480.                 if (array_key_exists($val, $arFields) && !in_array($key, $arGroupByFunct))
    481.                 {
    482.                     if (strlen($strSqlGroupBy) > 0)
    483.                         $strSqlGroupBy .= ", ";
    484.                     $strSqlGroupBy .= $arFields[$val]["FIELD"];
    485.  
    486.                     if (isset($arFields[$val]["FROM"])
    487.                         && strlen($arFields[$val]["FROM"]) > 0
    488.                         && !in_array($arFields[$val]["FROM"], $arAlreadyJoined))
    489.                     {
    490.                         if (strlen($strSqlFrom) > 0)
    491.                             $strSqlFrom .= " ";
    492.                         $strSqlFrom .= $arFields[$val]["FROM"];
    493.                         $arAlreadyJoined[] = $arFields[$val]["FROM"];
    494.                     }
    495.                 }
    496.             }
    497.         }
    498.         // <-- GROUP BY
    499.  
    500.         // SELECT -->
    501.         $arFieldsKeys = array_keys($arFields);
    502.  
    503.         if (is_array($arGroupBy) && count($arGroupBy)==0)
    504.         {
    505.             $strSqlSelect = "COUNT(%%_DISTINCT_%% ".$arFields[$arFieldsKeys[0]]["FIELD"].") as CNT ";
    506.         }
    507.         else
    508.         {
    509.             if (isset($arSelectFields) && !is_array($arSelectFields) && is_string($arSelectFields) && strlen($arSelectFields)>0 && array_key_exists($arSelectFields, $arFields))
    510.                 $arSelectFields = array($arSelectFields);
    511.  
    512.             if (!isset($arSelectFields)
    513.                 || !is_array($arSelectFields)
    514.                 || count($arSelectFields)<=0
    515.                 || in_array("*", $arSelectFields))
    516.             {
    517.                 for ($i = 0; $i < count($arFieldsKeys); $i++)
    518.                 {
    519.                     if (isset($arFields[$arFieldsKeys[$i]]["WHERE_ONLY"])
    520.                         && $arFields[$arFieldsKeys[$i]]["WHERE_ONLY"] == "Y")
    521.                     {
    522.                         continue;
    523.                     }
    524.  
    525.                     if (strlen($strSqlSelect) > 0)
    526.                         $strSqlSelect .= ", ";
    527.  
    528.                     if ($arFields[$arFieldsKeys[$i]]["TYPE"] == "datetime")
    529.                     {
    530.                         if ((strtoupper($DB->type)=="ORACLE" || strtoupper($DB->type)=="MSSQL") && (array_key_exists($arFieldsKeys[$i], $arOrder)))
    531.                             $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i]."_X1, ";
    532.  
    533.                         $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "FULL")." as ".$arFieldsKeys[$i];
    534.                     }
    535.                     elseif ($arFields[$arFieldsKeys[$i]]["TYPE"] == "date")
    536.                     {
    537.                         if ((strtoupper($DB->type)=="ORACLE" || strtoupper($DB->type)=="MSSQL") && (array_key_exists($arFieldsKeys[$i], $arOrder)))
    538.                             $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i]."_X1, ";
    539.  
    540.                         $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "SHORT")." as ".$arFieldsKeys[$i];
    541.                     }
    542.                     else
    543.                         $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i];
    544.  
    545.                     if (isset($arFields[$arFieldsKeys[$i]]["FROM"])
    546.                         && strlen($arFields[$arFieldsKeys[$i]]["FROM"]) > 0
    547.                         && !in_array($arFields[$arFieldsKeys[$i]]["FROM"], $arAlreadyJoined))
    548.                     {
    549.                         if (strlen($strSqlFrom) > 0)
    550.                             $strSqlFrom .= " ";
    551.                         $strSqlFrom .= $arFields[$arFieldsKeys[$i]]["FROM"];
    552.                         $arAlreadyJoined[] = $arFields[$arFieldsKeys[$i]]["FROM"];
    553.                     }
    554.                 }
    555.             }
    556.             else
    557.             {
    558.                 foreach ($arSelectFields as $key => $val)
    559.                 {
    560.                     $val = strtoupper($val);
    561.                     $key = strtoupper($key);
    562.                     if (array_key_exists($val, $arFields))
    563.                     {
    564.                         if (strlen($strSqlSelect) > 0)
    565.                             $strSqlSelect .= ", ";
    566.  
    567.                         if (in_array($key, $arGroupByFunct))
    568.                         {
    569.                             $strSqlSelect .= $key."(".$arFields[$val]["FIELD"].") as ".$val;
    570.                         }
    571.                         else
    572.                         {
    573.                             if ($arFields[$val]["TYPE"] == "datetime")
    574.                             {
    575.                                 if ((strtoupper($DB->type)=="ORACLE" || strtoupper($DB->type)=="MSSQL") && (array_key_exists($val, $arOrder)))
    576.                                     $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val."_X1, ";
    577.  
    578.                                 $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "FULL")." as ".$val;
    579.                             }
    580.                             elseif ($arFields[$val]["TYPE"] == "date")
    581.                             {
    582.                                 if ((strtoupper($DB->type)=="ORACLE" || strtoupper($DB->type)=="MSSQL") && (array_key_exists($val, $arOrder)))
    583.                                     $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val."_X1, ";
    584.  
    585.                                 $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "SHORT")." as ".$val;
    586.                             }
    587.                             else
    588.                                 $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val;
    589.                         }
    590.  
    591.                         if (isset($arFields[$val]["FROM"])
    592.                             && strlen($arFields[$val]["FROM"]) > 0
    593.                             && !in_array($arFields[$val]["FROM"], $arAlreadyJoined))
    594.                         {
    595.                             if (strlen($strSqlFrom) > 0)
    596.                                 $strSqlFrom .= " ";
    597.                             $strSqlFrom .= $arFields[$val]["FROM"];
    598.                             $arAlreadyJoined[] = $arFields[$val]["FROM"];
    599.                         }
    600.                     }
    601.                 }
    602.             }
    603.  
    604.             if (strlen($strSqlGroupBy) > 0)
    605.             {
    606.                 if (strlen($strSqlSelect) > 0)
    607.                     $strSqlSelect .= ", ";
    608.                 $strSqlSelect .= "COUNT(%%_DISTINCT_%% ".$arFields[$arFieldsKeys[0]]["FIELD"].") as CNT";
    609.             }
    610.             else
    611.                 $strSqlSelect = "%%_DISTINCT_%% ".$strSqlSelect;
    612.         }
    613.         // <-- SELECT
    614.  
    615.         // WHERE -->
    616.         $arSqlSearch = Array();
    617.  
    618.         if (!is_array($arFilter))
    619.             $filter_keys = Array();
    620.         else
    621.             $filter_keys = array_keys($arFilter);
    622.  
    623.         for ($i = 0; $i < count($filter_keys); $i++)
    624.         {
    625.             $vals = $arFilter[$filter_keys[$i]];
    626.             if (!is_array($vals))
    627.                 $vals = array($vals);
    628.  
    629.             $key = $filter_keys[$i];
    630.             $key_res = CBlog::GetFilterOperation($key);
    631.             $key = $key_res["FIELD"];
    632.             $strNegative = $key_res["NEGATIVE"];
    633.             $strOperation = $key_res["OPERATION"];
    634.             $strOrNull = $key_res["OR_NULL"];
    635.  
    636.             if (array_key_exists($key, $arFields))
    637.             {
    638.                 $arSqlSearch_tmp = array();
    639.                 for ($j = 0; $j < count($vals); $j++)
    640.                 {
    641.                     $val = $vals[$j];
    642.  
    643.                     if (isset($arFields[$key]["WHERE"]))
    644.                     {
    645.                         $arSqlSearch_tmp1 = call_user_func_array(
    646.                                 $arFields[$key]["WHERE"],
    647.                                 array($val, $key, $strOperation, $strNegative, $arFields[$key]["FIELD"], $arFields, $arFilter)
    648.                             );
    649.                         if ($arSqlSearch_tmp1 !== false)
    650.                             $arSqlSearch_tmp[] = $arSqlSearch_tmp1;
    651.                     }
    652.                     else
    653.                     {
    654.                         if ($arFields[$key]["TYPE"] == "int")
    655.                         {
    656.                             if ((IntVal($val) == 0) && (strpos($strOperation, "=") !== False))
    657.                                 $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND" : "OR")." ".(($strNegative == "Y") ? "NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." 0)";
    658.                             else
    659.                                 $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".IntVal($val)." )";
    660.                         }
    661.                         elseif ($arFields[$key]["TYPE"] == "double")
    662.                         {
    663.                             $val = str_replace(",", ".", $val);
    664.  
    665.                             if ((DoubleVal($val) == 0) && (strpos($strOperation, "=") !== False))
    666.                                 $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND" : "OR")." ".(($strNegative == "Y") ? "NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." 0)";
    667.                             else
    668.                                 $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".DoubleVal($val)." )";
    669.                         }
    670.                         elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char")
    671.                         {
    672.                             if ($strOperation == "QUERY")
    673.                             {
    674.                                 $arSqlSearch_tmp[] = GetFilterQuery($arFields[$key]["FIELD"], $val, "Y");
    675.                             }
    676.                             else
    677.                             {
    678.                                 if ((strlen($val) == 0) && (strpos($strOperation, "=") !== False))
    679.                                     $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND NOT" : "OR")." (".$DB->Length($arFields[$key]["FIELD"])." <= 0) ".(($strNegative == "Y") ? "AND NOT" : "OR")." (".$arFields[$key]["FIELD"]." ".$strOperation." '".$DB->ForSql($val)."' )";
    680.                                 else
    681.                                     $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." '".$DB->ForSql($val)."' )";
    682.                             }
    683.                         }
    684.                         elseif ($arFields[$key]["TYPE"] == "datetime")
    685.                         {
    686.                             if (strlen($val) <= 0)
    687.                                 $arSqlSearch_tmp[] = ($strNegative=="Y"?"NOT":"")."(".$arFields[$key]["FIELD"]." IS NULL)";
    688.                             else
    689.                                 $arSqlSearch_tmp[] = ($strNegative=="Y"?" ".$arFields[$key]["FIELD"]." IS NULL OR NOT ":"")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")";
    690.                         }
    691.                         elseif ($arFields[$key]["TYPE"] == "date")
    692.                         {
    693.                             if (strlen($val) <= 0)
    694.                                 $arSqlSearch_tmp[] = ($strNegative=="Y"?"NOT":"")."(".$arFields[$key]["FIELD"]." IS NULL)";
    695.                             else
    696.                                 $arSqlSearch_tmp[] = ($strNegative=="Y"?" ".$arFields[$key]["FIELD"]." IS NULL OR NOT ":"")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "SHORT").")";
    697.                         }
    698.                     }
    699.                 }
    700.  
    701.                 if (isset($arFields[$key]["FROM"])
    702.                     && strlen($arFields[$key]["FROM"]) > 0
    703.                     && !in_array($arFields[$key]["FROM"], $arAlreadyJoined))
    704.                 {
    705.                     if (strlen($strSqlFrom) > 0)
    706.                         $strSqlFrom .= " ";
    707.                     $strSqlFrom .= $arFields[$key]["FROM"];
    708.                     $arAlreadyJoined[] = $arFields[$key]["FROM"];
    709.                 }
    710.  
    711.                 $strSqlSearch_tmp = "";
    712.                 for ($j = 0; $j < count($arSqlSearch_tmp); $j++)
    713.                 {
    714.                     if ($j > 0)
    715.                         $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
    716.                     $strSqlSearch_tmp .= "(".$arSqlSearch_tmp[$j].")";
    717.                 }
    718.                 if ($strOrNull == "Y")
    719.                 {
    720.                     if (strlen($strSqlSearch_tmp) > 0)
    721.                         $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
    722.                     $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." IS ".($strNegative=="Y" ? "NOT " : "")."NULL)";
    723.  
    724.                     if (strlen($strSqlSearch_tmp) > 0)
    725.                         $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
    726.                     if ($arFields[$key]["TYPE"] == "int" || $arFields[$key]["TYPE"] == "double")
    727.                         $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." ".($strNegative=="Y" ? "<>" : "=")." 0)";
    728.                     elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char")
    729.                         $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." ".($strNegative=="Y" ? "<>" : "=")." '')";
    730.                 }
    731.  
    732.                 if ($strSqlSearch_tmp != "")
    733.                     $arSqlSearch[] = "(".$strSqlSearch_tmp.")";
    734.             }
    735.         }
    736.  
    737.         for ($i = 0; $i < count($arSqlSearch); $i++)
    738.         {
    739.             if (strlen($strSqlWhere) > 0)
    740.                 $strSqlWhere .= " AND ";
    741.             $strSqlWhere .= "(".$arSqlSearch[$i].")";
    742.         }
    743.         // <-- WHERE
    744.  
    745.         // ORDER BY -->
    746.         $arSqlOrder = Array();
    747.         foreach ($arOrder as $by => $order)
    748.         {
    749.             $by = strtoupper($by);
    750.             $order = strtoupper($order);
    751.  
    752.             if ($order != "ASC")
    753.                 $order = "DESC";
    754.             else
    755.                 $order = "ASC";
    756.  
    757.             if (array_key_exists($by, $arFields))
    758.             {
    759.                 $arSqlOrder[] = " ".$arFields[$by]["FIELD"]." ".$order." ";
    760.  
    761.                 if (isset($arFields[$by]["FROM"])
    762.                     && strlen($arFields[$by]["FROM"]) > 0
    763.                     && !in_array($arFields[$by]["FROM"], $arAlreadyJoined))
    764.                 {
    765.                     if (strlen($strSqlFrom) > 0)
    766.                         $strSqlFrom .= " ";
    767.                     $strSqlFrom .= $arFields[$by]["FROM"];
    768.                     $arAlreadyJoined[] = $arFields[$by]["FROM"];
    769.                 }
    770.             }
    771.         }
    772.  
    773.         $strSqlOrderBy = "";
    774.         DelDuplicateSort($arSqlOrder);
    775.         for ($i=0; $i<count($arSqlOrder); $i++)
    776.         {
    777.             if (strlen($strSqlOrderBy) > 0)
    778.                 $strSqlOrderBy .= ", ";
    779.  
    780.             if(strtoupper($DB->type)=="ORACLE")
    781.             {
    782.                 if(substr($arSqlOrder[$i], -3)=="ASC")
    783.                     $strSqlOrderBy .= $arSqlOrder[$i]." NULLS FIRST";
    784.                 else
    785.                     $strSqlOrderBy .= $arSqlOrder[$i]." NULLS LAST";
    786.             }
    787.             else
    788.                 $strSqlOrderBy .= $arSqlOrder[$i];
    789.         }
    790.         // <-- ORDER BY
    791.  
    792.         return array(
    793.                 "SELECT" => $strSqlSelect,
    794.                 "FROM" => $strSqlFrom,
    795.                 "WHERE" => $strSqlWhere,
    796.                 "GROUPBY" => $strSqlGroupBy,
    797.                 "ORDERBY" => $strSqlOrderBy
    798.             );
    799.     }
    800.  
    801.     //*************** SELECT *********************/
    802.     function GetByID($ID)
    803.     {
    804.         global $DB;
    805.  
    806.         $ID = IntVal($ID);
    807.  
    808.         if (isset($GLOBALS["BLOG_CACHE_".$ID]) && is_array($GLOBALS["BLOG_CACHE_".$ID]) && is_set($GLOBALS["BLOG_CACHE_".$ID], "ID"))
    809.         {
    810.             return $GLOBALS["BLOG_CACHE_".$ID];
    811.         }
    812.         else
    813.         {
    814.             $strSql =
    815.                 "SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, ".
    816.                 "   B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, ".
    817.                 "   B.LAST_POST_ID, B.AUTO_GROUPS, ".
    818.                 "   ".$DB->DateToCharFunction("B.DATE_CREATE", "FULL")." as DATE_CREATE, ".
    819.                 "   ".$DB->DateToCharFunction("B.DATE_UPDATE", "FULL")." as DATE_UPDATE, ".
    820.                 "   ".$DB->DateToCharFunction("B.LAST_POST_DATE", "FULL")." as LAST_POST_DATE ".
    821.                 "FROM b_blog B ".
    822.                 "WHERE B.ID = ".$ID."";
    823.             $dbResult = $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
    824.             if ($arResult = $dbResult->Fetch())
    825.             {
    826.                 $GLOBALS["BLOG_CACHE_".$ID] = $arResult;
    827.                 return $arResult;
    828.             }
    829.         }
    830.  
    831.         return False;
    832.     }
    833.  
    834.     function GetByOwnerID($ID)
    835.     {
    836.         global $DB;
    837.  
    838.         $ID = IntVal($ID);
    839.  
    840.         if (isset($GLOBALS["BLOG4OWNER_CACHE_".$ID]) && is_array($GLOBALS["BLOG4OWNER_CACHE_".$ID]) && is_set($GLOBALS["BLOG4OWNER_CACHE_".$ID], "ID"))
    841.         {
    842.             return $GLOBALS["BLOG4OWNER_CACHE_".$ID];
    843.         }
    844.         else
    845.         {
    846.             $strSql =
    847.                 "SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, ".
    848.                 "   B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, ".
    849.                 "   B.LAST_POST_ID, B.AUTO_GROUPS, ".
    850.                 "   ".$DB->DateToCharFunction("B.DATE_CREATE", "FULL")." as DATE_CREATE, ".
    851.                 "   ".$DB->DateToCharFunction("B.DATE_UPDATE", "FULL")." as DATE_UPDATE, ".
    852.                 "   ".$DB->DateToCharFunction("B.LAST_POST_DATE", "FULL")." as LAST_POST_DATE ".
    853.                 "FROM b_blog B ".
    854.                 "WHERE B.OWNER_ID = ".$ID."";
    855.             $dbResult = $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
    856.             if ($arResult = $dbResult->Fetch())
    857.             {
    858.                 $GLOBALS["BLOG4OWNER_CACHE_".$ID] = $arResult;
    859.                 return $arResult;
    860.             }
    861.         }
    862.  
    863.         return False;
    864.     }
    865.  
    866.     function GetByUrl($BLOG_URL)
    867.     {
    868.         global $DB;
    869.  
    870.         $BLOG_URL = preg_replace("/[^a-zA-Z0-9_-]/is", "", Trim($BLOG_URL));
    871.  
    872.         if (isset($GLOBALS["BLOGBYURL_CACHE_".$BLOG_URL]) && is_array($GLOBALS["BLOGBYURL_CACHE_".$BLOG_URL]))
    873.         {
    874.             return $GLOBALS["BLOGBYURL_CACHE_".$BLOG_URL];
    875.         }
    876.         else
    877.         {
    878.             $strSql =
    879.                 "SELECT B.ID, B.NAME, B.DESCRIPTION, B.ACTIVE, B.OWNER_ID, B.URL, B.GROUP_ID, ".
    880.                 "   B.ENABLE_COMMENTS, B.ENABLE_IMG_VERIF, B.EMAIL_NOTIFY, B.ENABLE_RSS, B.REAL_URL, ".
    881.                 "   B.LAST_POST_ID, B.AUTO_GROUPS, ".
    882.                 "   ".$DB->DateToCharFunction("B.DATE_CREATE", "FULL")." as DATE_CREATE, ".
    883.                 "   ".$DB->DateToCharFunction("B.DATE_UPDATE", "FULL")." as DATE_UPDATE, ".
    884.                 "   ".$DB->DateToCharFunction("B.LAST_POST_DATE", "FULL")." as LAST_POST_DATE ".
    885.                 "FROM b_blog B ".
    886.                 "WHERE B.URL = '".$DB->ForSql($BLOG_URL)."'";
    887.             $dbResult = $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
    888.             if ($arResult = $dbResult->GetNext())
    889.             {
    890.                 $GLOBALS["BLOGBYURL_CACHE_".$BLOG_URL] = $arResult;
    891.                 return $arResult;
    892.             }
    893.         }
    894.  
    895.         return False;
    896.     }
    897.  
    898.     function BuildRSS($ID, $type = "RSS .92", $numPosts = 10, $blogTemplate="", $postTemplate="", $userTemplate="")
    899.     {
    900.         $ID = IntVal($ID);
    901.         $numPosts = IntVal($numPosts);
    902.         $type = strtolower(preg_replace("/[^a-zA-Z0-9.]/is", "", $type));
    903.         if ($type != "rss2.0" && $type != "atom.03")
    904.             $type = "rss.92";
    905.  
    906.         $rssText = False;
    907.  
    908.         $arBlog = CBlog::GetByID($ID);
    909.         if ($arBlog
    910.             && $arBlog["ACTIVE"] == "Y"
    911.             && $arBlog["ENABLE_RSS"] == "Y")
    912.         {
    913.             $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
    914.             $now = date("r");
    915.             $nowISO = date("Y-m-d\TH:i:s").substr(date("O"), 0, 3).":".substr(date("O"), -2, 2);
    916.  
    917.             $serverName = "";
    918.             $charset = "";
    919.             $language = "";
    920.             $dbSite = CSite::GetList(($b = "sort"), ($o = "asc"), array("LID" => $arGroup["SITE_ID"]));
    921.             if ($arSite = $dbSite->Fetch())
    922.             {
    923.                 $serverName = $arSite["SERVER_NAME"];
    924.                 $charset = $arSite["CHARSET"];
    925.                 $language = $arSite["LANGUAGE_ID"];
    926.             }
    927.  
    928.             if (strlen($serverName) <= 0)
    929.             {
    930.                 if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0)
    931.                     $serverName = SITE_SERVER_NAME;
    932.                 else
    933.                     $serverName = COption::GetOptionString("main", "server_name", "");
    934.             }
    935.  
    936.             if (strlen($charset) <= 0)
    937.             {
    938.                 if (defined("SITE_CHARSET") && strlen(SITE_CHARSET) > 0)
    939.                     $charset = SITE_CHARSET;
    940.                 else
    941.                     $charset = "windows-1251";
    942.             }
    943.  
    944.             if(strlen($blogTemplate)>0)
    945.                 $blogURL = "http://".$serverName.CComponentEngine::MakePathFromTemplate($blogTemplate, array("blog" => $arBlog["URL"]));
    946.             else
    947.                 $blogURL = "http://".$serverName.CBlog::PreparePath($arBlog["URL"], $arGroup["SITE_ID"]);
    948.             $blogName = htmlspecialchars($arBlog["NAME"]);
    949.             $blogDescr = htmlspecialchars($arBlog["DESCRIPTION"]);
    950.  
    951.             $rssText = "";
    952.             if ($type == "rss.92")
    953.             {
    954.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    955.                 $rssText .= "<rss version=".92">\n";
    956.                 $rssText .= " <channel>\n";
    957.                 $rssText .= "   <title>".$blogName."</title>\n";
    958.                 $rssText .= "   <link>".$blogURL."</link>\n";
    959.                 $rssText .= "   <description>".$blogDescr."</description>\n";
    960.                 $rssText .= "   <language>".$language."</language>\n";
    961.                 $rssText .= "   <docs>http://backend.userland.com/rss092</docs>\n";
    962.                 $rssText .= "\n";
    963.             }
    964.             elseif ($type == "rss2.0")
    965.             {
    966.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    967.                 $rssText .= "<rss version="2.0">\n";
    968.                 $rssText .= " <channel>\n";
    969.                 $rssText .= "   <title>".$blogName."</title>\n";
    970.                 $rssText .= "   <guid>".$blogURL."</guid>\n";
    971.                 $rssText .= "   <link>".$blogURL."</link>\n";
    972.                 $rssText .= "   <description>".$blogDescr."</description>\n";
    973.                 $rssText .= "   <language>".$language."</language>\n";
    974.                 $rssText .= "   <docs>http://backend.userland.com/rss2</docs>\n";
    975.                 $rssText .= "   <pubDate>".$now."</pubDate>\n";
    976.                 $rssText .= "\n";
    977.             }
    978.             elseif ($type == "atom.03")
    979.             {
    980.                 $atomID = "tag:".htmlspecialchars($serverName).",".date("Y-m-d").":".$ID;
    981.  
    982.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    983.                 $rssText .= "<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="".$language."">\n";
    984.                 $rssText .= "  <title>".$blogName."</title>\n";
    985.                 $rssText .= "  <tagline>".$blogURL."</tagline>\n";
    986.                 //$rssText .= "  <link href="".$blogURL.""/>";
    987.                 $rssText .= "  <id>".$atomID."</id>\n";
    988.                 $rssText .= "  <link rel="alternate" type="text/html" href="".$blogURL."" />\n";
    989.                 $rssText .= "  <copyright>Copyright (c) ".$blogURL."</copyright>\n";
    990.                 $rssText .= "  <modified>".$nowISO."</modified>\n";
    991.                 $rssText .= "\n";
    992.             }
    993.  
    994.             if(CBlog::GetBlogUserPostPerms($ID, ($GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : 0)) >= BLOG_PERMS_READ)
    995.             {
    996.                 $parser = new blogTextParser();
    997.  
    998.                 $dbPosts = CBlogPost::GetList(
    999.                     array("DATE_PUBLISH" => "DESC"),
    1000.                     array(
    1001.                         "BLOG_ID" => $ID,
    1002.                         "<=DATE_PUBLISH" => ConvertTimeStamp(false, "FULL", false),
    1003.                         "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH
    1004.                     ),
    1005.                     false,
    1006.                     array("nTopCount" => $numPosts),
    1007.                     array("ID", "TITLE", "DETAIL_TEXT", "DATE_PUBLISH", "AUTHOR_ID", "AUTHOR_NAME", "AUTHOR_LAST_NAME", "CATEGORY_NAME", "BLOG_USER_ALIAS")
    1008.                 );
    1009.  
    1010.                 while ($arPost = $dbPosts->Fetch())
    1011.                 {
    1012.                     $perms = CBlogPost::GetBlogUserPostPerms($arPost["ID"], ($GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : 0));
    1013.                     if ($perms < BLOG_PERMS_READ)
    1014.                         continue;
    1015.  
    1016.                     $title = htmlspecialcharsEx($arPost["TITLE"]);
    1017.                     $res = CBlogImage::GetList(array("ID"=>"ASC"),array("POST_ID"=>$arPost['ID'], "BLOG_ID"=>$ID));
    1018.                     while ($arImage = $res->Fetch())
    1019.                                 $arImages[$arImage['ID']] = $arImage['FILE_ID'];
    1020.                     $text = $parser->convert_to_rss(htmlspecialcharsEx($arPost["DETAIL_TEXT"]), $arImages);
    1021.                     $text = "<![CDATA[".$text."]]>";
    1022.  
    1023.                     $arDate = ParseDateTime($arPost["DATE_PUBLISH"], CSite::GetDateFormat("FULL", $arGroup["SITE_ID"]));
    1024.                     $date = date("r", mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
    1025.  
    1026.                     if(strLen($postTemplate)>0)
    1027.                         $url = "http://".$serverName.CComponentEngine::MakePathFromTemplate($postTemplate, array("blog" => $arBlog["URL"], "post_id"=>$arPost["ID"]));
    1028.                     else
    1029.                         $url = "http://".$serverName.CBlogPost::PreparePath($arBlog["URL"], $arPost["ID"], $arGroup["SITE_ID"]);
    1030.  
    1031.                     $category = htmlspecialchars($arPost["CATEGORY_NAME"]);
    1032.                    
    1033.                     $BlogUser = CBlogUser::GetByID($arPost["AUTHOR_ID"], BLOG_BY_USER_ID);
    1034.                     $dbUser = CUser::GetByID($arPost["AUTHOR_ID"]);
    1035.                     $arUser = $dbUser->Fetch();
    1036.                     $author = htmlspecialcharsex(CBlogUser::GetUserName($BlogUser["ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"]));
    1037.                    
    1038.                     if(strLen($userTemplate)>0)
    1039.                         $authorURL = "http://".$serverName.CComponentEngine::MakePathFromTemplate($userTemplate, array("user_id"=>$arPost["AUTHOR_ID"]));
    1040.                     else
    1041.                         $authorURL = "http://".$serverName.CBlogUser::PreparePath($arPost["AUTHOR_ID"], $arGroup["SITE_ID"]);;
    1042.                        
    1043.                     if ($type == "rss.92")
    1044.                     {
    1045.                         $rssText .= "    <item>\n";
    1046.                         $rssText .= "      <title>".$title."</title>\n";
    1047.                         $rssText .= "      <description>".$text."</description>\n";
    1048.                         $rssText .= "      <link>".$url."</link>\n";
    1049.                         $rssText .= "    </item>\n";
    1050.                         $rssText .= "\n";
    1051.                     }
    1052.                     elseif ($type == "rss2.0")
    1053.                     {
    1054.                         $rssText .= "    <item>\n";
    1055.                         $rssText .= "      <title>".$title."</title>\n";
    1056.                         $rssText .= "      <description>".$text."</description>\n";
    1057.                         $rssText .= "      <link>".$url."</link>\n";
    1058.                         $rssText .= "      <guid>".$url."</guid>\n";
    1059.                         $rssText .= "      <pubDate>".$date."</pubDate>\n";
    1060.                         $rssText .= "      <category>".$category."</category>\n";
    1061.                         $rssText .= "    </item>\n";
    1062.                         $rssText .= "\n";
    1063.                     }
    1064.                     elseif ($type == "atom.03")
    1065.                     {
    1066.                         $atomID = "tag:".htmlspecialchars($serverName).":".$arBlog["URL"]."/".$arPost["ID"];
    1067.  
    1068.                         $timeISO = mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]);
    1069.                         $dateISO = date("Y-m-d\TH:i:s", $timeISO).substr(date("O", $timeISO), 0, 3).":".substr(date("O", $timeISO), -2, 2);
    1070.  
    1071.                         $titleRel = htmlspecialchars($arPost["TITLE"]);
    1072.  
    1073.                         $rssText .= "<entry>\n";
    1074.                         $rssText .= "  <title type="text/html">".$title."</title>\n";
    1075.                         $rssText .= "  <link rel="alternate" type="text/html" href="".$url.""/>\n";
    1076.                         $rssText .= "  <issued>".$dateISO."</issued>\n";
    1077.                         $rssText .= "  <modified>".$nowISO."</modified>\n";
    1078.                         $rssText .= "  <id>".$atomID."</id>\n";
    1079.                         $rssText .= "  <content type="text/html" mode="escaped" xml:lang="".$language."" xml:base="".$blogURL."">\n";
    1080.                         $rssText .= $text."\n";
    1081.                         $rssText .= "  </content>\n";
    1082.                         $rssText .= "  <link rel="related" type="text/html" href="".$url."" title="".$titleRel.""/>\n";
    1083.                         $rssText .= "  <author>\n";
    1084.                         $rssText .= "    <name>".$author."</name>\n";
    1085.                         $rssText .= "    <url>".$authorURL."</url>\n";
    1086.                         $rssText .= "  </author>\n";
    1087.                         $rssText .= "</entry>\n";
    1088.                         $rssText .= "\n";
    1089.                     }
    1090.                 }
    1091.             }
    1092.  
    1093.             if ($type == "rss.92")
    1094.                 $rssText .= "  </channel>\n</rss>";
    1095.             elseif ($type == "rss2.0")
    1096.                 $rssText .= "  </channel>\n</rss>";
    1097.             elseif ($type == "atom.03")
    1098.                 $rssText .= "\n\n</feed>";
    1099.         }
    1100.  
    1101.         return $rssText;
    1102.     }
    1103.  
    1104.     function PreparePath($blogUrl, $siteID = False, $is404 = True)
    1105.     {
    1106.         $blogUrl = Trim($blogUrl);
    1107.         if (!$siteID)
    1108.             $siteID = SITE_ID;
    1109.  
    1110.         $dbPath = CBlogSitePath::GetList(array(), array("SITE_ID"=>$siteID));
    1111.         while($arPath = $dbPath->Fetch())
    1112.         {
    1113.             if(strlen($arPath["TYPE"])>0)
    1114.                 $arPaths[$arPath["TYPE"]] = $arPath;
    1115.             else
    1116.                 $arPaths["OLD"] = $arPath;
    1117.         }
    1118.         if(strlen($arPaths["B"])>0)
    1119.         {
    1120.             $result = str_replace("#blog#", $blogUrl, $arPaths["B"]["PATH"]);
    1121.         }
    1122.         else
    1123.         {
    1124.             if($is404)
    1125.                 $result = htmlspecialchars($arPaths["OLD"]["PATH"])."/".htmlspecialchars($blogUrl)."/";
    1126.             else
    1127.                 $result = htmlspecialchars($arPaths["OLD"]["PATH"])."/blog.php?blog=".$blogUrl;
    1128.         }
    1129.  
    1130.         return $result;
    1131.     }
    1132.  
    1133.     // ßâëÿåòñÿ ëè ïîëüçîâàòåëü $userID äðóãîì áëîãà $ID
    1134.     function IsFriend($ID, $userID)
    1135.     {
    1136.         global $DB;
    1137.  
    1138.         $ID = IntVal($ID);
    1139.         $userID = IntVal($userID);
    1140.  
    1141.         if ($ID <= 0 || $userID <= 0)
    1142.             return False;
    1143.  
    1144.         $cnt = CBlogUser::GetList(
    1145.             array(),
    1146.             array("USER_ID" => $userID, "GROUP_BLOG_ID" => $ID),
    1147.             array()
    1148.         );
    1149.  
    1150.         return ($cnt > 0);
    1151.     }
    1152.    
    1153.     function BuildRSSAll($GroupId = 0, $type = "RSS .92", $numPosts = 10, $siteID = SITE_ID, $postTemplate="", $userTemplate="")
    1154.     {
    1155.         $GroupId = IntVal($GroupId);
    1156.         $numPosts = IntVal($numPosts);
    1157.         $type = strtolower(preg_replace("/[^a-zA-Z0-9.]/is", "", $type));
    1158.         if ($type != "rss2.0" && $type != "atom.03")
    1159.             $type = "rss.92";
    1160.  
    1161.         $rssText = False;
    1162.         $groupIdArray = array();
    1163.        
    1164.         if($GroupId > 0)
    1165.         {
    1166.             $arGroup = CBlogGroup::GetByID($GroupId);
    1167.             $groupIdArray = Array($arGroup["ID"]);
    1168.         }
    1169.         else
    1170.         {
    1171.             if($siteID != false)
    1172.                 $arFilter = Array("SITE_ID" => $siteID);
    1173.             else
    1174.                 $arFilter = Array();
    1175.             $dbGroupSite = CBlogGroup::GetList(Array(), $arFilter, false, false, Array("ID", "SITE_ID", "NAME"));
    1176.             while($arGroupSite = $dbGroupSite->Fetch())
    1177.             {
    1178.                 $arGroupArray[$arGroupSite["ID"]] = $arGroupSite;
    1179.                 $groupIdArray[] = $arGroupSite["ID"];
    1180.             }
    1181.             $arGroup = $arGroupArray[$groupIdArray[0]["ID"]];
    1182.         }
    1183.  
    1184.         $arBlogsIdArray = Array();
    1185.        
    1186.         $dbBlog = CBlog::GetList(Array(), Array("ACTIVE" => "Y", "ENABLE_RSS" => "Y", "GROUP_ID" => $groupIdArray));
    1187.         while($arBlog = $dbBlog->Fetch())
    1188.         {
    1189.             if(CBlog::GetBlogUserPostPerms($arBlog["ID"], ($GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : 0)) >= BLOG_PERMS_READ)
    1190.                 $arBlogsIdArray[] = $arBlog["ID"];
    1191.             $arBlogArray[$arBlog["ID"]] = $arBlog;
    1192.         }
    1193.  
    1194.         if(count($arBlogsIdArray)>0)
    1195.         {
    1196.             $now = date("r");
    1197.             $nowISO = date("Y-m-d\TH:i:s").substr(date("O"), 0, 3).":".substr(date("O"), -2, 2);
    1198.  
    1199.             $serverName = "";
    1200.             $charset = "";
    1201.             $language = "";
    1202.             $dbSite = CSite::GetList(($b = "sort"), ($o = "asc"), array("LID" => $arGroup["SITE_ID"]));
    1203.             if ($arSite = $dbSite->Fetch())
    1204.             {
    1205.                 $serverName = $arSite["SERVER_NAME"];
    1206.                 $charset = $arSite["CHARSET"];
    1207.                 $language = $arSite["LANGUAGE_ID"];
    1208.             }
    1209.  
    1210.             if (strlen($serverName) <= 0)
    1211.             {
    1212.                 if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0)
    1213.                     $serverName = SITE_SERVER_NAME;
    1214.                 else
    1215.                     $serverName = COption::GetOptionString("main", "server_name", "");
    1216.             }
    1217.  
    1218.             if (strlen($charset) <= 0)
    1219.             {
    1220.                 if (defined("SITE_CHARSET") && strlen(SITE_CHARSET) > 0)
    1221.                     $charset = SITE_CHARSET;
    1222.                 else
    1223.                     $charset = "windows-1251";
    1224.             }
    1225.  
    1226.             $blogURL = "http://".$serverName;
    1227.             $blogName = GetMessage("BLG_RSS_ALL_TITLE")." "".htmlspecialchars($arSite["NAME"])."" (".$serverName.")";
    1228.  
    1229.             $rssText = "";
    1230.             if ($type == "rss.92")
    1231.             {
    1232.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    1233.                 $rssText .= "<rss version=".92">\n";
    1234.                 $rssText .= " <channel>\n";
    1235.                 $rssText .= "   <title>".$blogName."</title>\n";
    1236.                 $rssText .= "   <link>".$blogURL."</link>\n";
    1237.                 $rssText .= "   <guid>".$blogURL."</guid>\n";
    1238.                 $rssText .= "   <language>".$language."</language>\n";
    1239.                 $rssText .= "   <docs>http://backend.userland.com/rss092</docs>\n";
    1240.                 $rssText .= "\n";
    1241.             }
    1242.             elseif ($type == "rss2.0")
    1243.             {
    1244.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    1245.                 $rssText .= "<rss version="2.0">\n";
    1246.                 $rssText .= " <channel>\n";
    1247.                 $rssText .= "   <title>".$blogName."</title>\n";
    1248.                 $rssText .= "   <link>".$blogURL."</link>\n";
    1249.                 $rssText .= "   <language>".$language."</language>\n";
    1250.                 $rssText .= "   <docs>http://backend.userland.com/rss2</docs>\n";
    1251.                 $rssText .= "   <pubDate>".$now."</pubDate>\n";
    1252.                 $rssText .= "\n";
    1253.             }
    1254.             elseif ($type == "atom.03")
    1255.             {
    1256.                 $atomID = "tag:".htmlspecialchars($serverName).",".date("Y-m-d").":".$ID;
    1257.  
    1258.                 $rssText .= "<"."?xml version="1.0" encoding="".$charset.""?".">\n\n";
    1259.                 $rssText .= "<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="".$language."">\n";
    1260.                 $rssText .= "  <title>".$blogName."</title>\n";
    1261.                 $rssText .= "  <tagline>".$blogURL."</tagline>\n";
    1262.                 $rssText .= "  <id>".$atomID."</id>\n";
    1263.                 $rssText .= "  <link rel="alternate" type="text/html" href="".$blogURL."" />\n";
    1264.                 $rssText .= "  <copyright>Copyright (c) ".$blogURL."</copyright>\n";
    1265.                 $rssText .= "  <modified>".$nowISO."</modified>\n";
    1266.                 $rssText .= "\n";
    1267.             }
    1268.  
    1269.             $parser = new blogTextParser();
    1270.  
    1271.             $dbPosts = CBlogPost::GetList(
    1272.                 array("DATE_PUBLISH" => "DESC"),
    1273.                 array(
    1274.                     "BLOG_ID" => $arBlogsIdArray,
    1275.                     "<=DATE_PUBLISH" => ConvertTimeStamp(false, "FULL", false),
    1276.                     "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH
    1277.                 ),
    1278.                 false,
    1279.                 array("nTopCount" => $numPosts),
    1280.                 array("ID", "TITLE", "DETAIL_TEXT", "DATE_PUBLISH", "AUTHOR_ID", "CATEGORY_NAME", "BLOG_USER_ALIAS", "BLOG_ID")
    1281.             );
    1282.  
    1283.             while ($arPost = $dbPosts->Fetch())
    1284.             {
    1285.                 $perms = CBlogPost::GetBlogUserPostPerms($arPost["ID"], ($GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : 0));
    1286.                 if ($perms < BLOG_PERMS_READ)
    1287.                     continue;
    1288.  
    1289.                 $dbUser = CUser::GetByID($arPost["AUTHOR_ID"]);
    1290.                 $arUser = $dbUser->Fetch();
    1291.                 $author = CBlogUser::GetUserName($arPost["BLOG_USER_ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"]);
    1292.                
    1293.                 $title = htmlspecialcharsEx($author.": ".$arPost["TITLE"]);
    1294.                 $res = CBlogImage::GetList(array("ID"=>"ASC"),array("POST_ID"=>$arPost["ID"], "BLOG_ID"=>$arPost["BLOG_ID"]));
    1295.                 while ($arImage = $res->Fetch())
    1296.                             $arImages[$arImage['ID']] = $arImage['FILE_ID'];
    1297.                 $text = $parser->convert_to_rss(htmlspecialcharsEx($arPost["DETAIL_TEXT"]), $arImages);
    1298.                 $text = "<![CDATA[".$text."]]>";
    1299.  
    1300.                 $arDate = ParseDateTime($arPost["DATE_PUBLISH"], CSite::GetDateFormat("FULL", $arGroup["SITE_ID"]));
    1301.                 $date = date("r", mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
    1302.  
    1303.                 if(strLen($postTemplate)>0)
    1304.                     $url = "http://".$serverName.CComponentEngine::MakePathFromTemplate($postTemplate, array("blog" => $arBlogArray[$arPost["BLOG_ID"]]["URL"], "post_id"=>$arPost["ID"]));
    1305.                 else
    1306.                     $url = "http://".$serverName.CBlogPost::PreparePath($arBlogArray[$arPost["BLOG_ID"]]["URL"], $arPost["ID"], $arGroup["SITE_ID"]);
    1307.  
    1308.                 $category = htmlspecialchars($arPost["CATEGORY_NAME"]);
    1309.                
    1310.                 if(strLen($userTemplate)>0)
    1311.                     $authorURL = "http://".$serverName.CComponentEngine::MakePathFromTemplate($userTemplate, array("user_id"=>$arPost["AUTHOR_ID"]));
    1312.                 else
    1313.                     $authorURL = "http://".$serverName.CBlogUser::PreparePath($arPost["AUTHOR_ID"], $arGroup["SITE_ID"]);;
    1314.                    
    1315.                 if ($type == "rss.92")
    1316.                 {
    1317.                     $rssText .= "    <item>\n";
    1318.                     $rssText .= "      <title>".$title."</title>\n";
    1319.                     $rssText .= "      <description>".$text."</description>\n";
    1320.                     $rssText .= "      <link>".$url."</link>\n";
    1321.                     $rssText .= "    </item>\n";
    1322.                     $rssText .= "\n";
    1323.                 }
    1324.                 elseif ($type == "rss2.0")
    1325.                 {
    1326.                     $rssText .= "    <item>\n";
    1327.                     $rssText .= "      <title>".$title."</title>\n";
    1328.                     $rssText .= "      <description>".$text."</description>\n";
    1329.                     $rssText .= "      <link>".$url."</link>\n";
    1330.                     $rssText .= "      <guid>".$url."</guid>\n";
    1331.                     $rssText .= "      <pubDate>".$date."</pubDate>\n";
    1332.                     $rssText .= "      <category>".$category."</category>\n";
    1333.                     $rssText .= "    </item>\n";
    1334.                     $rssText .= "\n";
    1335.                 }
    1336.                 elseif ($type == "atom.03")
    1337.                 {
    1338.                     $atomID = "tag:".htmlspecialchars($serverName).":".$arBlog["URL"]."/".$arPost["ID"];
    1339.  
    1340.                     $timeISO = mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]);
    1341.                     $dateISO = date("Y-m-d\TH:i:s", $timeISO).substr(date("O", $timeISO), 0, 3).":".substr(date("O", $timeISO), -2, 2);
    1342.  
    1343.                     $titleRel = htmlspecialchars($arPost["TITLE"]);
    1344.  
    1345.                     $rssText .= "<entry>\n";
    1346.                     $rssText .= "  <title type="text/html">".$title."</title>\n";
    1347.                     $rssText .= "  <link rel="alternate" type="text/html" href="".$url.""/>\n";
    1348.                     $rssText .= "  <issued>".$dateISO."</issued>\n";
    1349.                     $rssText .= "  <modified>".$nowISO."</modified>\n";
    1350.                     $rssText .= "  <id>".$atomID."</id>\n";
    1351.                     $rssText .= "  <content type="text/html" mode="escaped" xml:lang="".$language."" xml:base="".$blogURL."">\n";
    1352.                     $rssText .= $text."\n";
    1353.                     $rssText .= "  </content>\n";
    1354.                     $rssText .= "  <link rel="related" type="text/html" href="".$url."" title="".$titleRel.""/>\n";
    1355.                     $rssText .= "  <author>\n";
    1356.                     $rssText .= "    <name>".$author."</name>\n";
    1357.                     $rssText .= "    <url>".$authorURL."</url>\n";
    1358.                     $rssText .= "  </author>\n";
    1359.                     $rssText .= "</entry>\n";
    1360.                     $rssText .= "\n";
    1361.                 }
    1362.             }
    1363.  
    1364.             if ($type == "rss.92")
    1365.                 $rssText .= "  </channel>\n</rss>";
    1366.             elseif ($type == "rss2.0")
    1367.                 $rssText .= "  </channel>\n</rss>";
    1368.             elseif ($type == "atom.03")
    1369.                 $rssText .= "\n\n</feed>";
    1370.         }
    1371.  
    1372.         return $rssText;
    1373.     }
    1374. }
    1375. ?>
    1376.  
     
  21. SeregA

    SeregA Активный пользователь

    С нами с:
    2 фев 2006
    Сообщения:
    269
    Симпатии:
    0
    Адрес:
    Saint Petersburg, Russia
    О_о обалдеть! и так с каждым пермишином???
    (шепетом) кстати сорцами не поделишься?)
     
  22. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    440Hz, капец какой. я им сочувствую.
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ух ты, у меня, в выше, и то не так страшно
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    $GLOBALS["BLOG_CACHE_".$ID]

    мляяя
     
  25. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Mr.M.I.T.
    да лана, в том творении, что ты выкладывал, быдлокод еще тот. Я блевал тока так. Пожостче будет, пожалуй.
    глобал кнф, дб.

    PHP:
    1. <?php
    2. if ($bSuccess)
    3.     $DB->Commit();
    4. else
    5.     $DB->Rollback();
    6.  
    Кто кроме меня понял сокровенный смысл сих строк?