Jump to content

Меняем дату, время и автора поста / темы

Featured Replies

Posted
comment_105431

Здравствуйте.

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

Но мне этого показалось мало и вот, я решил немного доработать свой файлик.
Скажу сразу, это не мод, не хак и вообще не относится к движку форума.
Это просто php файл, который изменяет данные в вашей MySQL базе.

Итак, в любом месте вашего форума создаем файлик, с именем db_time.php и копируем в него вот это:
 

Спойлер

<!DOCTYPE html>
<html>
<head>
  <META content="text/html; charset=utf-8" http-equiv="Content-Type">
  <style>
  table {
    border: 1px solid #ccc;
    border-radius: 5px;
  }
  table td {
    padding: 2px;
  }
  tr:nth-child(2n-1) {
    background: #f8f8f8;
  }
  body {
    font-family: Tahoma, Arial;
    font-size: 13px;
  }
  a {
    text-decoration: none;
    cursor: pointer;
  }
  a:hover {
    text-decoration: underline;
  }
  </style>
</head>
<body>
  <?php
$mypass = "1234";                 //Ваш секретный пароль
$mypage = "db_time.php";          //Имя этого файла
$id_post = $_POST['id_post'];
$pass = $_POST['pass'];
$days = $_POST['days'];
$hours = $_POST['hours'];
$minuts = $_POST['minuts'];
$seconds = $_POST['seconds'];
$plusminus = $_POST['plusminus'];
$approved = $_POST['approved'];
$calendar_dt = $_POST['calendar_dt'];
$dt = new DateTime($calendar_dt);
$author_id = $_POST['author_id'];
$new_author = $author_id;

if (!isset($dt)) { $dt = "0"; }
if (!isset($days)) { $days = "0"; }
if (!isset($hours)) { $hours = "0"; }
if (!isset($minuts)) { $minuts = "0"; }
if (!isset($seconds)) { $seconds = "0"; }
if (!isset($plusminus)) { $plusminus = "0"; }
if (!isset($approved)) { $approved = "0"; }
if (!isset($author_id)) { $author_id = "1"; }

if (!isset($message)) { $message = "<span style=\"color: #777\">Введите параметры</span>"; }

mysql_connect("localhost", "username", "password");    //Ваши параметры подключения к бд 
mysql_select_db("dbname");                         //Если у пользователя больше одной базы, имя этой базы (иначе эту строку нужно удалить... вроде :) )
mysql_query  ("set_client='utf8'");
mysql_query  ("set character_set_results='utf8'");
mysql_query  ("set collation_connection='utf8_general_ci'");
mysql_query  ("SET NAMES utf8");

if ((isset($id_post)) AND ($id_post != "") AND ($pass == $mypass))
  {
    $sql = "SELECT `post_date` FROM `forums_posts` WHERE `pid` = $id_post";
    $result = mysql_query($sql) or die(mysql_error());
    $current_post_time = mysql_fetch_array($result);
    
    
    if ((isset($current_post_time)) AND ($current_post_time != "")) 
      {
        $sql1 = "SELECT `author_name` FROM `forums_posts` WHERE `pid` = $id_post";
        $result1 = mysql_query($sql1) or die(mysql_error());
        $post_author = mysql_fetch_array($result1);
        $post_author_old = $post_author[];
  
        $sql7 = "SELECT `author_id` FROM `forums_posts` WHERE `pid` = $id_post";
        $result7 = mysql_query($sql7) or die(mysql_error());
        $author_id  = mysql_fetch_array($result7);
        $old_author = $author_id[];
  
        if (!isset($new_author))        
          {
            $new_author = $old_author;
          }
    
        $sql10 = "SELECT `name` FROM `core_members` WHERE `member_id` = $new_author";
        $result10 = mysql_query($sql10) or die(mysql_error());
        $post_author_new  = mysql_fetch_array($result10);
        $post_author_new1 = $post_author_new[];
        $post_author_new2 = mysql_escape_string($post_author_new1);

        if ((isset($current_post_time)) AND ($current_post_time != "")) 
          {
            $current_post_time1 = date('H:i:s, d.m.Y ', $current_post_time[]);
            $message = "<span style=\"color: #777\">Время поста: <strong>". $current_post_time1 ."</strong> (" . $current_post_time[] . ") </span>";
          }
        }
      else
      {
        $message = "<span style=\"color: red\">Неверное введен id поста (" . $id_post . ")</span>";
      }
    }

  


