Модуль "друзья" для DLE [NULLED]


Подробное описание процесса установки находится также и в архиве с фалами для загрузки

1. Загружаем на сервер содержимое папки uploads
2. Установите права для записи (CHMOD 666) для /engine/data/friends_config.php
3. Делаем запрос к базе данных:
CREATE TABLE `dle_friends` (
`id` mediumint(8) NOT NULL auto_increment,
`user` varchar(40) NOT NULL default '',
`friend` varchar(40) NOT NULL default '',
`date` varchar(30) NOT NULL default '',
PRIMARY KEY  (`id`)
);

ALTER TABLE `dle_users` ADD `friends` text NOT NULL DEFAULT '';
ALTER TABLE `dle_users` ADD `friends_temp` text NOT NULL DEFAULT '';
ALTER TABLE `dle_users` ADD `friends_settings` varchar(7) NOT NULL DEFAULT '1|1|1|0';

INSERT INTO `dle_email` values ('', 'friends', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} хочет добавить Вас в друзья.\r\n\r\nВы можете подтвердить, что вы друзья, или отклонить заявку.\r\n{%url%}\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_fail', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} отклонил вашу заявку на добавление в друзья\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_add', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} принял вашу заявку на добавление в друзья\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_delete', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} удалил Вас из списка друзей\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');

INSERT INTO `dle_email` values ('', 'friends_m', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} хочет добавить Вас в друзья.\r\n\r\nВы можете подтвердить, что вы друзья, или отклонить заявку.\r\n{%url%}\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_fail_m', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} отклонил вашу заявку на добавление в друзья\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_add_m', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} принял вашу заявку на добавление в друзья\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');
INSERT INTO `dle_email` values ('', 'fr_del_m', 'Уважаемый {%username%}, уведомляем вас о том, что {%who%} удалил Вас из списка друзей\r\n\r\nС уважением,\r\nАдминистрация http://127.0.0.1', '0');

INSERT INTO `dle_admin_sections` (`name`, `title`, `descr`, `icon`, `allow_groups`) VALUES ('friends', 'Друзья', 'Данный модуль организует на сайте систему друзей, то есть любой пользователь может добаdлять к себе в друзья другого пользователя.', 'friends.jpg', '1');

4. Дописать в конец файла /engine/classes/js/dle_js.js:
function doFriends(friend,event,type){$('#random_f-'+friend).html("<p style='color:green;'>Запрос успешно отправлен!</p>");if(event=="delete"){var b={};b['Отмена']=function(){$(this).dialog('close')};b['Удалить из друзей']=function(){ShowLoading('');$.get(dle_root+"engine/ajax/friends.php",{friend_id:friend,action:event,skin:dle_skin,type:type,hash:dle_login_hash},function(data){HideLoading('');$('#dlepopup').dialog('close');$('#dlepopup').remove();if(type=="list"){$("#friend-list-"+friend).html(data)}else if(type=="pop"){$("#dofriend-"+friend).replaceWith(data)}else{$("#dofriend").replaceWith(data)}})};$('#dlepopup').remove();$('body').append("<div id='dlepopup' title='Удалить пользователя из списка друзей?' style='display:none'><br />Вы действительно хотите удалить пользователя из списка друзей?<br /><br /></div>");$('#dlepopup').dialog({autoOpen:true,width:400,buttons:b})}else{ShowLoading('');$.get(dle_root+"engine/ajax/friends.php",{friend_id:friend,action:event,skin:dle_skin,type:type,hash:dle_login_hash},function(data){HideLoading('');if(event=="activate"||event=="delete_req"){$("#friend-list-"+friend).html(data)}else if(type=="pop"){$("#dofriend-"+friend).replaceWith(data)}else if(type=="list"){$("#friend-list-"+friend).html(data)}else{$("#dofriend").replaceWith(data)}})}};$(function(){$('.feed_loader').click(function(){var f=$(this);var c=f.attr("rel");var n=(c*1)+1;if(f.attr("rel")!="stop"){f.attr("rel","stop").html("Загрузка...");$.get(dle_root+"engine/ajax/friends_feed.php",{count:c,skin:dle_skin},function(data){if(data=="no"){f.removeClass("f_active").html("Больше нет новостей для отображения")}else{f.attr("rel",n).html("Показать предыдущие новости ↓");$("#friends_feed").append(data)}})}})});

