Can someone rewrite this hack, please?

Started by woehrl, April 03, 2005, 11:39:36 AM

Previous topic - Next topic

woehrl

Hello,

I went from phpBB to SMF and i really like it, but there is one hack i really miss. Can someone rewrite this hack so that it work with SMF? Here's the code:

##############################################################
## MOD Title: Bedankomat
## MOD Author: cyberWolf < [email protected] > (Daniel R. Wolf) www.delphipraxis.net
## MOD Description: some_description_goes_here
## MOD Version: 0.1.1
##
## Installation Level: easy
## Installation Time: 10
## Files To Edit: includes/constants.php
##                viewtopic.php
##                templates/subSilver/viewtopic_body.tpl
## Included Files: (n/a)
##############################################################
## For Security Purposes, Please Check: http://www.phpbb.com/mods/downloads/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbb.com/mods/downloads/
##############################################################
## Author Notes: (n/a)
##
##############################################################
## MOD History:  0.1.1 initial release (22-JAN-2003)
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################


IMPORTANT:

You will have to create an extra table. Plase run the following SQL-code
within your DBMS:



CREATE TABLE `phpbb_bedankomat` (
  `thx_id` smallint(11) NOT NULL auto_increment,
  `user_id` smallint(11) NOT NULL default '0',
  `topic_id` smallint(11) NOT NULL default '0',
  PRIMARY KEY  (`thx_id`)
) TYPE=MyISAM;




#
#-----[ OPEN ]------------------------------------------
#
includes/constants.php

#
#-----[ FIND ]------------------------------------------
#
define('VOTE_USERS_TABLE', $table_prefix.'vote_voters');

#
#-----[ AFTER, ADD ]------------------------------------------
#
define('BEDANKOMAT_TABLE', $table_prefix.'bedankomat');

#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php

#
#-----[ FIND ]------------------------------------------
#
if ( !isset($topic_id) && !isset($post_id) )
{
   message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
}

#
#-----[ AFTER, ADD ]------------------------------------------
#
//////////////////////////////////////////////
//
//   Bedankomat START (1)
//   Hier quetschen wir den Bedankomat dazwischen
//   und schauen, ob es etwas fuer uns zu tun gibt
//
//////////////////////////////////////////////