if ((isset($current_post_time[])) AND ($current_post_time[] != "") AND ($plusminus != )) 
  {
    if ($plusminus == 1) {  $new_post_time = $current_post_time[] + ($seconds + ($minuts * 60) + ($hours * 60 * 60) + ($days * 60 * 60 * 24));  }
    if ($plusminus == 2) {  $new_post_time = $current_post_time[] - ($seconds + ($minuts * 60) + ($hours * 60 * 60) + ($days * 60 * 60 * 24));  }
    if ((isset($new_post_time)) AND ($new_post_time > ))
      {
        $new_post_time1 = date('H:i:s, d.m.Y ', $new_post_time);
        $message = "<span style=\"color: #0fc834\">Новое время: <strong>". $new_post_time1 ."</strong> (" . $new_post_time . "). ID автора: " . $new_author . "</span>";
      }
  }

if ((($days == "0") AND ($hours == "0") AND ($minuts == "0") AND ($seconds == "0")) OR (($days == "") AND ($hours == "") AND ($minuts == "") AND ($seconds == ""))) 
  {
    if ((isset($calendar_dt)) AND ($calendar_dt != "")) 
      {
        $new_post_time = $dt->getTimestamp();
        if ((isset($new_post_time)) AND ($new_post_time > ))
          {
            $new_post_time1 = date('H:i:s, d.m.Y ', $new_post_time);
            $message = "<span style=\"color: #0fc834\">Новое время: <strong>". $new_post_time1 ."</strong> (" . $new_post_time . "). ID автора: " . $new_author . "</span>";
          }
      }
  }

if ($pass == $mypass) 
  {
    if ((isset($new_post_time)) AND ($new_post_time > ))  
      {
        $old_post_time = $current_post_time[];  
        $sql2 = "UPDATE `forums_posts` SET `post_date` = $new_post_time WHERE `post_date` = $old_post_time";
        $result2 = mysql_query($sql2) or die(mysql_error());
          
        $sql3 = "UPDATE `forums_topics` SET `start_date` = $new_post_time WHERE `start_date` = $old_post_time";
        $result3 = mysql_query($sql3) or die(mysql_error());
  
        $sql4 = "UPDATE `forums_topics` SET `last_post` = $new_post_time WHERE `last_post` = $old_post_time";
        $result4 = mysql_query($sql4) or die(mysql_error());
  
        $sql5 = "UPDATE `forums_topics` SET `last_real_post` = $new_post_time WHERE `last_real_post` = $old_post_time";
        $result5 = mysql_query($sql5) or die(mysql_error());
  
        $sql6 = "UPDATE `forums_forums` SET `last_post` = $new_post_time WHERE `last_post` = $old_post_time";
        $result6 = mysql_query($sql6) or die(mysql_error());  
  
        $sql11 = "UPDATE `forums_forums` SET `last_poster_id` = $new_author WHERE `last_post` = $old_post_time";
        $result11 = mysql_query($sql11) or die(mysql_error());
  
        $sql12 = "UPDATE `forums_topics` SET `last_poster_id` = $new_author WHERE `start_date` = $old_post_time";
        $result12 = mysql_query($sql12) or die(mysql_error());
  
        $sql13 = "UPDATE `forums_topics` SET `last_poster_id` = $new_author WHERE `last_post` = $old_post_time";
        $result13 = mysql_query($sql13) or die(mysql_error());
  
        $sql14 = "UPDATE `forums_topics` SET `starter_id` = $new_author WHERE `last_post` = $old_post_time";
        $result14 = mysql_query($sql14) or die(mysql_error());
  

        if ((isset($id_post)) AND ($id_post != "")) 
          {
            $sql8 = "UPDATE `forums_posts` SET `author_id` = $new_author WHERE `post_date` = $old_post_time";
            $result8 = mysql_query($sql8) or die(mysql_error());  
          }
  
        if ($approved == "1")
          {
            $sql15 = "UPDATE `forums_topics` SET `approved` = 1 WHERE `start_date` = $old_post_time";
            $result15 = mysql_query($sql15) or die(mysql_error());
          }
  
        if ($approved == "2")
          {
            $sql15 = "UPDATE `forums_topics` SET `approved` = 0 WHERE `start_date` = $old_post_time";
            $result15 = mysql_query($sql15) or die(mysql_error());
          }

        }
  }