5. В файле: /engine/engine.php после:
case "deletenews" :
    include ENGINE_DIR . '/modules/deletenews.php';
    break;
вставить
// DLE Friends v1.6
    case "friends" :
        if ($user) include ENGINE_DIR . '/modules/friends_list.php';
        else msgbox ( $lang['all_err_1'], $lang['news_err_27'] );
        break;
    
    case "friendsfeed" :
        if ($is_logged) include ENGINE_DIR . '/modules/friends_feed.php';
        else msgbox ( $lang['all_err_1'], $lang['news_err_27'] );
        break;
// DLE Friends v1.6
После
elseif ($do == 'stats') $nam_e = $lang['title_stats'];
Вставить
// DLE Friends v1.6
elseif ($do == "friends") {
    if (! $subaction) $nam_e = $lang['fr_friends'];
    elseif ($subaction == "common") $nam_e = $url_user . $lang['fr_common'];
    elseif ($subaction == "requests") $nam_e = $lang['fr_activate_title'];
    elseif ($subaction == "suggestions") $nam_e = $lang['fr_suggestions'];
}
elseif ($do == "friendsfeed") $nam_e = $lang['fr_feed_title'];
// DLE Friends v1.6
После
$s_navigation = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"{$config['http_home_url']}\" itemprop=\"url\"><span itemprop=\"title\">" . $config['short_title'] . "</span></a></span>";
Вставить
// DLE Friends v1.6
    if ($do == "friends") {
        if( $config['allow_alt_url'] ) $url_user = "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $user ) . "/\">" . stripslashes( $user ) . "</a>";
        else $url_user = "<a href=\"$PHP_SELF?subaction=userinfo&user=" . urlencode( $user ) . "\">" . stripslashes( $user ) . "</a>";
        
        $s_navigation .= " » " . $url_user;
    }
// DLE Friends v1.6
6. В файле: /engine/init.php после:
$tpl->set( '{all-pm}', $member_id['pm_all'] );
Вставить
// DLE Friends v1.6
if( $member_id['friends_temp'] ) $tpl->set( '{request-count}', "(" . count(explode("," ,$member_id['friends_temp'])) . ")" );
else $tpl->set( '{request-count}', "" );

if( $config['allow_alt_url'] ) {
    $tpl->set( '{friends-link}', $config['http_home_url'] . "friends/" . urlencode( $member_id['name'] ) );
    $tpl->set( '{feed-link}', $config['http_home_url'] . "friendsfeed/" );
} else {
    $tpl->set( '{friends-link}', $PHP_SELF . "?do=friends&user=" . urlencode( $member_id['name'] ) );
    $tpl->set( '{feed-link}', $PHP_SELF . "?do=friendsfeed" );
}
// DLE Friends v1.6
7. В файле: /engine/modules/profile.php после:
$filecontents = '';
Вставить
// DLE Friends v1.6 
$friends_status_f  = isset($_POST['friends_status_f']) ?  intval($_POST['friends_status_f']) : 0; // Получать  запросы о дружбе [0]        
$friends_info_mail  = isset($_POST['friends_info_mail']) ?  intval($_POST['friends_info_mail']) : 0; // Получать уведомления на E-mail [1]
$friends_info_pm  = isset($_POST['friends_info_pm']) ?  intval($_POST['friends_info_pm']) : 0; // Получать уведомления в ЛС [2]
$friends_pm  = isset($_POST['friends_pm']) ?  intval($_POST['friends_pm']) : 0; // Получать  личные сообщения только от друзей [3]

