Mod pro přesun příspěvku mezi tématy

Prostor pro vaše MODy a vylepšení. Vkládejte pouze vaší vlastní práci.
Pravidla fóra
Dnem 1.1.2009 oficiálně skončila podpora pro phpBB2. Bezpečnostní aktualizace budou vydávány jen do 1.2.2009. Proto doporučujeme co nejrychleji přejít na aktuální verzi phpBB3, která je ke stažení zde nebo zde.
Uživatelský avatar
vitsoft
Příspěvky: 4
Registrován: čtv 20. lis 2008 19:36:50
Bydliště: Vítkov
Kontaktovat uživatele:

Mod pro přesun příspěvku mezi tématy

Příspěvek od vitsoft » čtv 20. lis 2008 19:56:49

Napsal jsem si modifikaci phpBB2 pro přesunutí nebo zkopírování jednotlivého příspěvku do jiného tématu.

Máte-li oprávnění upravovat příspěvek (tj. jste-li jeho autor, moderátor nebo administrátor),objeví se v jeho záhlaví ikona pro přesun tohoto příspěvku do jiného tématu.
Obrázek

Obrázek
Po klepnutí vyberte cílové fórum a v třetím kroku i téma, do kterého
chcete příspěvek zkopírovat nebo přesunout.
Obrázek
Přesun se neprovede, pokud nemáte oprávnění vkládat nové příspěvky do cílového fóra.

Uživatelský avatar
vitsoft
Příspěvky: 4
Registrován: čtv 20. lis 2008 19:36:50
Bydliště: Vítkov
Kontaktovat uživatele:

A tady je slíbený ModCopyPost:

Příspěvek od vitsoft » čtv 20. lis 2008 20:00:05

Kód: Vybrat vše