else
  {
    if ((isset($pass)) AND ($pass != $mypass))
      {
        $message = "<span style=\"color: red\">Неверный пароль!</span>";
      }
  }


if ((isset($new_post_time)) AND ($new_post_time > ))
  {
    $oktime = date('Y-m-d\TH:i:s', $new_post_time);
  }
else 
  {
    $oktime = date('Y-m-d\TH:i:s', $current_post_time[]);
  }
?>
      <form method="post" action="<?php echo $mypage; ?>">
        <table align="center">
          <tr>
            <td colspan="2" align="center">
              <?php echo $message; ?>
            </td>
          </tr>
          <tr>
            <td width="350px">
              ID поста: 
              <?php if ((isset($id_post)) AND ($id_post != "") AND ($pass == $mypass) AND (isset($current_post_time)))
                {
                  echo "<strong>" . $id_post . "</strong>";
                }
              ?>
                </td>
            <td width="100px" align="center">
              <?php 
              if ((isset($id_post)) AND ($id_post != "") AND ($pass == $mypass) AND (isset($current_post_time)))
                {
                  echo ("<input type=\"text\" name=\"id_post\" size=\"10\" style=\"width: 5px; text-align: center; visibility: hidden; margin-right: -9px;\" readonly=\"readonly\" value=\"" . $id_post . "\">[<a href=\"". $mypage. "\">Изменить</a>]");
                }
              else
                {
                  echo ("<input type=\"text\" name=\"id_post\" size=\"10\" style=\"width: 88px; text-align: center;\" placeholder=\"id поста\" value=\"" . $id_post . "\"");
                }
              ?>
            </td>
          </tr>
            <?php 
              if ((isset($pass)) AND ($pass != $mypass))
                {
                  $message = "<span style=\"color: red\">Неверный пароль!</span>";
                }

              if ((isset($current_post_time)) AND ($current_post_time != "") AND ($pass == $mypass)) 
                {
                  echo ("
          <tr>
            <td colspan=\"2\">
              Сдвиг времени:
            </td>
          </tr>
          <tr>
            <td>
              <select size=\"1\"  name=\"plusminus\" style=\"width: 92px; height: 21px;\">
                <option selected value=\"0\">Знак</option>
                <option value=\"1\">Плюс</option>
                <option value=\"2\">Минус</option>
              </select>
               <input type=\"text\" name=\"days\" size=\"3\" style=\"width: 50px; text-align: center;\" placeholder=\"дней\" value=\"\">
               <input type=\"text\" name=\"hours\" size=\"3\" style=\"width: 50px; text-align: center;\" placeholder=\"часов\" value=\"\">
               <input type=\"text\" name=\"minuts\" size=\"3\" style=\"width: 50px; text-align: center;\" placeholder=\"минут\" value=\"\">
               <input type=\"text\" name=\"seconds\" size=\"3\" style=\"width: 50px; text-align: center;\" placeholder=\"секунд\" value=\"\">
            </td>
            <td align=\"center\">
              <input type=\"reset\" style=\"width: 90px;\" value=\"Сброс\" />
            </td>
          </tr>
          <tr>
            <td colspan=\"2\">
              Либо точное время:
            </td>
          </tr>
          <tr>
            <td>
              <input type=\"datetime-local\" step=\"1\" value=\"" . $oktime ."\" name=\"calendar_dt\"/>
            </td>
            <td align=\"center\">
              <input type=\"reset\" style=\"width: 90px;\" value=\"Сброс\" />
            </td>
           </tr>
           <tr>
            <td colspan=\"2\">
                Изменить автора поста:
            </td>
          </tr>
          <tr>
            <td>
              Текущий автор поста <strong>" . $post_author_new2 . "</strong> (id: " . $new_author . ")
            </td>
            <td width=\"70px\" align=\"center\">
              <input type=\"text\" name=\"author_id\" size=\"3\" style=\"width: 88px; text-align: center;\" placeholder=\"id автора\" value=\"" . $new_author . "\">
            </td>
          </tr>
          <tr>
            <td>
              Если пост является темой, утвердить?
            </td>
            <td width=\"70px\" align=\"center\">
              <select size=\"1\"  name=\"approved\" style=\"width: 92px; height: 21px;\">
                <option selected value=\"0\">Не менять</option>
                <option value=\"1\">Да</option>
                <option value=\"2\">Нет</option>
              </select>
            </td>
          </tr>
                  ");
                }
            ?>
           <tr>
            <td>
              Введите пароль:
            </td>
            <td width="70px" align="center">
              <input type="text" name="pass" size="10" style="width: 88px; text-align: center;" placeholder="пароль" value="<?php echo $pass ?>">
            </td>
          </tr>
          <tr>
            <td colspan="2" align="center">
              <input type="submit" style="width: 90px;" value="Применить" />
            </td>
          </tr>
        </table>
      </form>
</body>
</html>

 

Немного настраиваем наш файлик: Изменяем ваш секретный пароль, имя файла (если оно отличается от db_time.php) и настраиваем ваше подключение к базе данных.

Теперь, при переходе по адресу, например http://ваш_сайт.ru/db_time.php (или куда вы там его засунули), вы увидите вот такую картину:

0.png

После того, как вы введете номер поста и свой пароль, появится примерно вот такое окно:

1.png

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

Внимание! Код очень сырой, кривой и весь на костылях, поскольку я не специалист и поэтому использование этого кода только на ваш страх и риск, ко мне прошу никаких претензий.
Но у меня всё работает :)