$friends_settings = $friends_status_f . "|" . $friends_info_mail . "|" . $friends_info_pm . "|" . $friends_pm;
// DLE Friends v1.6
Далее после (2 раза!): 
allow_mail='$allow_mail',
Вставить
friends_settings='$friends_settings',
После
$tpl->set( '{lastdate}', langdate( "j F Y H:i", $row['lastdate'] ) );
Вставить
// DLE Friends v1.6
include_once ENGINE_DIR . '/modules/friends_profile.php';
// DLE Friends v1.6
8. В файле: /engine/ajax/profile.php после:
$tpl->set( '{rate}', userrating( $row['user_id'] ) );
Вставить
// DLE Friends v1.6
    require_once ENGINE_DIR . '/data/friends_config.php';
    
    if ($is_logged and $member_id['user_id'] != $row['user_id'] and $friends_config['status']) {
        $friends_settings = explode("|", $row['friends_settings']);
        $friends_arr      = explode(',', $member_id['friends']);
        $temp_friends_arr = explode(',', $row['friends_temp']);
        
        if (!in_array($row['user_id'], $friends_arr) && !in_array($member_id['user_id'], $temp_friends_arr)) {
            if ($friends_settings[0]) {
                $tpl->set('{dofriends}', "<a id=\"dofriend-" . $row['user_id'] . "\" href=\"#\" onclick=\"doFriends('" . $row['user_id'] . "', 'add', 'pop'); return false;\">" . $lang['fr_add'] . "</a>");
            } else {
                $tpl->set('{dofriends}', "");
            }
        } elseif (in_array($row['user_id'], $friends_arr)) {
            $tpl->set('{dofriends}', "<a id=\"dofriend-" . $row['user_id'] . "\" href=\"#\" onclick=\"doFriends('" . $row['user_id'] . "', 'delete', 'pop'); return false;\">" . $lang['fr_del_do'] . "</a>");
        } else
            $tpl->set('{dofriends}', $lang['fr_req_sent']);
        
    } else
        $tpl->set('{dofriends}', "");
// DLE Friends v1.6
9. В файле: /engine/modules/pm.php заменить:
$db->query( "SELECT email, name, user_id, pm_all, user_group FROM " . USERPREFIX . "_users WHERE name = '{$name}'" );
        
        if( !$db->num_rows() ) $stop .= $lang['pm_err_4'];
        
        $row = $db->get_row();
ЗАМЕНИТЬ
$db->query( "SELECT email, name, user_id, pm_all, user_group, friends_settings FROM " . USERPREFIX . "_users WHERE name = '$name'" );
    
    if( !$db->num_rows() ) $stop .= $lang['pm_err_4'];
    
    $row = $db->get_row();
    
    $friends_settings = explode( "|", $row['friends_settings'] );
    
    if( $friends_settings[3] ) {
    
    $my_temp_arr = explode( ',', $member_id['friends'] );
    
        if( $member_id['user_id'] != 1 and !in_array( $row['user_id'], $my_temp_arr )) {    
    
            $stop .= "<li>".$lang['fr_pm_er']."</li>";
        
        }
    }
