решено Приватный пользователь

Kryl

Пользователь
Всем привет ...
Помогите релизовать снятие статуса с приватного пользователя через N промежуток времени ..
К примеру выдал я приватный статус на сообщение .. , но что бы этот приватный статус к примеру через семь дней был снят автоматически ...
 

Exile

Администратор
В первом сообщении темы два понятия - приватная тема и приватное сообщение. Что приватное-то в итоге?

Для снятия группы есть старое дополнение вот такое:
PHP:
Мод позволяет установить дату автоматического удаления пользователя из группы (TorrentPier II r400)

Файлы к редактированию:

ajax/index_data.php
includes/functions_group.php
includes/cron/jobs/clean_dlstat.php
language/lang_russian/lang_main.php
templates/default/groupcp.tpl
groupcp.php

===============================================================================

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

ALTER TABLE `bb_user_group` ADD `time_del` date NOT NULL DEFAULT '0000-00-00';

# ---- [ Открыть ] -------------------

groupcp.php

# ---- [ Найти ] -------------------

$page_cfg['use_tablesorter'] = true;
   
# ---- [ Вставить после ] -------------------
   
$time = bb_date(TIMENOW, 'Y-m-d', 'false');

# ---- [ Найти ] -------------------

, &$user_time

# ---- [ Вставить после ] -------------------

, &$time_del

# ---- [ Найти ] -------------------

$from   = ( !empty($row['user_from']) ) ? $row['user_from'] : '';

# ---- [ Вставить до ] -------------------

$time_del = (!empty($row['time_del'])) ? $row['time_del'] : $lang['NONE'];

# ---- [ Найти ] -------------------

add_user_into_group($group_id, $userdata['user_id'], 1, TIMENOW);

# ----[ Заменить ]------------------------------------------

add_user_into_group($group_id, $userdata['user_id'], 1, TIMENOW, @$_POST['time_del']);

# ---- [ Найти ] -------------------

            if (!$row = get_userdata(@$_POST['username'], true))
            {
                bb_die($lang['COULD_NOT_ADD_USER']);
            }

# ---- [ Вставить после ] -------------------

            if(@$_POST['time_del'] <= $time)
            {
                bb_die($lang['TIME_DEL_MIN']);
            }
           
# ---- [ Найти ] -------------------

add_user_into_group($group_id, $row['user_id']);

# ----[ Заменить ]------------------------------------------

add_user_into_group($group_id, $row['user_id'], '', TIMENOW, @$_POST['time_del']);

# ----[ Найти 2 раза ]------------------------------------------

, ug.user_time

# ---- [ Вставить после ] -------------------

, ug.time_del

# ---- [ Найти ] -------------------

generate_user_info($group_moderator, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);

# ----[ Заменить ]------------------------------------------

generate_user_info($group_moderator, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $time_del);

# ----[ Найти 2 раза ]------------------------------------------

generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);

# ----[ Заменить ]------------------------------------------

generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $time_del);

# ---- [ Найти ] -------------------

'TIME' => $user_time,

# ---- [ Вставить после ] -------------------

'TIME_DEL' => $time_del,

# ---- [ Найти ] -------------------

print_page('groupcp.tpl');

# ---- [ Вставить до ] -------------------

$template->assign_vars(array(
    'TIME_DEL'  => $time,
));

# ---- [ Открыть ] -------------------

includes/functions_group.php

# ---- [ Найти ] -------------------

function add_user_into_group ($group_id, $user_id, $user_pending = 0, $user_time = TIMENOW)

# ----[ Заменить ]------------------------------------------

function add_user_into_group ($group_id, $user_id, $user_pending = 0, $user_time = TIMENOW, $time_del = '0000-00-00')

# ---- [ Найти ] -------------------

'user_time'    => (int) $user_time,

# ---- [ Вставить после ] -------------------

'time_del'     => (string) $time_del,

# ---- [ Открыть ] -------------------

templates/default/groupcp.tpl

# ---- [ Найти ] -------------------

<input type="text" name="username" maxlength="50" size="20" />

# ---- [ Вставить после ] -------------------

<input type="date" name="time_del" value="{TIME_DEL}" title="{L_TIME_AUTODEL}" />

# ----[ Найти (ВСЕ значения) ]------------------------------------------

colspan="10"

# ----[ Заменить ]------------------------------------------

colspan="<!-- IF IS_ADMIN -->11<!-- ELSE -->10<!-- ENDIF -->"

# ---- [ Найти ] -------------------

<td class="small">{member.TIME}</td>

# ---- [ Вставить после ] -------------------

    <!-- IF IS_ADMIN --><td><input type="date" onblur="ajax.exec({action: 'index_data', mode: 'time_del', user_id: '{member.USER_ID}', time_del: $('#cu-{member.USER_ID}').val() });" id="cu-{member.USER_ID}" value="{member.TIME_DEL}" /></td><!-- ENDIF -->

