Seite 1 von 5

Prob mit Bedankomat!

Verfasst: 11.08.2004 18:52
von Ector
HAllo!

Ich wollte in mein phpbbplus 1.52 einen Bedankomaten einbauen aber eine zeile die man bearbeiten muss kann ich nicht finden! weiß jemand was ich da amchen kann? ich poste hier mal den bedankomaten code:

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">&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
-->
#
#-----[ 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> <---

diesen Teil kann ich nicht finden. Könnt ihr mir vielleicht sagen wie ich den trotzdem einbaue?

MfG Ector

Verfasst: 11.08.2004 18:54
von Andy120
hi...

Such mal nur:

Code: Alles auswählen

<a href="{U_VIEW_FORUM}"
oder

Code: Alles auswählen

{FORUM_NAME}

Verfasst: 11.08.2004 18:57
von Ector
hab ich schon gibt's beides nicht

Verfasst: 11.08.2004 19:02
von Andy120
Ist zwischen der 12 und 16 Linie...

Stell mal deine viewtopic_body.tpl als Download bereit bitte...

Verfasst: 11.08.2004 19:08
von Ector
Download

[/url]

Verfasst: 11.08.2004 19:13
von Andy120
Versuche mal so:

Suche:

Code: Alles auswählen

<!-- END bookmark_state -->
Danach einfügen:

Code: Alles auswählen

  <tr> 
   <td colspan="2"><span class="gen"><a href="{U_BEDANKOMAT}" class="nav">{L_BEDANKOMAT}</a></span></td> 
  </tr> 

Verfasst: 11.08.2004 19:23
von Ector
klappt nicht!

jetzt kommt bei jedem post den ich angucken will oder erstelle " Das gewählte Thema oder der Beitrag existiert nicht."

Verfasst: 11.08.2004 19:36
von Markus67
Hi ...

ich würde vorschlagen du versuchst es mal im Support Forum vom phpbb Plus die können da eher helfen :wink:

Markus

Verfasst: 17.02.2005 21:24
von Marschel
Was bedeutet für mich in diesem Falle...

Code: Alles auswählen

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;

:o

Danke! :grin:

Verfasst: 17.02.2005 21:36
von Markus67
Hi ...

Hast du KB:phpmyadmin zur Verfügung ?

Falls ja öffne mit phpMyAdmin die Datenbank ...
Auf der rechten Seite gibt es einen "Reiter" SQL ...
Den klickst du an ... und in das große Eingabefenster kopierst du ...

Code: 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;
Auf OK ... fertig .. die Tabelle wurde angelegt.

Markus