p.s. Решил дописать, если для вас составляет трудность, определить id поста, то можете в редакторе шаблонов, например в forums -> topics -> post или forums -> topics -> postContainer в нужное вам место вставить {$comment->pid}
У меня получилось вот так:
2.png

comment_105439

Вот готовый плагин для анонимных сообщений  - https://invisionpower.com/files/file/7862-post-anonymously-in-forums/

Вот готовый плагин для смены автора темы - https://invisionpower.com/files/file/7352-change-post-author/

  • Author
comment_105449

Redneck, спасибо за ссылки. 

Правда думаю эти плагины работают не совсем так, как мне нужно. В плагине анонимного постигла пользователи сами переключают возможность анонимного постинга, а у меня получается раздел (а-ля послушано). И могу сделать анонимным любой пост быстро. Хотя я его не ставил, не знаю точно. 

Плагине смены автора хорош, но у меня ещё есть возможность смены времени и аппрува, если тема не утверждена. 

Да и зачем я буду покупать, когда могу сделать сам)) 

*Постигла=постинга 

*Плагине=плагин. 

Очепятки)) 

comment_105482
13 часов назад, Sergeevich сказал:

Да и зачем я буду покупать, когда могу сделать сам)) 

Зачем я буду делать сам, когда могу скачать? :D 

Простите - шутка минутка :)

А вообще задумка интересная )

comment_105490
41 минут назад, Sergeevich сказал:

@ArcheR_AWG, просто скачать или купить и скачать?

зависит от необходимости и срочности :)

  • 3 недели спустя...
  • Author
comment_106503