10. В файле: htaccess после:
# Редиректы
RewriteRule ^page/([0-9]+)(/?)$ index.php?cstart=$1 [L]
Добавить:
# DLE Friends v1.6
RewriteRule ^friends/([^/]*)(/?)+$ index.php?do=friends&user=$1 [L]
RewriteRule ^friends/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=friends&user=$1&cstart=$2 [L]
RewriteRule ^friends/([^/]*)/common(/?)+$ index.php?do=friends&subaction=common&user=$1 [L]
RewriteRule ^friends/([^/]*)/common/page/([0-9]+)(/?)+$ index.php?do=friends&subaction=common&user=$1&cstart=$2 [L]
RewriteRule ^friends/([^/]*)/requests(/?)+$ index.php?do=friends&subaction=requests&user=$1 [L]
RewriteRule ^friends/([^/]*)/requests/page/([0-9]+)(/?)+$ index.php?do=friends&subaction=requests&user=$1&cstart=$2 [L]
RewriteRule ^friends/([^/]*)/suggestions(/?)+$ index.php?do=friends&subaction=suggestions&user=$1 [L]
RewriteRule ^friendsfeed(/?)+$ index.php?do=friendsfeed [L]
11. В файле: /language/Russian/website.lng после:
'wysiwyg_language'    =>  "ru",
Добавляем:
# DLE Friends v1.6
'fr_status' => "Модуль отключен Администратором",
'fr_friends' => "Друзья",
'fr_done' => "Сделано",
'fr_add_succes' => "Пользователь {user} успешно добавлен в друзья!",
'fr_del_succes' => "Пользователь {user} удален из списка друзей!",
'fr_del_act' => "Удалить запрос",
'fr_del_req_succes' => "Запрос удален!",
'fr_del_do' => "Убрать из друзей",
'fr_del_pm' => "Вас удалили из списка друзей",
'fr_send_pm' => "Написать сообщение",
'fr_send_mail' => "Отправить E-Mail",
'fr_activate' => "Подтвердить",
'fr_activate_title' => "Заявки на добавление в друзья",
'fr_activate_fail_pm' => "Заявка на дружбу отклонена",
'fr_activate_ok_pm' => "Ваша заявка на дружбу принята",
'fr_no_friends' => "У Вас пока нет друзей",
'fr_no_req_friends' => "Новых запросов пока нет",
'fr_user_no_friends' => "У пользователя {user} пока нет друзей",
'fr_req' => "Запрос на добавление в друзья",
'fr_add' => "Добавить в друзья",
'fr_req_sent' => "Заявка отправлена",
'fr_feed_off' => "Модуль временно отключен",
'fr_feed_load' => "Показать предыдущие новости ↓",
'fr_feed_error' => "Данный раздел доступен только зарегистрированным пользователям",
'fr_nofeed' => "Ваши друзья пока ничего не опубликовали",
'fr_timeago' => "один час, два часа, три часа, четыре часа, пять часов, шесть часов, сек назад, мин назад, назад, сегодня в, вчера в, в",
'fr_pm_er' => "Данный пользователь может получать сообщение только от друзей!",
'fr_no_sugg' => "Возможных друзей пока не найдено!",
'fr_common' => "Общие друзья",
'fr_suggestions' => "Возможные друзья",
'fr_feed_title' => "Новости друзей",
'fr_nopage' => "К сожалению, данная страница для Вас не доступна!",
12. Дописать в конец файла /templates/Default/style/style.css:
/* DLE Friends v1.6 */
#no-friends { padding: 6px; border: 1px solid #C0D4DE; background-color: #F3F7F9; color: #507D98; margin: 10px 0; }

.friends { margin-bottom: 10px; }
.friends ul, .prof-list { margin-top: 10px; }
.friends li { width: 100px; text-align: center; float: left; margin-right: 10px; }
.friends img { display: block; margin: 0 auto; width: 100px; height: 100px; }