##############################################################
## MOD Name:        ModCopyPost
## MOD Title:       Copy/move a single post to any topic
## MOD Author:      vit$oft http://www.vitsoft.info/
## MOD Description: This modification of phpBB2 allows 
##                  the author or moderator to copy or move
##                  a single post to any other topic
##                  where (s)he has write-permission.
## MOD Version:     2008.09.21
## Tested With:     phpBB 2.0.22, MySQL 5.0.24, PHP 5.16
## Files To Edit:   language/lang_english/lang_faq.php
##                  language/lang_czech/lang_faq.php    
##                  language/lang_english/lang_main.php 
##                  language/lang_czech/lang_main.php   
##                  templates/subSilver/viewtopic_body.tpl
##                  templates/Acid/viewtopic_body.tpl
##                  viewtopic.php
##                  posting.php
## Included Files:  -
## License:         Public Domain
############################################################## 
## Author Notes:    Modify additional corresponding files
## if your phpBB uses other languages beside English and Czech
## and other skins beside subSilver and Acid.
## 
## Mod expects HTML and BBcode be enabled in posting.
## Neither did I bother with moving votes together with the 1st post,
## notifying users about moved posts by email,
## updating the search_wordlist, LastPost indication etc.
## Feel free to enhance this mod, if you wish to. 
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_faq.php
#
#-----[ FIND ]------------------------------------------
#
$faq[] = array("How do I create a poll?"
#
#-----[ BEFORE, ADD ]------------------------------------------

$faq[] = array("How do I move a post to other topic",
"If you have permission to edit your post (i.e. you are the author, moderator or admin),
you'll notice an icon <img src='templates/subSilver/images/topic_move.gif'/>
in the post header. After click on that icon select the target forum and topic
to move or copy your post to.<br/>
Copying will fail if you do not have write-permission to the target topic.");
#
#-----[ OPEN ]------------------------------------------
#
language/lang_czech/lang_faq.php
#
#-----[ FIND ]------------------------------------------
#
$faq[] = array('Jak vytvořím hlasování?'
#
#-----[ BEFORE, ADD ]------------------------------------------

$faq[] = array('Jak přesunu příspěvek jinam?',
'Máte-li oprávnění upravovat příspěvek (tj. jste-li jeho autor, moderátor nebo administrátor),
objeví se v jeho záhlaví ikona pro přesun tohoto příspěvku do jiného tématu
<img src="templates/subSilver/images/topic_move.gif"/>.
Po klepnutí vyberte cílové fórum  a ve třetím kroku i téma, do kterého
chcete příspěvek zkopírovat nebo přesunout.<br/>
Přesun se neprovede, pokud nemáte oprávnění vkládat nové příspěvky do cílového fóra.');
#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Options']
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$lang['ModCopyPost'] = 'Copy or move to another topic';
$lang['Perform'] = 'Perform';
$lang['Select_forum_to_copy'] = 'Select forum to copy to:';
$lang['Select_topic_to_copy'] = 'Select topic to copy to:';
$lang['ModCopyPostNoForumSelected'] = 'You did not select a forum.';
$lang['ModCopyPostNoTopicSelected'] = 'You did not select a topic.';
$lang['ModCopyPostDisp'] = 'What to do with original post:';
$lang['ModCopyPostDispCopy'] = 'leave untouched';
$lang['ModCopyPostDispCopyNote'] = 'append a note where it was copied to';
$lang['ModCopyPostDispMove'] = 'delete';
$lang['ModCopyPostDispMoveNote'] = 'replace with a note where it was moved to';
$lang['ModCopyPostMoved'] = 'This post was moved';
$lang['ModCopyPostCopied'] = 'This post was copied';
$lang['ModCopyPostBy'] = 'by';
#
#-----[ OPEN ]------------------------------------------
#
language/lang_czech/lang_main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Options']
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$lang['ModCopyPost'] = 'Přesunout jinam';
$lang['Perform'] = 'Provést';
$lang['Select_forum_to_copy'] = 'Vyberte fórum, kam příspěvek přesunout:';
$lang['Select_topic_to_copy'] = 'Vyberte téma, kam příspěvek přesunout:';
$lang['ModCopyPostNoForumSelected'] = 'Zapoměli jste vybrat fórum.';
$lang['ModCopyPostNoTopicSelected'] = 'Zapoměli jste vybrat téma.';
$lang['ModCopyPostDisp'] = 'Co s původním příspěvkem:';
$lang['ModCopyPostDispCopy'] = 'ponechat beze změny';
$lang['ModCopyPostDispCopyNote'] = 'doplnit poznámkou, kam byl zkopírován';
$lang['ModCopyPostDispMove'] = 'vymazat';
$lang['ModCopyPostDispMoveNote'] = 'nahradit poznámkou, kam byl přesunut';
$lang['ModCopyPostMoved'] = 'Příspěvek byl přesunut';
$lang['ModCopyPostCopied'] = 'Příspěvek byl zkopírován';
$lang['ModCopyPostBy'] = 'uživatelem';
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/viewtopic_body.tpl
#
#-----[ FIND ]------------------------------------------
#
<td valign="top" nowrap="nowrap">{postrow.QUOTE_IMG} {postrow.EDIT_IMG} {postrow.DELETE_IMG} {postrow.IP_IMG}</td>
#
#-----[ REPLACE WITH ]------------------------------------------
#
<td valign="top" nowrap="nowrap">{postrow.QUOTE_IMG} {postrow.EDIT_IMG} {postrow.MODCOPYPOST_IMG} {postrow.DELETE_IMG} {postrow.IP_IMG}</td>
#
#-----[ OPEN ]------------------------------------------
#
templates/Acid/viewtopic_body.tpl
#
#-----[ FIND ]------------------------------------------
#
<td valign="top" nowrap="nowrap">{postrow.QUOTE_IMG} {postrow.EDIT_IMG} {postrow.DELETE_IMG} {postrow.IP_IMG}</td>
#
#-----[ REPLACE WITH ]------------------------------------------
#
<td valign="top" nowrap="nowrap">{postrow.QUOTE_IMG} {postrow.EDIT_IMG} {postrow.MODCOPYPOST_IMG} {postrow.DELETE_IMG} {postrow.IP_IMG}</td>
#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php
#
#-----[ FIND ]------------------------------------------
#
$edit = '<a href="' . $temp_url . '">' . $lang['Edit_delete_post'] . '</a>';
#
#-----[ AFTER, ADD ]------------------------------------------
#
 $temp_url = append_sid("posting.$phpEx?mode=ModCopyPost&" . 
             POST_POST_URL . "=" . $postrow[$i]['post_id']);
 $ModCopyPost_img = '<a href="' . $temp_url . '"><img src="' . $images['topic_mod_move'] . 
              '" alt="' . $lang['ModCopyPost'] . '" title="' . $lang['ModCopyPost'] . '" border="0" /></a>';
 $ModCopyPost = '<a href="' . $temp_url . '">' . $lang['ModCopyPost'] . '</a>';
#
#-----[ FIND ]------------------------------------------
#
$edit = '';
#
#-----[ AFTER, ADD ]------------------------------------------
#
 $ModCopyPost_img = '';
 $ModCopyPost = '';
#
#-----[ FIND ]------------------------------------------
#
'EDIT' => $edit,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'MODCOPYPOST_IMG' => $ModCopyPost_img,
'MODCOPYPOST' => $ModCopyPost,
#
#-----[ OPEN ]------------------------------------------
#
posting.php
#
#-----[ FIND ]------------------------------------------
#
'poll_edit' => 'edit_poll_option', 'mode' => 'mode');
#
#-----[ AFTER, ADD ]------------------------------------------
#
 $params['ModCopyPostForum']='ModCopyPostForum';
 $params['ModCopyPostTopic']='ModCopyPostTopic';
 $params['ModCopyPostDisp']='ModCopyPostDisp';
#
#-----[ FIND ]------------------------------------------
#
$is_auth_type = 'auth_edit';
#
#-----[ BEFORE, ADD ]------------------------------------------
#
        case 'ModCopyPost':
        case 'ModCopyPostSelectForum':
        case 'ModCopyPostSelectTopic':
        case 'ModCopyPostPerform':
#
#-----[ FIND ]------------------------------------------
#
        case 'quote':
        case 'editpost':
        case 'delete':
#
#-----[ BEFORE, ADD ]------------------------------------------
#
  case 'ModCopyPost': // user clicked on CopyPost icon
  $message = "
    <form action='posting.php'>
    <input type='hidden' name='mode' value='ModCopyPostSelectTopic'/>
    <input type='hidden' name='" . POST_POST_URL . "' value='$post_id'/>
    <select name='ModCopyPostForum'>
    <option value='0'>".$lang['Select_forum_to_copy']."</option>";
  $sql = "SELECT c.cat_id, c.cat_title, c.cat_order
            FROM " . CATEGORIES_TABLE . " c, " . FORUMS_TABLE . " f
            WHERE f.cat_id = c.cat_id
            GROUP BY c.cat_id, c.cat_title, c.cat_order
            ORDER BY c.cat_order";
  if ( !($category_rows = $db->sql_query($sql)) )
      message_die(GENERAL_ERROR, "Couldn't obtain category list.", "", __LINE__, __FILE__, $sql);
  $sql = "SELECT *
            FROM " . FORUMS_TABLE . "
            ORDER BY cat_id, forum_order";
  while ( $category_row = $db->sql_fetchrow($category_rows) )
  {$message.="\r\n<optgroup label='".$category_row['cat_title']."'>";
   if ( !($forum_rows = $db->sql_query($sql)) )
        message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
   while ( $forum_row = $db->sql_fetchrow($forum_rows) )
   if ($forum_row['cat_id']==$category_row['cat_id'])
    $message.="\r\n<option value='".$forum_row['forum_id']."'>".$forum_row['forum_name']."</option>";
   } $message.="</select>
    <input type='submit' name='ModCopyPostSelectForum' value='".$lang['Select_forum']."'/>
    </form>";
  message_die(GENERAL_MESSAGE,$message);
  
  case 'ModCopyPostSelectTopic': // user selected forum to copy to
  if (!$ModCopyPostForum) message_die(GENERAL_MESSAGE,$lang['ModCopyPostNoForumSelected']);
  $is_auth = auth($AUTH_POST,$ModCopyPostForum,$userdata);  if (!$is_auth['auth_post'])
                message_die(GENERAL_MESSAGE, sprintf($lang['Sorry_auth_post'], $is_auth['auth_post_type']));
   $message = "
   <form action='posting.php'>
   <input type='hidden' name='mode' value='ModCopyPostPerform'/>
   <input type='hidden' name='ModCopyPostForum' value='$ModCopyPostForum'/>
   <input type='hidden' name='" . POST_POST_URL . "' value='$post_id'/>
   <p style='padding-left:24em;text-align:left;'>".$lang['ModCopyPostDisp']."
   <br/><input type='radio' name='ModCopyPostDisp' value='Copy' />".$lang['ModCopyPostDispCopy']."
   <br/><input type='radio' name='ModCopyPostDisp' value='CopyNote' checked='checked' />".$lang['ModCopyPostDispCopyNote']."
   <br/><input type='radio' name='ModCopyPostDisp' value='Move' />".$lang['ModCopyPostDispMove']."
   <br/><input type='radio' name='ModCopyPostDisp' value='MoveNote' />".$lang['ModCopyPostDispMoveNote']."</p>
    <select name='ModCopyPostTopic'>
    <option value='0'>".$lang['Select_topic_to_copy']."</option>\r\n";
    $sql = "SELECT forum_name FROM ".FORUMS_TABLE." WHERE forum_id = $ModCopyPostForum";
    if (!$DestForumInfo = $db->sql_fetchrow($db->sql_query($sql)))
      message_die(GENERAL_ERROR, "Couldn't get forum information", "", __LINE__, __FILE__, $sql);
   $message.="<optgroup label='".$DestForumInfo['forum_name']."'>\r\n";
    $sql = "SELECT t.topic_id, t.forum_id, t.topic_title
            FROM " . TOPICS_TABLE . " t
            WHERE t.forum_id = $ModCopyPostForum";
  if ( !($topics_rows = $db->sql_query($sql)) )
      message_die(GENERAL_ERROR, "Couldn't obtain topics list.", "", __LINE__, __FILE__, $sql);
  while ($topics_row = $db->sql_fetchrow($topics_rows) )
   $message.="<option value='".$topics_row['topic_id']."'>".$topics_row['topic_title']."</option>\r\n";
   $message.="</select>
   <input type='submit' name='ModCopyPostPerform' value='".$lang['Perform']."'/></form>";
  message_die(GENERAL_MESSAGE,$message);
  
  case 'ModCopyPostPerform': // user selected disposition and topic to copy to
    $is_auth = auth($AUTH_POST,$ModCopyPostForum,$userdata);  if (!$is_auth['auth_post'])
                message_die(GENERAL_MESSAGE, sprintf($lang['Sorry_auth_post'], $is_auth['auth_post_type']));
  if (!$ModCopyPostTopic) message_die(GENERAL_MESSAGE,$lang['ModCopyPostNoTopicSelected']);
  $sql = "SELECT * FROM ".POSTS_TABLE." WHERE post_id = $post_id";
      if (!$SrcPostsInfo = $db->sql_fetchrow($db->sql_query($sql)))
      message_die(GENERAL_ERROR, "Couldn't get posts information", "", __LINE__, __FILE__, $sql);
  $SrcTopicId = $SrcPostsInfo['topic_id'];
  $sql = "SELECT topic_title FROM ".TOPICS_TABLE." WHERE topic_id = $SrcTopicId";
  if (!$SrcTopicsInfo = $db->sql_fetchrow($db->sql_query($sql)))
  message_die(GENERAL_ERROR, "Couldn't get topics information", "", __LINE__, __FILE__, $sql);
  $SrcTopicsTitle = $SrcTopicsInfo['topic_title'];
  $sql = "SELECT topic_title FROM ".TOPICS_TABLE." WHERE topic_id = $ModCopyPostTopic";
  if (!$DestTopicsInfo = $db->sql_fetchrow($db->sql_query($sql)))
  message_die(GENERAL_ERROR, "Couldn't get topics information", "", __LINE__, __FILE__, $sql);
  $DestTopicsTitle = $DestTopicsInfo['topic_title'];
  $sql = "SELECT * FROM ".POSTS_TEXT_TABLE." WHERE post_id = $post_id";
  if (!$SrcPostsTextInfo = $db->sql_fetchrow($db->sql_query($sql)))
  message_die(GENERAL_ERROR, "Couldn't get posts_text information", "", __LINE__, __FILE__, $sql);
  $SrcBbcodeUid=$SrcPostsTextInfo['bbcode_uid'];
  $ModCopyPostNote="\r\n";
  $ModCopyPostNote.=$ModCopyPostDisp=='Copy'||$ModCopyPostDisp=='CopyNote'?$lang['ModCopyPostCopied']:
  $lang['ModCopyPostMoved'];
  $ModCopyPostNote.=date(" j.n.Y H:i ").$lang['ModCopyPostBy']." <b>".$userdata['username']."</b>
  <a href='viewtopic.php?".POST_TOPIC_URL."=$SrcTopicId'>$SrcTopicsTitle</a> -> <a href='viewtopic.php?".
    POST_TOPIC_URL."=$ModCopyPostTopic'>$DestTopicsTitle</a>";
  $ModCopyPostNotePrepared=prepare_message("<br><hr>[size=10:$SrcBbcodeUid][color=#808080:$SrcBbcodeUid]".
  $ModCopyPostNote."[/color:$SrcBbcodeUid][/size:$SrcBbcodeUid]",1,0,0,$SrcBbcodeUid);
  $SrcPostSubjectPrepared=prepare_message(unprepare_message($SrcPostsTextInfo['post_subject']),0,0,0,0);
  $SrcPostTextPrepared=prepare_message(unprepare_message($SrcPostsTextInfo['post_text']),$SrcPostsInfo['enable_html'],
  $SrcPostsInfo['enable_bbcode'],$SrcPostsInfo['enable_smilies'],$SrcBbcodeUid);
   
  switch ($ModCopyPostDisp)
 {case 'Copy': case 'CopyNote':
  $sql="INSERT INTO ".POSTS_TABLE."(topic_id,forum_id,poster_id,post_time,poster_ip,post_username,enable_bbcode,
                                    enable_html,enable_smilies,enable_sig,post_edit_time,post_edit_count)
        VALUES ($ModCopyPostTopic,$ModCopyPostForum,".$SrcPostsInfo['poster_id'].",".$SrcPostsInfo['post_time'] .
        ",'".$SrcPostsInfo['poster_ip']."','".$SrcPostsInfo['post_username']."',".$SrcPostsInfo['enable_bbcode'].",".
        $SrcPostsInfo['enable_html'].",".$SrcPostsInfo['enable_smilies'].",".$SrcPostsInfo['enable_sig'].",'".
        $SrcPostsInfo['post_edit_time']."',".$SrcPostsInfo['post_edit_count'].")";
  if (!$db->sql_query($sql)) message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
  $DestPostId = $db->sql_nextid();
  $sql="INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, bbcode_uid, post_subject, post_text)
        VALUES ($DestPostId,'".$SrcPostsTextInfo['bbcode_uid']."','$SrcPostSubjectPrepared','$SrcPostTextPrepared')";
  if (!$db->sql_query($sql)) message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
  if ($ModCopyPostDisp=='CopyNote')
  {$sql="UPDATE ".POSTS_TEXT_TABLE." SET post_text = '$SrcPostTextPrepared$ModCopyPostNotePrepared'
         WHERE post_id = $post_id";
  if (!$db->sql_query($sql)) message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
  }; break;
  case 'Move': case 'MoveNote':
  $sql="UPDATE ".POSTS_TABLE." SET forum_id = $ModCopyPostForum, topic_id = $ModCopyPostTopic WHERE post_id = $post_id";
  if(!$db->sql_query($sql)) message_die(GENERAL_ERROR,"Couldn't update forum information","",__LINE__,__FILE__,$sql);
  if ($ModCopyPostDisp=='MoveNote')
 {$sql="INSERT INTO ".POSTS_TABLE."(topic_id,forum_id,poster_id,post_time,poster_ip,post_username,enable_bbcode,
                                    enable_html,enable_smilies,enable_sig,post_edit_time,post_edit_count)
        VALUES (".$SrcPostsInfo['topic_id'].",".$SrcPostsInfo['forum_id'].",".$SrcPostsInfo['poster_id'].",".
  $SrcPostsInfo['post_time'].",'".$SrcPostsInfo['poster_ip']."','".$SrcPostsInfo['post_username']."',1,1,1,0,'',0)";
  if (!$db->sql_query($sql)) message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
  $SrcPostId = $db->sql_nextid();
  $sql="INSERT INTO ".POSTS_TEXT_TABLE." (post_id,bbcode_uid,post_subject,post_text)
        VALUES ($SrcPostId,'$SrcBbcodeUid','$SrcPostSubjectPrepared','$ModCopyPostNotePrepared')";
  if (!$db->sql_query($sql)) message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
   }; break; default: message_die(GENERAL_MESSAGE, "Bad ModCopyPostDisp='$ModCopyPostDisp'");
  } // endswitch ($ModCopyPostDisp)
  message_die(GENERAL_MESSAGE,$message.$ModCopyPostNote);
#
#####end
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM

Zamčeno