if (isset($HTTP_GET_VARS['mode']) && isset($HTTP_GET_VARS['u']) && isset($HTTP_GET_VARS['t']))
{
   // Alle benoetigten Parameter sind schonmal vorhanden. Das ist wenigstens ein Anfang.
   $thx_user_id = intval($HTTP_GET_VARS['u']);
   $thx_topic_id = intval($HTTP_GET_VARS['t']);
   $thx_mode = stripslashes($HTTP_GET_VARS['mode']);

   switch ($thx_mode)
   {
      case 'add_thx':
            // Von mir aus. Ein 'Dankeschoen' soll also hinzugefuegt werden.
            // Es kostet zwar eine zuaetzliche SQL-Abfrage, aber wir sollten an dieser
            // Stelle anhand der User-Datenbank pruefen, ob die gegebene User-ID wirklich
            // gueltig ist.
            // Auch den User ANONYMOUS (-1) wollen wir ausschliessen.
            $sql = 'SELECT user_id FROM ' .USERS_TABLE. ' WHERE user_id=' .$thx_user_id. ' LIMIT 1';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not obtain user information', '', __LINE__, __FILE__, $sql);
            }           
            if (($db->sql_numrows($result) == 0) && ($thx_user_id == -1))
            {
               // Ein Satz mit 'X' - das war wohl nix.
               // Es wurde eine ungueltige User-ID uebergeben.
               // Um so besser - dann haben wir weniger zu tun.
               message_die(GENERAL_ERROR, 'Invalid User-ID', '', __LINE__, __FILE__, $sql);
            }

            // Man soll sich ja pro Topic nur einmal bedanken koennen. Also muesen wir jetzt prufen, ob
            // dieser User sich bereits fuer dieses Topic bedankt hat.
            $sql = 'SELECT * FROM ' .BEDANKOMAT_TABLE. ' WHERE (user_id=' .$thx_user_id. ') AND (topic_id=' .$thx_topic_id. ') LIMIT 1';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not obtain bedankomat information', '', __LINE__, __FILE__, $sql);
            }
            if ($db->sql_numrows($result) != 0)
            {
               // Noch ein Satz mit 'X' - das war wohl wieder nix.
               // Dieser User hat sich fuer diesen Thread bereits bedankt.
               message_die(GENERAL_ERROR, 'Einmal reicht. ;-)', '', __LINE__, __FILE__, $sql);
            }

            // Hier endlich angekommen scheint alles klar zu gehen. ;-)
            // Der User existiert, will sich aufrichtig bedanken und hat dies auch noch nicht getan.
            $sql = 'INSERT INTO ' .BEDANKOMAT_TABLE. ' (user_id, topic_id) VALUES (' .$thx_user_id. ', ' .$thx_topic_id. ')';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not update bedankomat information', '', __LINE__, __FILE__, $sql);
            }
            // done.

            break;
      case 'remove_thx':
            // Von mir aus. Ein 'Dankeschoen' soll also zurueckgenommen werden.
            // Es kostet zwar eine zuaetzliche SQL-Abfrage, aber wir sollten an dieser
            // Stelle anhand der User-Datenbank pruefen, ob die gegebene User-ID wirklich
            // gueltig ist.
            // Auch den User ANONYMOUS (-1) wollen wir ausschliessen.
            $sql = 'SELECT user_id FROM ' .USERS_TABLE. ' WHERE user_id=' .$thx_user_id. ' LIMIT 1';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not obtain user information', '', __LINE__, __FILE__, $sql);
            }           
            if (($db->sql_numrows($result) == 0) && ($thx_user_id == -1))
            {
               // Ein Satz mit 'X' - das war wohl nix.
               // Es wurde eine ungueltige User-ID uebergeben.
               // Um so besser - dann haben wir weniger zu tun.
               message_die(GENERAL_ERROR, 'Invalid User-ID', '', __LINE__, __FILE__, $sql);
            }

            // Wir wollen nur dann weiter machen, wenn sich dieser User auch fuer dieses Topic bedankt hat.
            // Man koennte sich ueberlegen, sich diese Abfrage zu schenken, aber es schadet nichts,
            // fuer alle Situationen gewappnet zu sein.
            $sql = 'SELECT * FROM ' .BEDANKOMAT_TABLE. ' WHERE (user_id=' .$thx_user_id. ') AND (topic_id=' .$thx_topic_id. ') LIMIT 1';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not obtain bedankomat information', '', __LINE__, __FILE__, $sql);
            }
            if ($db->sql_numrows($result) == 0)
            {
               // Noch ein Satz mit 'X' - das war wohl wieder nix.
               // Dieser User hat sich fuer diesen Thread niemals bedankt.
               message_die(GENERAL_ERROR, 'invalid data', '', __LINE__, __FILE__, $sql);
            }

            // Endlich:
            // Dann versuchen wir jetzt, das 'Dankeschoen' dieses Users fuer genau dieses Topic
            // aus der Datenbank zu entfernen.
            $sql = 'DELETE FROM ' .BEDANKOMAT_TABLE. ' WHERE (user_id=' .$thx_user_id. ') AND (topic_id=' .$thx_topic_id. ') LIMIT 1';
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, 'Could not update bedankomat information', '', __LINE__, __FILE__, $sql);
            }
            // done.

            break;
      default:
            // und was machen wir hier? irgendeine Fehlermeldung auszugeben waere nicht das Verkehrteste....
            message_die(GENERAL_ERROR, 'unknown "mode"', '', __LINE__, __FILE__, $sql);
            break;
   }

   $db->sql_freeresult($result);
   unset( $sql );
   unset( $thx_user_id );
   unset( $thx_topic_id );
   unset( $thx_mode );
}

//////////////////////////////////////////////
//
// Bedankomat Ende (1)
//
//////////////////////////////////////////////

#
#-----[ FIND ]------------------------------------------
#
//
// Topic watch information
//

#
#-----[ BEFORE, ADD ]------------------------------------------
#
/////////////////////////////////////////////////////////
//
//   Bedankomat-Start (2)
//
/////////////////////////////////////////////////////////


