<commit_before><?php
/*---------------------------------------------------------------------------
 * @Project: Alto CMS
 * @Project URI: http://altocms.com
 * @Description: Advanced Community Engine
 * @Copyright: Alto CMS Team
 * @License: GNU GPL v2 & MIT
 *----------------------------------------------------------------------------
 * Based on
 *   LiveStreet Engine Social Networking by <NAME>
 *   Site: www.livestreet.ru
 *   E-mail: <EMAIL>
 *----------------------------------------------------------------------------
 */

/**
 * @package modules.comment
 * @since   1.0
 */
class ModuleComment_MapperComment extends Mapper {

    /**
     * @deprecated  since 1.1
     *
     * @param       $sDate
     * @param       $sTargetType
     * @param       $iLimit
     * @param array $aExcludeTarget
     * @param array $aExcludeParentTarget
     *
     * @return array
     */
    public function GetCommentsRatingByDate($sDate, $sTargetType, $iLimit, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        return $this->GetCommentsIdByRatingAndDate($sDate, $sTargetType, $iLimit, $aExcludeTarget, $aExcludeParentTarget);
    }

    /**
     * Получить ID комментатриев по рейтингу и дате
     *
     * @param  string   $sDate                   Дата за которую выводить рейтинг
     * @param  string   $sTargetType             Тип владельца комментария
     * @param  int      $iLimit                  Количество элементов
     * @param  int[]    $aExcludeTarget          Список ID владельцев, которые необходимо исключить из выдачи
     * @param  int[]    $aExcludeParentTarget    Список ID родителей владельцев, которые необходимо исключить из выдачи
     *
     * @return int[]
     */
    public function GetCommentsIdByRatingAndDate($sDate, $sTargetType, $iLimit, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        $sql = "SELECT
					comment_id
				FROM 
					?_comment
				WHERE 
					target_type = ?
					AND 
					comment_date >= ?
					AND 
					comment_rating >= 0
					AND
					comment_delete = 0
					AND 
					comment_publish = 1 
					{ AND target_id NOT IN(?a) }  
					{ AND target_parent_id NOT IN (?a) }
				ORDER by comment_rating desc, comment_id desc
				LIMIT 0, ?d ";

        $aCommentsId = $this->oDb->selectCol($sql,
            $sTargetType,
            $sDate,
            (is_array($aExcludeTarget) && count($aExcludeTarget)) ? $aExcludeTarget : DBSIMPLE_SKIP,
            (count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
            $iLimit
        );
        return $aCommentsId ? $aCommentsId : array();
    }

    /**
     * Получает уникальный коммент, это помогает спастись от дублей комментов
     *
     * @param int    $iTargetId      ID владельца комментария
     * @param string $sTargetType    Тип владельца комментария
     * @param int    $iUserId        ID пользователя
     * @param int    $iCommentPId    ID родительского комментария
     * @param string $sHash          Хеш строка текста комментария
     *
     * @return int|null
     */
    public function GetCommentUnique($iTargetId, $sTargetType, $iUserId, $iCommentPId, $sHash) {

        $sql = "
            SELECT comment_id
            FROM ?_comment
			WHERE 
				target_id = ?d 
				AND
				target_type = ? 
				AND
				user_id = ?d
				AND
				((comment_pid = ?) OR (? is NULL and comment_pid is NULL))
				AND
				comment_text_hash =?
			LIMIT 1
				";
        $iCommentId = $this->oDb->selectCell($sql, $iTargetId, $sTargetType, $iUserId, $iCommentPId, $iCommentPId, $sHash);
        return $iCommentId ? $iCommentId : null;
    }

    /**
     * @deprecated  since 1.1
     *
     * @param       $sTargetType
     * @param       $iCount
     * @param       $iCurrPage
     * @param       $iPerPage
     * @param array $aExcludeTarget
     * @param array $aExcludeParentTarget
     *
     * @return array
     */
    public function GetCommentsAll($sTargetType, &$iCount, $iCurrPage, $iPerPage, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        return $this->GetCommentsIdByTargetType($sTargetType, $iCount, $iCurrPage, $iPerPage, $aExcludeTarget, $aExcludeParentTarget);
    }

    /**
     * Получить ID комментариев по типу
     *
     * @param string $sTargetType             Тип владельца комментария
     * @param int    $iCount                  Возвращает общее количество элементов
     * @param int    $iCurrPage               Номер страницы
     * @param int    $iPerPage                Количество элементов на страницу
     * @param array  $aExcludeTarget          Список ID владельцев, которые необходимо исключить из выдачи
     * @param array  $aExcludeParentTarget    Список ID родителей владельцев, которые необходимо исключить из выдачи, например, исключить комментарии топиков к определенным блогам(закрытым)
     *
     * @return int[]
     */
    public function GetCommentsIdByTargetType($sTargetType, &$iCount, $iCurrPage, $iPerPage, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        $aFilter = array(
            'target_type' => $sTargetType,
            'delete' => 0,
            'publish' => 1,
            'target_id' => $aExcludeTarget,
            'target_parent_id' => $aExcludeParentTarget,
        );
        return $this->GetCommentsIdByFilter($aFilter, $iCount, $iCurrPage, $iPerPage);<commit_msg>Исправлена ошибка отображения комментариев из закрытых блогов всем пользователям, #569<commit_after><?php
/*---------------------------------------------------------------------------
 * @Project: Alto CMS
 * @Project URI: http://altocms.com
 * @Description: Advanced Community Engine
 * @Copyright: Alto CMS Team
 * @License: GNU GPL v2 & MIT
 *----------------------------------------------------------------------------
 * Based on
 *   LiveStreet Engine Social Networking by <NAME>
 *   Site: www.livestreet.ru
 *   E-mail: <EMAIL>
 *----------------------------------------------------------------------------
 */

/**
 * @package modules.comment
 * @since   1.0
 */
class ModuleComment_MapperComment extends Mapper {

    /**
     * @deprecated  since 1.1
     *
     * @param       $sDate
     * @param       $sTargetType
     * @param       $iLimit
     * @param array $aExcludeTarget
     * @param array $aExcludeParentTarget
     *
     * @return array
     */
    public function GetCommentsRatingByDate($sDate, $sTargetType, $iLimit, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        return $this->GetCommentsIdByRatingAndDate($sDate, $sTargetType, $iLimit, $aExcludeTarget, $aExcludeParentTarget);
    }

    /**
     * Получить ID комментатриев по рейтингу и дате
     *
     * @param  string   $sDate                   Дата за которую выводить рейтинг
     * @param  string   $sTargetType             Тип владельца комментария
     * @param  int      $iLimit                  Количество элементов
     * @param  int[]    $aExcludeTarget          Список ID владельцев, которые необходимо исключить из выдачи
     * @param  int[]    $aExcludeParentTarget    Список ID родителей владельцев, которые необходимо исключить из выдачи
     *
     * @return int[]
     */
    public function GetCommentsIdByRatingAndDate($sDate, $sTargetType, $iLimit, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        $sql = "SELECT
					comment_id
				FROM 
					?_comment
				WHERE 
					target_type = ?
					AND 
					comment_date >= ?
					AND 
					comment_rating >= 0
					AND
					comment_delete = 0
					AND 
					comment_publish = 1 
					{ AND target_id NOT IN(?a) }  
					{ AND target_parent_id NOT IN (?a) }
				ORDER by comment_rating desc, comment_id desc
				LIMIT 0, ?d ";

        $aCommentsId = $this->oDb->selectCol($sql,
            $sTargetType,
            $sDate,
            (is_array($aExcludeTarget) && count($aExcludeTarget)) ? $aExcludeTarget : DBSIMPLE_SKIP,
            (count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
            $iLimit
        );
        return $aCommentsId ? $aCommentsId : array();
    }

    /**
     * Получает уникальный коммент, это помогает спастись от дублей комментов
     *
     * @param int    $iTargetId      ID владельца комментария
     * @param string $sTargetType    Тип владельца комментария
     * @param int    $iUserId        ID пользователя
     * @param int    $iCommentPId    ID родительского комментария
     * @param string $sHash          Хеш строка текста комментария
     *
     * @return int|null
     */
    public function GetCommentUnique($iTargetId, $sTargetType, $iUserId, $iCommentPId, $sHash) {

        $sql = "
            SELECT comment_id
            FROM ?_comment
			WHERE 
				target_id = ?d 
				AND
				target_type = ? 
				AND
				user_id = ?d
				AND
				((comment_pid = ?) OR (? is NULL and comment_pid is NULL))
				AND
				comment_text_hash =?
			LIMIT 1
				";
        $iCommentId = $this->oDb->selectCell($sql, $iTargetId, $sTargetType, $iUserId, $iCommentPId, $iCommentPId, $sHash);
        return $iCommentId ? $iCommentId : null;
    }

    /**
     * @deprecated  since 1.1
     *
     * @param       $sTargetType
     * @param       $iCount
     * @param       $iCurrPage
     * @param       $iPerPage
     * @param array $aExcludeTarget
     * @param array $aExcludeParentTarget
     *
     * @return array
     */
    public function GetCommentsAll($sTargetType, &$iCount, $iCurrPage, $iPerPage, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        return $this->GetCommentsIdByTargetType($sTargetType, $iCount, $iCurrPage, $iPerPage, $aExcludeTarget, $aExcludeParentTarget);
    }

    /**
     * Получить ID комментариев по типу
     *
     * @param string $sTargetType             Тип владельца комментария
     * @param int    $iCount                  Возвращает общее количество элементов
     * @param int    $iCurrPage               Номер страницы
     * @param int    $iPerPage                Количество элементов на страницу
     * @param array  $aExcludeTarget          Список ID владельцев, которые необходимо исключить из выдачи
     * @param array  $aExcludeParentTarget    Список ID родителей владельцев, которые необходимо исключить из выдачи, например, исключить комментарии топиков к определенным блогам(закрытым)
     *
     * @return int[]
     */
    public function GetCommentsIdByTargetType($sTargetType, &$iCount, $iCurrPage, $iPerPage, $aExcludeTarget = array(), $aExcludeParentTarget = array()) {

        $aFilter = array(
            'target_type' => $sTargetType,
            'delete' => 0,
            'publish' => 1,
            'not_target_id' => $aExcludeTarget,
            'not_target_parent_id' => $aExcludeParentTarget,
        );
        return $this->GetCommentsIdByFilter($aFilter, $iCount, $iCurrPage, $iPerPage);
{'fraction_non_alphanumeric': 0.13622463163747567, 'fraction_numerical': 0.002872764340654249, 'mean_word_length': 2.062429057888763, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4503669', 'n_tokens_mistral': 3665, 'n_tokens_neox': 3574, 'n_words': 798}