Исчезновение ссылки для редактирования через время - Tickets

Всем добра! Как то давно делал знакомым страницу вопроса — ответов на Tickets, а на днях спросили где в настройках задается время жизни для кнопки редактировать, чтобы пользователь через время уже не мог исправить или удалить написанное. Пересмотрел весь компонент Tickets, такая функция есть только для комментариев. Ссылка на редактирование в данный момент выводится так:
[[!+modx.user.id:is=`[[*createdby]]`:then=`<a href="/vopros-otvet.html?tid=[[+id]]">Редактировать вопрос</a>`]]
Есть одна идея но пока смутно представляю как лучше реализовать это.
Возможно кто нибудь уже делал такое — чтобы кнопка/ссылка была недоступна через заданное время, ну или в какую сторону копать? Хотелось бы конечно сильно не затрагивать сам Tickets, в идеале вообще не трогать.
UPD: Вариант
Один нюанс — загрузка картинок будет с помощью компонента Uploadify.
Копируем чанк tpl.Tickets.form.update, переименовываем в tpl.Tickets.form.update.two, в нем находим:
<div class="ticket-form-files">
 [[+files]]
 </div>
Меняем на:
<div class="svoi_class">  
<h3>Если вы вставляте картинку в теге img, пожалуйста, воспользуйтесь нашим <a href="/zagruzka-izobrazheni.html"  target="_blank">файлохранилищем</a> 
</h3>
</div>
где ссылка — переход на страницу с Uploadify.
Далее по шагам.
Шаг 1. Поскольку форма будет подгружаться, то воспользуемся основами — Основы Ajax
Создаем сниппет ajax_edit
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
if (empty($_POST['action'])) {return;}
$res = '';
switch ($_POST['action']) {
case 'change':
$param = array(
'tid' => $modx -> resource -> id,
'tplFormUpdate' => 'tpl.Tickets.form.update.two'//подставляем свое имя чанка редактирования
);
$res = $modx->runSnippet('TicketForm',$param);
break;
}
if (!empty($res)) { 
die($res);
}
На странице где будем вызывать форму вставим скрипт
<script type="text/javascript">
$(document).ready(function() {
$(document).on('click', 'a.to_link', function(e) 
{
e.preventDefault();
var action = $(this).data('action');
$.post(document.location.href, {action: action}, function(data) {
$('#upform').html(data);
$('#ticket-editor').markItUp(TicketsConfig.editor.ticket); //подтягиваем редактор Markitup
})
$(document).ajaxStop(function() {    
$( ".to_link" ).hide();
});
return false; 
})
})
</script>
Шаг 2. В системных настройках создаем новый параметр, называем tickets.change_time — Время изменения тикета, в котором указываем «время жизни» кнопки редактировать в секундах. Например, если надо чтобы кнопка исчезла через сутки, то указываем в параметре цифры: 86400
Шаг 3. Создаем простейший сниппет для исчезновения кнопки.
Сниппет editt:
$time = time() - strtotime($modx->resource->get('createdon'));
$change_time = $modx->getOption('tickets.change_time');
$url = $link;
if ($time > $change_time) {
$url = false;
}
return $url;
На этом все. Показываем кнопку где нужно вот так:
[[!+modx.user.id:is=`[[*createdby]]`:then=`[[!editt? &link=`<a href="#" data-action="change" class="btn to_link">Изменить</a>`]]`]]
Сюда подгрузится форма:
<div id="upform"></div>
Почему загрузка картинок/файлов не стандартно с plupload? Вот здесь ответ — modx.pro/development/3139#comment-58414
Nik
Nik
23 февраля 2021, 16:02
modx.pro
457
0

Комментарии: 5

Андрей
23 февраля 2021, 16:21
+1
Посчитать разницу между createdon и текущей датой, в зависимости от нужного кол-ва дней(часов, минут) показывать/скрывать кнопку.
    Nik
    Nik
    23 февраля 2021, 16:39
    0
    Это понял, так реализовано в комментариях, но надо чтобы пользователь до исчезновения кнопки не видел адрес ссылки на редактирование. Просто скрывать кнопку это немного не то
      Андрей
      23 февраля 2021, 17:01
      0
      но надо чтобы пользователь до исчезновения кнопки не видел адрес ссылки на редактирование
      Так он её в адресной строке изначально увидит.

      По тому же условию просто не выводить форму редактирования по прошествии заданных дней.
        Nik
        Nik
        23 февраля 2021, 17:05
        0
        Ссылка должна быть такого примерно вида
        <a href="#">Редактировать вопрос</a>`
        Думаю попробовать подгружать форму редактирования через Ajax, как вариант
    Nik
    Nik
    24 февраля 2021, 16:40
    0
    В общем там совсем все просто делается, чуть позже выжму свободное время и обязательно обновлю свой топик с одним из рабочих вариантов. Вдруг кому-нибудь неожиданно понадобиться. Для профи это конечно не составит труда и возможно они сделают все в несколько строк, а новичкам таким как я возможно пригодится
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5