.friends_table h3 { margin-bottom: 6px; font-size: 14px; line-height: 14px; font-weight: bold; }
.friends_table h3 a span { font-size: 12px; font-weight: normal; color: #6C838E; }
.friends_table h3 a span:hover { text-decoration: underline; }
.friends_table ul { list-style: none; margin: 0; padding: 0; }
.friends_table td { padding: 10px; border-bottom: 1px solid #EEE; font-size:12px; vertical-align: top; }
.friends_table .active { background-color: #F8F8F8; }
.contact_friends { width: 140px; }
.contact_friends a, .contact_friends span { display: block; padding: 6px; margin-bottom: 4px; line-height: 11px; }
.contact_friends a:hover { background-color: #DAE7ED; text-decoration: none; }

#allfriends .rcol { margin-top: 4px; }
#allfriends h2.lcol a { text-decoration: underline; }
#allfriends h2.lcol a:hover { text-decoration: none; }

#friends_feed { margin: 0 15px; }
#friends_feed table { width: 100%; border-collapse: collapse; border-spacing: 0; margin-bottom: 25px; }
#friends_feed td { vertical-align: top; text-align: left; }
#friends_feed td.f_avatar, #friends_feed td.f_author { border: 1px solid; border-color: #ACCCDA #E2EDF2 #E2EDF2; vertical-align: middle; background-color: #F4F8FA; }
#friends_feed td.f_avatar { width: 50px; border-spacing: 10px; padding: 2px; border-right-width: 0; }
#friends_feed td.f_avatar img { width: 50px; height: 50px; }
#friends_feed td.f_author { padding: 0 10px; border-left-width: 0; border-style: solid; font-size: 11px; }
#friends_feed td.f_author h3 { fonst-size: 14px; font-weight: bold; margin-bottom: 4px; }
#friends_feed td.f_story { padding: 15px 0; }
#friends_feed .f_cover { width: 104px; max-height: 104px; overflow: hidden; margin-right: 10px; float: left; border: 1px solid #E2EDF2; background-color: #F4F8FA; }
#friends_feed .f_cover img { width: 100px; padding: 2px; }
#friends_feed td.f_det { border-top: 1px solid #E2EDF2; padding: 5px 0; }

.feed_loader { padding: 10px; text-align: center; border-top: 1px solid #E2EDF2; color: #284B5A; margin-bottom: 20px; }
.f_active:hover { border-color: #ACCCDA; background-color: #F4F8FA; cursor: pointer; }
13. В файле: /templates/Default/userinfo.tpl перед:
<li>{pm}</li>
Вставить
<li>{dofriends}</li>
Далее перед
</div>
[not-logged]
<div class="tab-pane" id="user2">
Вставить
[friends]
<div class="friends ussep">
        <span class="grey">Друзья ({friends-count}) [friends-link]Все друзья[/friends-link] [requests]{requests-count} ожидающих подтверждения[/requests]</span>
        {friends}
        <div class="clr"></div>
</div>
[/friends]
[common-friends]
<div class="friends ussep">
        <span class="grey">Общие друзья ({common-count}) [common-link]Все общие друзья[/common-link]</span>
        {common-friends}
        <div class="clr"></div>
</div>
[/common-friends]
Далее перед
<li class="form-group">
    <label for="land">Место проживания</label>
    <input type="text" name="land" id="land" value="{land}" class="wide">
</li>
Добавляем: 
<tr>
  <td class="label">Друзья:</td>
  <td>
  <div class="checkbox">{friends_status_f} <label for="friends_status_f">Разрешить добавлять меня в друзья</label></div>
  <div class="checkbox">{friends_info_mail} <label for="friends_info_mail">Получать уведомления о предложениях дружбы на E-mail</label></div>
  <div class="checkbox">{friends_info_pm} <label for="friends_info_pm">Получать уведомления о предложениях дружбы в ЛС</label></div>
  <div class="checkbox">{friends_pm} <label for="friends_pm">Получать <strong>личные сообщения</strong> только от друзей</label></div>
  </td>
</tr>
14. В файле: /templates/Default/login.tpl перед:
<li><a href="{profile-link}">Мой профиль</a></li>
Добавить:
<li><a href="{friends-link}">Мои друзья {request-count}</a></li>
<li><a href="{feed-link}">Новости друзей</a></li>
15. В файле: /templates/Default/profile_popup.tpl после:
<li><span class="grey">Комментариев:</span> <b>{comm-num} [ {comments} ]</b></li>
Вставить
<li>{dofriends}</li>
16. Для вывода блока: "Возможные друзья" в sidebar.tpl или main.tpl вставляем в удобное место:
{include file="engine/modules/friends_random.php"}





Комментарии - всего 1

image

ludozher 18-апр, 2018, 01:42

Отличная адаптация модуля, советую

Добавить комментарий