SUCHE EINEN DANKE MOD/karma Mod
Verfasst: 18.11.2007 14:56
				
				ich suche einen danke mod oder einen karma mod
			phpBB.de - Die deutsche phpBB-Community
https://www.phpbb.de/community/
Code: Alles auswählen
##############################################################
## MOD Title: Bedankomat
## MOD Author: cyberWolf < daniel@delphipraxis.net > (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&u='.$userdata['user_id'].'&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&u='.$userdata['user_id'].'&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">   <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> {L_BEDANKOMAT_USERS}</td>
</tr>
<!-- END switch_bedankomat -->
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoMCode: Alles auswählen
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;Code: Alles auswählen
f ( !isset($topic_id) && !isset($post_id) )
{
message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
}hab ich nur nach:if ( !isset($topic_id) && !isset($post_id) )
{
message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
}
geucht, die zeile wurde 2x gefunden, und bei der ersten zeile, die am ähnlisten aussah, nur ohne "isset" hab ich den langen code danach eingebaut...message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
wo kann man mal n demo sehen?!? hat das vieleicht schon einer bei sich eingebaut?manuj170793 hat geschrieben:karma:
http://phpbbhacks.com/download/3237