Я немного доработал свой скрипт и исправил пару ошибок, но изменить первое сообщение увы не могу.

Если кому-то понадобится актуальная версия, пишите в личку.

  • Author
comment_106917

Так как несколько раз уже просили в личку, выкладываю новую версию своего скрипта.
Проделано очень много работы, кода стало в 3 раза больше. Исправлено куча ошибок.
Пользуйтесь.

db_time.php

  • 2 месяца спустя...
comment_111256

Установил, не хочет работать, когда ввожу ID поста и пароль пишет Table 'host5567_admin.forums_posts' doesn't exist

  • Author
comment_111448
В 09.08.2016 в 00:20, Verty сказал:

Установил, не хочет работать, когда ввожу ID поста и пароль пишет Table 'host5567_admin.forums_posts' doesn't exist

Возможно проблема связана с вашим префиксом имен таблиц БД.

Напишите мне в личку, попробуем решить вопрос.

  • 1 year later...
comment_138877
В 12.05.2016 в 09:13, Heavenanvil сказал:

Так как несколько раз уже просили в личку, выкладываю новую версию своего скрипта.
Проделано очень много работы, кода стало в 3 раза больше. Исправлено куча ошибок.
Пользуйтесь.

db_time.php

Интересный скрипт. Жаль не работает. Файл настроил, загрузил, права выставил. При открытии файла белая страница. IPS 4.2.5.

  • 1 месяц спустя...
comment_141382
В 17.08.2016 в 12:46, Heavenanvil сказал:

Возможно проблема связана с вашим префиксом имен таблиц БД.

Напишите мне в личку, попробуем решить вопрос.

У меня аналогичная проблема, как решить? Напишите в открытом доступе плз

comment_141383

Нашел решение. Нужно в файл автора добавить свой префикс ко всем таблицам.

Я делал вручную, смотрел что в коде похоже на таблицу, смотрел есть ли она в PhpMyAdmin и если есть, то добавлял префикс. Удивительно, но получилось с первого раза, и даже код заработал - изменил дату поста. Очень удобно.

Я думаю автор напишет точно, где именно добавлять префикс. Всего 125 добавлений надо будет сделать. Я могу сказать, что это следующие:

  • core_members
  • forums_posts
  • forums_topics
  • forums_forums
  • core_search_index
comment_141384

Пару багов нашел, описал тут http://forum.orkons.ru/topic/179-kak-smenit-datu-posta-ips-425/

  • 4 месяца спустя...
comment_147598

Братья, а если админ не имеет доступа к БД, то как можно поменять таблицу members? Надо изменить дату регистрации юзверя.

  • 5 месяцев спустя...
comment_152624

Ошибка на версии 4.3.6 - Unknown column 'название базы' in 'where clause'

Я так понял, нужно что-то в скобки добавить, но не пойму что.

  • Author
comment_152625
28 минут назад, tunofak сказал:

Ошибка на версии 4.3.6 - Unknown column 'название базы' in 'where clause'

Я так понял, нужно что-то в скобки добавить, но не пойму что.

А вы не путаете название базы и название столбца? 

comment_152626

mysql_connect("localhost", "ЛОГИН", "ПАРОЛЬ");    // Ваши параметры подключения к бд 
mysql_select_db("bazamysql");                  // Если у пользователя больше одной базы, имя этой базы (иначе эту строку нужно удалить)

 

 

Я когда переходу по ссылке в dm_dbtime.php у меня показывает, что название базы bazamysql-1 (Я когда базу создавал, сделал такое название, потом я выкачал БД и заново закачал под названием bazamysql

  • 2 years later...
comment_172404

Для 4.6 актуально, работает? ☺️
Вот ещё есть решение https://invisioncommunity.com/files/file/8684-change-post-date/

Edited by bsnet

comment_172405
31 минуту назад, bsnet сказал:

Для 4.6 актуально, работает? ☺️

если на пхп от 5.6 и ниже скрип запускать будете, то вероятно. 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.