# ---- [ Найти ] -------------------

<td class="small">{MOD_TIME}</td>

# ---- [ Вставить после ] -------------------

<!-- IF IS_ADMIN --><td width="3%">&nbsp;</td><!-- ENDIF -->

# ---- [ Найти ] -------------------

<th class="{sorter: false}" ><b class="tbs-text">#</b></th>

# ---- [ Вставить до ] -------------------

<!-- IF IS_ADMIN --><th class="{sorter: false}" ><b class="tbs-text">{L_TIME_DELOUT}</b></th><!-- ENDIF -->

# ---- [ Открыть ] -------------------

ajax/index_data.php

# ---- [ Найти ] -------------------

    break;

# ---- [ Вставить после ] -------------------
   
    case 'time_del':
        if(!IS_ADMIN) $this->ajax_die($lang['NOT_ADMIN']);
       
        $time_del = (string) $this->request['time_del'];
        $user_id  = (int) $this->request['user_id'];
       
        $time = bb_date(TIMENOW, 'Y-m-d', 'false');
        if ($time_del == '' || $time_del < $time) $this->ajax_die($lang['TIME_DEL_MIN']);

        DB()->query("UPDATE ". BB_USER_GROUP ." SET time_del = '$time_del' WHERE user_id = ". $user_id);
    break;
   
# ---- [ Открыть ] -------------------
   
includes/cron/jobs/clean_dlstat.php

#
#-----[ Вставить (в конец) ]------------------------------------------
#

require(INC_DIR .'functions_group.php');
$time = bb_date(TIMENOW, 'Y-m-d', 'false');
$times_del = DB()->fetch_rowset("SELECT group_id, user_id FROM ". BB_USER_GROUP ." WHERE time_del <= '$time' AND time_del != '0000-00-00'");

foreach($times_del as $row)
{
    delete_user_group ($row['group_id'], $row['user_id']);
}

# ---- [ Открыть ] -------------------

language/lang_russian/lang_main.php

#
#-----[ Вставить ]------------------------------------------
#

// Удаление из группы по истечении срока
$lang['TIME_AUTODEL'] = 'Дата автоудаления пользователя из группы';
$lang['TIME_DEL_MIN'] = 'Дата выбытия должна отличаться от сегодняшней';
$lang['TIME_DELOUT'] = 'Выбытие';


# ----[ Сохранить / Закрыть ]--------------------------
 

Kryl

Пользователь
При заходе в группу выдает ошибку :
Fatal error: DB Error [group.php(582)]
на ковычки
");
из этого куска кода :
PHP:
            $count_members = DB()->fetch_rowset("
                SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time, ug.time_del
                FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
                WHERE ug.group_id = $group_id
                    AND ug.user_pending = 0
                    AND ug.user_id <> ". $group_moderator['user_id'] ."
                    AND u.user_id = ug.user_id
                ORDER BY u.username
            ");

в логах базы вот такое ..
#001054 Unknown column 'ug.time_del' in 'field list'
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time, ug.time_del FROM bb_user_group ug, bb_users u WHERE ug.group_id = 8 AND ug.user_pending = 0 AND ug.user_id <> 2 AND u.user_id = ug.user_id ORDER BY u.username

Сорри ))) не в ту базу запрос сделал )))

При добавлении пользователя в группу
выдает Дата выбытия должна отличаться от сегодняшней , хотя дата выбирается ..
помогите поправить .
 
Последнее редактирование модератором:

Exile

Администратор
Kryl в инспекторе браузера на вкладке сеть во время добавления пользователя в группу посмотри значения переменных: $_POST['time_del'] чему равна?
 

Kryl

Пользователь
В браузере вот такое выдает :
The specified value '0000-00-00' does not conform to the required format, 'yyyy-MM-dd
 

Exile

Администратор
Kryl значение не передается, иначе бы не было там нулей. В шаблоне что-то не так вставлено.
 

Kryl

Пользователь
# ----[ Найти (ВСЕ значения) ]------------------------------------------

colspan="10"

# ----[ Заменить ]------------------------------------------

colspan="<!-- IF IS_ADMIN -->11<!-- ELSE -->10<!-- ENDIF -->"


Нет такого кода в шаблоне .
Может кто допилить под последнию версию движка ?
 

Kryl

Пользователь
Ошибка
#001271 Illegal mix of collations for operation '<='

на эту строчку
PHP:
$times_del = DB()->fetch_rowset("SELECT group_id, user_id FROM ". BB_USER_GROUP ." WHERE time_del <= '$time' AND time_del != '0000-00-00'");
 

Exile

Администратор
, текст ошибки говорящий. Кодировку поля time_del в базе данных проверьте, должна быть utf8.
 
Сверху