Подарки 1.0.0

Добавляет систему обмена виртуальными подарками между пользователями.

  1. Exile
    Совместимость:
    не проверялся на совместимость
    Изменения в БД:
    требуются
    Автор:
    _Xz_
    Общественное достояние:
    да
    Описание: добавляет систему обмена виртуальными подарками между пользователями. Некий аналог системы обмена подарками в социальных сетях. Подарки покупаются за сидбонусы. У администратора есть возможность добавления неограниченного числа категорий подарков и самих подарков.
    Инструкция по установке:
    PHP:
    ##############################################################
    ## Название мода: Подарки
    ## Автор мода: _Xz_ http://torrentpier.com/members/_xz_.2/
    ## Описание мода: Мод позволяет дарить подарки пользователям за очки сидирования
    ##
    ## Уровень инсталяции: простой
    ## Время установки: 5 минут
    ##############################################################


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

    CREATE TABLE IF NOT EXISTS `bb_presents` (
      `
    present_idmediumint(8unsigned NOT NULL auto_increment,
      `
    present_namevarchar(255) default NULL,
      `
    present_picvarchar(255) default NULL,
      `
    present_pricemediumint(8NOT NULL default '0',
      `
    present_activetinyint(1NOT NULL default '1',
      `
    present_typemediumint(8) default '0',
      
    PRIMARY KEY  (`present_id`)
    ENGINE=MyISAM  DEFAULT CHARSET=utf8;

    CREATE TABLE IF NOT EXISTS `bb_users_presents` (
      `
    idint(11unsigned NOT NULL auto_increment,
      `
    user_idmediumint(8) default '0',
      `
    present_idmediumint(8) default '0',
      `
    given_idmediumint(8NOT NULL default '0',
      `
    timeint(11NOT NULL default '0',
      `
    given_hidetinyint(1NOT NULL default '0',
      `
    commenttext NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=utf8;

    INSERT INTO `bb_configVALUES ('presents''1');

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

    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_board.php

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

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

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

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

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

    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.php

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

    print_page('usercp_viewprofile.tpl');

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

    if ($bb_cfg['seed_bonus_enabled'] && $bb_cfg['presents'])
    {
        
    $count DB()->fetch_row("SELECT COUNT(present_id) as present FROM "BB_USERS_PRESENTS ." WHERE user_id = {$profiledata['user_id']}");

        
    $start = isset($_REQUEST['start']) ? abs(intval($_REQUEST['start'])) : 0;

        if(
    $count['present'])
        {
            
    $sql DB()->fetch_rowset("SELECT pre.*, p.*, u.username, u.user_rank FROM "BB_USERS_PRESENTS ." pre, "BB_PRESENTS ." p, "BB_USERS ." u WHERE pre.present_id = p.present_id AND pre.given_id = u.user_id AND pre.user_id = {$profiledata['user_id']} ORDER BY pre.time DESC LIMIT $start, 8");

            
    $presentrow = array();
            foreach(
    $sql as $row)
            {
                
    $presentrow[] = $row;
            }

            if (!
    $presentrow)
            {
                
    $template->assign_block_vars('not_present', array());
            }

            for (
    $j 0$j count($presentrow); $j += 4)
            {
                
    $template->assign_block_vars('presentrow', array());

                for (
    $i $j$i < ($j 4); $i++)
                {
                    if( 
    $i >= count($presentrow) )
                    {
                        
    $template->assign_block_vars('presentrow.not', array());
                        continue;
                    }
                  
                    if (
    $presentrow[$i]['given_hide'] && !IS_ADMIN)
                    {
                        
    $given_user '<b>'$lang['ANONYMOUS'] .'</b>';
                    }
                    elseif (
    $presentrow[$i]['given_hide'] && IS_ADMIN)
                    {
                        
    $given_user profile_url(array('username' => "<b>[{$presentrow[$i]['username']}]</b>"'user_id' => $presentrow[$i]['given_id'], 'user_rank' => $presentrow[$i]['user_rank']));
                    }
                    else
                    {
                        
    $given_user profile_url(array('username' => "<b>{$presentrow[$i]['username']}</b>"'user_id' => $presentrow[$i]['given_id'], 'user_rank' => $presentrow[$i]['user_rank']));
                    }

                    
    $template->assign_block_vars('presentrow.presentcol', array(
                        
    'NAME'            => $presentrow[$i]['present_name'],
                        
    'PIC'            => $presentrow[$i]['present_pic'],
                        
    'PRICE'            => $presentrow[$i]['present_price'],
                        
    'ID'            => $presentrow[$i]['present_id'],
                        
    'GIVEN'            => $given_user
                    
    ));
                }
            }

            
    generate_pagination(PROFILE_URL $profiledata['user_id'], $count['present'], 8$startfalse'presents');
        }
    }

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

    lang_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'] = 'Нн верный формат файла';

    // 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'] = 'Новогодние подарки';

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

    $lang['DELETE_IMAGE'] = 'Удалить изображение';

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

    $lang['SELECT_IMAGE'] = 'Выберите изображение';

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

    functions.php

    #
    #-----[ FIND AND REPLACE ]---------------------------------------
    #

    function generate_pagination($base_url$num_items$per_page$start_item$add_prevnext_text true$style false)
    {
        global 
    $lang$template;

    // Pagination Mod
        
    $begin_end 3;
        
    $from_middle 1;
    /*
        By default, $begin_end is 3, and $from_middle is 1, so on page 6 in a 12 page view, it will look like this:

        a, d = $begin_end = 3
        b, c = $from_middle = 1

    "begin"        "middle"           "end"
        |              |                 |
        |     a     b  |  c     d        |
        |     |     |  |  |     |        |
        v     v     v  v  v     v        v
        1, 2, 3 ... 5, 6, 7 ... 10, 11, 12

        Change $begin_end and $from_middle to suit your needs appropriately
    */

        
    $total_pages ceil($num_items/$per_page);

        if ( 
    $total_pages == || $num_items == )
        {
            return 
    '';
        }

        if(
    $style$style "#$style";

        
    $on_page floor($start_item $per_page) + 1;

        
    $page_string '';
        if ( 
    $total_pages > ((2*($begin_end $from_middle)) + 2) )
        {
            
    $init_page_max = ( $total_pages $begin_end ) ? $begin_end $total_pages;
            for(
    $i 1$i $init_page_max 1$i++)
            {
                
    $page_string .= ( $i == $on_page ) ? '<b>' $i '</b>' '<a href="' $base_url "&amp;start=" . ( ( $i ) * $per_page ) . $style .'">' $i '</a>';
                if ( 
    $i <  $init_page_max )
                {
                    
    $page_string .= ", ";
                }
            }
            if ( 
    $total_pages $begin_end )
            {
                if ( 
    $on_page 1  && $on_page $total_pages )
                {
                    
    $page_string .= ( $on_page > ($begin_end $from_middle 1) ) ? ' ... ' ', ';

                    
    $init_page_min = ( $on_page > ($begin_end $from_middle) ) ? $on_page : ($begin_end $from_middle 1);

                    
    $init_page_max = ( $on_page $total_pages - ($begin_end $from_middle) ) ? $on_page $total_pages - ($begin_end $from_middle);

                    for(
    $i $init_page_min $from_middle$i $init_page_max + ($from_middle 1); $i++)
                    {
                        
    $page_string .= ($i == $on_page) ? '<b>' $i '</b>' '<a href="' $base_url "&amp;start=" . ( ( $i ) * $per_page ) . $style .'">' $i '</a>';
                        if ( 
    $i <  $init_page_max $from_middle )
                        {
                            
    $page_string .= ', ';
                        }
                    }
                    
    $page_string .= ( $on_page $total_pages - ($begin_end $from_middle) ) ? ' ... ' ', ';
                }
                else
                {
                    
    $page_string .= '&nbsp;...&nbsp;';
                }
                for(
    $i $total_pages - ($begin_end 1); $i $total_pages 1$i++)
                {
                    
    $page_string .= ( $i == $on_page ) ? '<b>' $i '</b>'  '<a href="' $base_url "&amp;start=" . ( ( $i ) * $per_page ) . $style .'">' $i '</a>';
                    if( 
    $i <  $total_pages )
                    {
                        
    $page_string .= ", ";
                    }
                }
            }
        }
        else
        {
            for(
    $i 1$i $total_pages 1$i++)
            {
                
    $page_string .= ( $i == $on_page ) ? '<b>' $i '</b>' '<a href="' $base_url "&amp;start=" . ( ( $i ) * $per_page ) . $style .'">' $i '</a>';
                if ( 
    $i <  $total_pages )
                {
                    
    $page_string .= ', ';
                }
            }
        }

        if ( 
    $add_prevnext_text )
        {
            if ( 
    $on_page )
            {
                
    $page_string ' <a href="' $base_url "&amp;start=" . ( ( $on_page ) * $per_page ). $style .'">' $lang['PREVIOUS'] . '</a>&nbsp;&nbsp;' $page_string;
            }

            if ( 
    $on_page $total_pages )
            {
                
    $page_string .= '&nbsp;&nbsp;<a href="' $base_url "&amp;start=" . ( $on_page $per_page ) . $style .'">' $lang['NEXT'] . '</a>';
            }

        }

        
    $pagination = ($page_string) ? '<a class="menu-root" href="#pg-jump">'$lang['GOTO_PAGE'] .'</a> :&nbsp;&nbsp;'$page_string '';
        
    $pagination str_replace('&amp;start=0'''$pagination);

        
    $template->assign_vars(array(
            
    'PAGINATION'   => $pagination,
            
    'PAGE_NUMBER'  => sprintf($lang['PAGE_OF'], ( floor($start_item/$per_page) + ), ceil$num_items $per_page )),
            
    'PG_BASE_URL'  => $base_url,
            
    'PG_PER_PAGE'  => $per_page,
        ));

        return 
    $pagination;
    }

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

    main.css

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

    #present {
        
    height:150pxpositionrelative;
        
    background:url(../images/gift_bg.pngrepeat-x bottom;
        
    border1px solid #ccc;
    }
    #present .lblock {
        
    background:url(../images/left.pngno-repeat top right;
        
    width:85pxheight:32px;
        
    line-height:35pxposition:absolute;
        
    top:135pxleft:-7px;
        
    color#FFFFFF;
    }
    #present .rblock {
        
    color:#FFF; background:url(../images/right.png) no-repeat top left;
        
    font-weightboldwidth:72pxheight:32px;
        
    line-height:35pxposition:absolute;
        
    top:135pxright:-6px;
    }
    #present b { color: #FFFFFF; }
    #present b:hover { color: #FF8000;}
    #present b:active { color: #FF8000 !important; position: relative; top: 1px; }
    #present a:hover, #present a:active {
        
    text-decorationnone !important;
    }
    1px; }
    #present a:hover, #present a:active {
        
    text-decorationnone !important;
    }

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

    usercp_viewprofile.tpl

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

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

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

    <!-- IF PAGINATION -->
    <
    class="small" style="padding: 1px 6px 5px;"><b>{PAGINATION}</b></p>
    <!-- ENDIF -->
    <!-- IF 
    SHOW_PRESENTS -->
    <
    table class="tCenter borderless" width="100%">
        <
    tr><th class="cat border bw_TRBL" colspan="4"><a href="presents.php<!-- IF not EDIT_PROF -->?u={PROFILE_USER_ID}<!-- ENDIF -->">{L_GIVE_PRESENT}</a></th></tr>
        <!-- 
    BEGIN presentrow -->
        <
    tr>
            <!-- 
    BEGIN presentcol -->
            <
    td class="row1 pad_10" width="25%">
            <
    div id="present" class="pad_10">
                <
    div style="color: #c80; font-size:14px;">{presentrow.presentcol.NAME}</div>
                <
    img src="images/presents/{presentrow.presentcol.PIC}">
                <
    div class="lblock tLeft nowrap">&nbsp;&nbsp;{L_REPORT_BY}&nbsp;{presentrow.presentcol.GIVEN}</div>
            </
    div>
            </
    td>
            <!-- 
    END presentcol -->
            <!-- 
    BEGIN not -->
            <
    td class="row1" align="center" width="25%">&nbsp;</td>
            <!-- 
    END not -->
        </
    tr>
        <!-- 
    END presentrow -->
        <!-- 
    BEGIN not_present -->
        <
    tr>
            <
    td colspan="3" class="row1 tCenter pad_8">{L_NONE}</td>
        </
    tr>
        <!-- 
    END not_present -->
    </
    table>
    <!-- ENDIF -->

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

    Изображения

    1. 3E6283D0.jpg
    2. 8a88e88b.jpg
    3. D20b5de3.jpg