##############################################################
## Название мода: Подарки 2.0
## Автор мода: _Xz_ http://torrentpier.me/members/_xz_.2/
## Описание мода: Мод позволяет дарить подарки пользователям за очки сидирования
## Адаптация: DimaUZB2001
## TorrentPier 2.4 / PHP 8.1+
## Уровень инсталяции: простой
##############################################################

#
#--[SQL]--------------------------------
#

CREATE TABLE IF NOT EXISTS `bb_presents` (
  `present_id` mediumint(8) unsigned NOT NULL auto_increment,
  `present_name` varchar(255) default NULL,
  `present_pic` varchar(255) default NULL,
  `present_price` mediumint(8) NOT NULL default '0',
  `present_active` tinyint(1) NOT NULL default '1',
  `present_type` mediumint(8) default '0',
  PRIMARY KEY  (`present_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `bb_users_presents` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `user_id` mediumint(8) default '0',
  `present_id` mediumint(8) default '0',
  `given_id` mediumint(8) NOT NULL default '0',
  `time` int(11) NOT NULL default '0',
  `given_hide` tinyint(1) NOT NULL default '0',
  `comment` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `bb_config` VALUES ('presents', '1');

#
#-----[ OPEN ]------------------------------------------
#

/library/includes/init_bb.php

#
#-----[ FIND ]------------------------------------------
#

define('BB_WORDS', 'bb_words');

#
#-----[ BEFORE, ADD ]-----------------------------------
#

define('BB_PRESENTS', 'bb_presents');
define('BB_USERS_PRESENTS', 'bb_users_presents');

#
#-----[ OPEN ]------------------------------------------
#

admin/admin_board.php

#
#-----[ FIND ]------------------------------------------
#

'SEED_BONUS_USER_REGDATE' => $new['seed_bonus_user_regdate'],

#
#-----[ AFTER, ADD ]-----------------------------------
#

'PRESENTS' => $new['presents'],

#
#-----[ OPEN ]------------------------------------------
#

library/includes/ucp/viewprofile.php

#
#-----[ FIND ]------------------------------------------
#

'GROUP_MEMBERSHIP' => false,

#
#-----[ ADD ]-----------------------------------
#

'EDIT_PROF' => $profile_user_id,
'SHOW_PRESENTS' => $bb_cfg['presents'],

#
#-----[ FIND ]------------------------------------------
#

print_page('usercp_viewprofile.tpl');

#
#-----[ BEFORE, ADD ]-----------------------------------
#

if ($bb_cfg['seed_bonus_enabled'] && $bb_cfg['presents']) {
    $template->assign_vars([
        'SHOW_USER_PRESENTS' => false,
        'SHOW_PRESENTS'      => true,
    ]);

    $userId = (int) $profiledata['user_id'];
    $start = isset($_REQUEST['start']) ? abs((int) $_REQUEST['start']) : 0;
    $perPage = 8;
    $columns = 4;

    $count = DB()->fetch_row("
        SELECT COUNT(present_id) as present 
        FROM " . BB_USERS_PRESENTS . " 
        WHERE user_id = $userId
    ");

    $totalPresents = (int) ($count['present'] ?? 0);

    if ($totalPresents) {
        $rows = DB()->fetch_rowset("
            SELECT pre.*, p.*, u.username, u.user_rank 
            FROM " . BB_USERS_PRESENTS . " pre
            INNER JOIN " . BB_PRESENTS . " p ON pre.present_id = p.present_id
            INNER JOIN " . BB_USERS . " u ON pre.given_id = u.user_id
            WHERE pre.user_id = $userId 
            ORDER BY pre.time DESC 
            LIMIT $start, $perPage
        ");

        if (!empty($rows)) {
            $template->assign_vars([
                'SHOW_USER_PRESENTS' => true,
            ]);

            for ($j = 0, $total = count($rows); $j < $total; $j += $columns) {
                $template->assign_block_vars('presentrow', []);

                for ($i = $j; $i < $j + $columns; $i++) {
                    if ($i >= $total) {
                        $template->assign_block_vars('presentrow.not', []);
                        continue;
                    }

                    $row = $rows[$i];

                    $givenUser = match (true) {
                        (bool) $row['given_hide'] && !IS_ADMIN => '<b>' . $lang['ANONYMOUS'] . '</b>',
                        (bool) $row['given_hide'] && IS_ADMIN  => profile_url([
                            'username'  => '<b>[' . $row['username'] . ']</b>',
                            'user_id'   => $row['given_id'],
                            'user_rank' => $row['user_rank'],
                        ]),
                        default => profile_url([
                            'username'  => '<b>' . $row['username'] . '</b>',
                            'user_id'   => $row['given_id'],
                            'user_rank' => $row['user_rank'],
                        ]),
                    };

                    $template->assign_block_vars('presentrow.presentcol', [
                        'NAME'  => htmlspecialchars((string) $row['present_name'], ENT_QUOTES, 'UTF-8'),
                        'PIC'   => htmlspecialchars((string) $row['present_pic'], ENT_QUOTES, 'UTF-8'),
                        'PRICE' => (int) $row['present_price'],
                        'ID'    => (int) $row['present_id'],
                        'GIVEN' => $givenUser,
                    ]);
                }
            }
        } else {
            $template->assign_vars([
                'SHOW_USER_PRESENTS' => true,
            ]);
            $template->assign_block_vars('not_present', []);
        }

        generate_pagination(
            PROFILE_URL . $userId,
            $totalPresents,
            $perPage,
            $start,
            false
        );
    }
}

#
#-----[ OPEN ]------------------------------------------
#

library/language/ru/main.php

#
#-----[ FIND ]---------------------------------------
#

$lang['BONUS_RETURN'] = 'Вернуться к обмену Сид бонусов';

#
#-----[ AFTER, ADD ]-------------------------------------------
#

// Presents
$lang['PRESENTS'] = 'Подарки за СидБонус';
$lang['PRESENTS_OFF'] = 'Мод отключен администратором';
$lang['PRESENTS_CATALOG'] = 'Каталог подарков';
$lang['BAY_PRESENT'] = 'Купить подарок';
$lang['GIVE_PRESENT'] = 'Подарить подарок';
$lang['ADD_PRESENT'] = 'Добавить подарок';
$lang['CHANGING_PRESENT'] = 'Изменение подарка';
$lang['PRESENT'] = 'Подарок';
$lang['PRESENT_NAME'] = 'Название подарка';
$lang['PRESENT_PRICE'] = 'Цена подарка';
$lang['PRESENT_TYPE'] = 'Тип';
$lang['PRESENT_ACTIVE'] = 'Активный';
$lang['PRESENT_DESC'] = 'Описание подарка';
$lang['PRESENT_ERROR_PIC'] = 'Картинка отсутствует';
$lang['PRESENT_ERROR_NAME'] = 'Не указано название подарка';
$lang['PRESENT_ERROR_PRICE'] = 'Не указано цена подарка';
$lang['PRESENT_ERROR_TYPE'] = 'Не указан тип подарка';
$lang['ANONYMOUS'] = 'Аноним';
$lang['NAME'] = 'Название';
$lang['GIVE'] = 'Подарить';
$lang['ADD'] = 'Добавить';
$lang['PRESENT_MAKE_ANONYMOUS'] = 'Сделать подарок анонимным';
$lang['PRESENT_TO'] = 'Кому подарить';
$lang['PRESENT_WISH'] = 'Пожелание';
$lang['PRESENT_NOT_SELECT'] = 'Вы не выбрали подарок';
$lang['PRESENT_NO'] = 'Такого подарка не существует';
$lang['PRESENT_DELETE'] = 'Подарок удален';
$lang['PRESENT_NOT_SELECT_USER'] = 'Вы не выбрали кому подарите подарок';
$lang['PRESENT_NOT_FOUND_USER'] = 'Пользователь не найден';
$lang['PRESENT_NOT_YOURSELF'] = 'Нельзя себе делать подарки';
$lang['PRESENT_NOT_ANONYMOUS'] = 'Подарки можно дарить только пользователям';
$lang['PRESENT_NOT_BOT'] = 'Нельзя делать подарки боту';
$lang['PRESENT_TOO_HIGH'] = 'Этот подарок для вас слишком дорогой';
$lang['PRESENT_GIFTED'] = 'Подарок подарен пользователю';
$lang['PRESENT_NEW'] = 'У вас новый подарок';
$lang['PRESENT_COMMENT'] = 'Так же вам оставил пожелаение';
$lang['PRESENT_INCOGNITO'] = 'оставшийся неизвестным';
$lang['PRESENT_PRICE_MESS'] = '(у вас в наличии <b>%s</b>)';
$lang['PRESENT_MESSAGE'] = 'Пользователь %s подарил Вам подарок.%s[br][br]Вы его можете посмотреть в своём профиле перейдя по [url=%s]ссылке[/url].[br][br][align=right]Сообщение сгенерировано автоматически.[/align]';
$lang['PRESENT_BONUS'] = 'Описание подарка';
$lang['PRESENT_ADD'] = 'Подарок добавлен';
$lang['PRESENT_NO_ADD'] = 'Подарок не добавлен';
$lang['PRESENT_EDITED'] = 'Подарок изменен';
$lang['WRONG_FORMAT'] = 'Нн верный формат файла';
$lang['L_REPORT_BY'] = 'От';
$lang['SELECT_IMAGE'] = 'Выберите изображение';

// Presents types
$lang['PRESENT_SPECITY_TYPE'] = 'Укажите тип';
$lang['PRESENT_TIMELESS'] = 'Вечные подарки';
$lang['PRESENT_BALOONS'] = 'Воздушные шары';
$lang['PRESENT_MASKS'] = 'Головные уборы и маски';
$lang['PRESENT_FOR_LOVERS'] = 'Для влюбленных';
$lang['PRESENT_FOR_GIRLS'] = 'Для девушек';
$lang['PRESENT_FOR_MEN'] = 'Для мужчин';
$lang['PRESENT_FOOD'] = 'Еда';
$lang['PRESENT_ANIMALS'] = 'Животные';
$lang['PRESENT_COMPUTERS'] = 'Компьютерная техника';
$lang['PRESENT_SUMMER'] = 'Летние подарки';
$lang['PRESENT_PRIVATE'] = 'Личный инструктор';
$lang['PRESENT_STUFFED_TOYS'] = 'Мягкие игрушки';
$lang['PRESENT_DRINKS'] = 'Напитки';
$lang['PRESENT_KISSES'] = 'Поцелуи';
$lang['PRESENT_OTHER'] = 'Разное';
$lang['PRESENT_SUNGLASSES'] = 'Солнцезащитные очки';
$lang['PRESENT_SPORT'] = 'Спорт';
$lang['PRESENT_STATUES'] = 'Статуэтки';
$lang['PRESENT_DECORATION'] = 'Украшения';
$lang['PRESENT_HOBBY'] = 'Хобби';
$lang['PRESENT_FLOWERS'] = 'Цветы';
$lang['PRESENT_NEW_YEAR'] = 'Новогодние подарки';

#
#-----[ OPEN ]------------------------------------------
#

styles/templates/default/css/globals.css

#
#-----[ ADD ]-------------------------------------------
#

#present {
    height: 168px;
    position: relative;
    background: #ffffff url(../images/firebit-gifts.PNG) repeat-x bottom;
    border: 1px solid #ccc;
    border-radius: 10px;
}

#present .lblock {
    background: url(../images/left.png) no-repeat top right;
    width: 85px;
    height: 32px;
    line-height: 35px;
    position: absolute;
    top: 135px;
    left: -7px;
    color: #ffffff;
}

#present .rblock {
    color: #fff;
    background: url(../images/right.png) no-repeat top left;
    font-weight: bold;
    width: 72px;
    height: 32px;
    line-height: 35px;
    position: absolute;
    top: 135px;
    right: -6px;
}

#present b {
    color: #ffffff;
}

#present b:hover {
    color: #ff8000;
}

#present b:active {
    color: #ff8000 !important;
    position: relative;
    top: 1px;
}

.presents-grid {
    display: flex;
    flex-wrap: wrap;
    width: 100%;
}

.presents-item {
    width: 25%;
    padding: 5px;
    box-sizing: border-box;
    text-align: center;
}

#present img {
    display: block;
    margin: 0 auto;
}

.presents-empty {
    width: 100%;
    text-align: center;
    padding: 8px;
}

#present a:hover,
#present a:active {
text-decoration: none !important;
}

#
#-----[ OPEN ]------------------------------------------
#

styles/templates/admin/admin_board.tpl

#
#-----[ FIND ]------------------------------------------
#

<tr>
	<td><h4>{L_SEED_BONUS}</h4></td>
	<td>
		<label><input type="radio" name="seed_bonus_enabled" value="1" <!-- IF SEED_BONUS_ENABLED -->checked="checked"<!-- ENDIF --> />{L_ENABLED}</label>&nbsp;&nbsp;
		<label><input type="radio" name="seed_bonus_enabled" value="0" <!-- IF not SEED_BONUS_ENABLED -->checked="checked"<!-- ENDIF --> />{L_DISABLED}</label>
	</td>
</tr>

#
#-----[ AFTER, ADD ]-----------------------------------
#

<tr>
	<td><h4>{L_PRESENTS}</h4></td>
	<td>
		<label><input type="radio" name="presents" value="1" <!-- IF PRESENTS -->checked="checked"<!-- ENDIF --> />{L_ENABLED}</label>&nbsp;&nbsp;
		<label><input type="radio" name="presents" value="0" <!-- IF not PRESENTS -->checked="checked"<!-- ENDIF --> />{L_DISABLED}</label>
	</td>
</tr>

#
#-----[ OPEN ]------------------------------------------
#

usercp_viewprofile.tpl

#
#-----[ FIND ]------------------------------------------
#

<td class="row1 vTop tCenter" width="30%">

#
#-----[ ADD ]-------------------------------------------
#

<!-- IF SHOW_PRESENTS -->
<h4 class="cat border bw_TB"><a href="presents.php<!-- IF not EDIT_PROF -->?u={PROFILE_USER_ID}<!-- ENDIF -->">{L_GIVE_PRESENT}</a></h4>
<!-- ENDIF -->

#
#-----[ FIND ]------------------------------------------
#

</table>
<!--/user_profile-->

#
#-----[ ADD ]-------------------------------------------
#

<!-- IF SHOW_PRESENTS && SHOW_USER_PRESENTS -->
<div class="thHead" style="color: #fff; text-align: center;">Подарки {USERNAME}</div>
<div class="presents-grid">
    <!-- BEGIN presentrow -->
        <!-- BEGIN presentcol -->
        <div class="presents-item">
            <div id="present" class="pad_10">
                <div style="color: #c80; font-size: 14px;">{presentrow.presentcol.NAME}</div>
                <img src="styles/images/presents/{presentrow.presentcol.PIC}" alt="{presentrow.presentcol.NAME}" loading="lazy">
                <div class="lblock tLeft nowrap">{presentrow.presentcol.GIVEN}</div>
            </div>
        </div>
        <!-- END presentcol -->
        <!-- BEGIN not -->
        <div class="presents-item">&nbsp;</div>
        <!-- END not -->
    <!-- END presentrow -->
    <!-- BEGIN not_present -->
    <div class="presents-empty">{L_NONE}</div>
    <!-- END not_present -->
</div>
<!-- IF PAGINATION -->
<p class="cat_categories2" style="padding: 4px 3px 4px; border-radius: 0px;"><b>{PAGINATION}</b></p>
<!-- ENDIF -->
<!-- ENDIF -->

#
#-----[ SAVE/CLOSE ALL FILES ]--------------------------
#