// nungut - erstmal soll das Teil nur fuer registrierte Benuzer vorhanden sein.
if ($userdata['session_logged_in'])
{
   // Nun muss sich der Admin entscheiden - soll ein Benutzer die Möglichkeit haben, ein
   // 'Dankeschoen' wieder zurueckzunehmen? Wenn nicht, dann muss die folgende Variable
   // auf '0' gestzt werden, sonst eben auf einen Wert ungleich '0' - etwa die '1' wäre
   // eine gute Alternative ;-)
   $allow_remove_thanks = 1;  // noch nicht implementiert !!!!!


   // Jetzt gibt es zwei Moeglichkeiten:
   // (1) Dieser Benutzer hat sich bereits bedankt - dann koennte er seine Danksagung zurueckziehen
   // (2) Dieser Benutzer hat sich noch nicht bedankt und erhaelt jetzt die Möglichkeit hierzu
   

   // Feststellen, ob der aktuelle Benutzer sich fuer dieses Topic schon bedankt hat.
   $sql = 'SELECT * FROM ' .BEDANKOMAT_TABLE. ' WHERE (user_id=' . $userdata['user_id'] . ') AND (topic_id=' .$topic_id. ') LIMIT 1';
   if ( !($result = $db->sql_query($sql)) )
   {
      message_die(GENERAL_ERROR, 'Could not obtain user-bedankomat information', '', __LINE__, __FILE__, $sql);
   }


   if ($db->sql_numrows($result) == 1)
   {
      // Daten liegen vor - Benutzer hat sich also schon bedankt.
      $l_bedankomat = '\'Dankeschön\' zurücknehmen';
      $u_bedankomat = append_sid('viewtopic.'.$phpEx.'?mode=remove_thx&amp;u='.$userdata['user_id'].'&amp;t='.$topic_id);
   }
   else
   {
      // Daten liegen nicht vor - Benutzer hat sich also noch nicht bedankt.
      $l_bedankomat = '\'Dankeschön\' sagen.';
      $u_bedankomat = append_sid('viewtopic.'.$phpEx.'?mode=add_thx&amp;u='.$userdata['user_id'].'&amp;t='.$topic_id);
   }
}
else
{
   $l_bedankomat = '';
   $u_bedankomat = '';
}


// Jetzt generieren wir die Ansicht fuer diejenigen, die sich bedankt haben.
$sql = 'SELECT b.user_id, b.topic_id, u.username FROM ' .BEDANKOMAT_TABLE. ' b, ' .USERS_TABLE. ' u
   WHERE (b.user_id = u.user_id) AND (b.topic_id = ' .$topic_id. ')';
if ( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not obtain topic-bedankomat information', '', __LINE__, __FILE__, $sql);
}

$thx_users = array();
$num_thxs = $db->sql_numrows($result);
$thx_users = $db->sql_fetchrowset($result);

if ($num_thxs > 0)
{
   $l_thx_userlist = '';
   $l_thx_user = 'Für diesen Thread bedanken sich die folgenden User:';

   for ($index=0; $index<$num_thxs; $index++)
   {
      $l_thx_userlist .= ($index==0) ? $thx_users[$index]['username'] : ', ' . $thx_users[$index]['username'];
   }

   $template->assign_block_vars('switch_bedankomat', array() );
}
else
{
   $l_thx_userlist = '';
   $l_thx_user = '';
}

unset( $num_thxs );
unset( $thx_users );

/////////////////////////////////////////////////////////
//
//   Bedankomat-Ende (2)
//
/////////////////////////////////////////////////////////

#
#-----[ FIND ]------------------------------------------
#
'L_GOTO_PAGE' => $lang['Goto_page'],

#
#-----[ AFTER, ADD ]------------------------------------------
#
'L_BEDANKOMAT' => $l_bedankomat,
'U_BEDANKOMAT' => $u_bedankomat,
'L_BEDANKOMAT_USERS' => $l_thx_userlist,
'L_BEDANKOMAT_TEXT' => $l_thx_user,

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/viewtopic_body.tpl

#
#-----[ FIND ]------------------------------------------
#
   <td align="left" valign="middle" width="100%"><span class="nav">&nbsp;&nbsp;&nbsp;<a href="{U_INDEX}" class="nav">{L_INDEX}</a>
     -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>
  </tr>
#
#-----[ AFTER, ADD ]------------------------------------------
#
  <tr>
   <td colspan="2"><span class="gen"><a href="{U_BEDANKOMAT}" class="nav">{L_BEDANKOMAT}</a></span></td>
  </tr>

#
#-----[ FIND ]------------------------------------------
#
<!-- END postrow -->

#
#-----[ AFTER, ADD ]------------------------------------------
#
<!-- BEGIN switch_bedankomat -->
<tr>
   <td class="row1" colspan="2"><span class="gen"><b>{L_BEDANKOMAT_TEXT}</b>&nbsp;{L_BEDANKOMAT_USERS}</td>
</tr>
<!-- END switch_bedankomat -->

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM


I hope someone could make it

Grudge

woehrl,

It's going to be almost impossible just to "rewrite" that mod - as it's unlikely to fit into SMF in anyway at all. You're better off explaining what exactly the mod does (Especially as all the comments are in German!), and maybe someone will write a similar mod for SMF. Basically, it's not a case of simple "Copy and Paste".

Cheers,
Grudge
I'm only a half geek really...

woehrl

Grudge, i know that it isn't a mod to just copy and past. It is a mod to say "Thank You" to a Topic. It is used to thank a Topic without making a new post with just "Thank you" in it

Advertisement: