Smilies ins Smilie-Album integrieren

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Smilies ins Smilie-Album integrieren

Beitrag von bce »

hallo.
da ich sehr viele (mehr oder weniger schöne) smilies am laufen habe, dachte ich mir die smilies im smilie-album-mod zu integrieren und von den foren-nutzern bewerten zu lasssen. die schlechten fliegen dann mal raus.

standard ist das smilie-album nicht an die im forum vorhandenen smilies gebunden.
dies hab ich mal geändert.
hab da ein skript geschrieben, dass aus der datenbank den speciherort für die smilies ausliest. (meistens: images/smilies).
danach wird dieser speicherort auf dem server nach smilies durchsucht. die gefundenen smilies (gif oder jpg) werden in die smiliealbum-tabelle hinzugefügt. (dafür wird der höchste index ermittelt und dann ab dem nächsten eingefügt.)
wenn man jetzt das smilie-album aufruft, sieht man alle vorhandenen smilies im album und kann sie bewerten.

Code: Alles auswählen

<?php
/***************************************************************************
 *                               smilies_to_album.php
 *                            -------------------
 *  Addon für den Smilie-Album-Mod
 *   copyright            : ©2004 by marcus@bcerlbach.de 10/04
 *   Website              : www.bcerlbach.de
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//


if( !$userdata['session_logged_in'] )
{
	$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
	header($header_location . append_sid("login.$phpEx?redirect=db_update.$phpEx", true));
	exit;
}

if( $userdata['user_level'] != ADMIN )
{
	message_die(GENERAL_MESSAGE, 'You are not authorised to access this page');
}


$page_title = 'Updating the database';
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

// ermitteln des smilie-pfades aus der datenbank
$sql = "SELECT *
  FROM ". CONFIG_TABLE " 
  WHERE config_name = 'smilies_path'"; 

if( !$result = $db->sql_query($sql) )
	{ 
 	message_die(GENERAL_ERROR, 'Kann Smilie-Pfad nicht auslesen', '', __LINE__, __FILE__, $sql); 
	} 
	$pfad = $db->sql_fetchrow($result);
	if( empty($pfad) )
		{
		message_die(GENERAL_ERROR, "Smilie-Pfad konnte nicht ermittelt werden");
		}
		$config_name = $pfad['config_name'];
		$config_value = $pfad['config_value'];

	$smiliepfad_db = $config_value;

//aktuellen pfad bestimmen
$aktuell=getcwd();

//pfad zur smilies einstellen
echo $dir = $aktuell . "/" . $smiliepfad_db;

$i=0;
$max_id = 0;



// max. id ermitteln	
	$sql = "SELECT max(`pic_id`) 
			FROM `phpbb_smilies_page`"; 
	if( !$result = $db->sql_query($sql) ) 
		{ 
   		message_die(GENERAL_ERROR, 'Kann max id nicht auslesen', '', __LINE__, __FILE__, $sql); 
		} 
	$max_id = $db->sql_fetchrow($result); 
	$max_id = $max_id['max(`pic_id`)'];
//ende max. id ermitteln

//aktuelles datum ermitteln
	$jetzt =time();					

$sql = array();

//---------------------------------
// alle smilies aus ordner auslesen
if (is_dir($dir)) {
    if ($dh = opendir($dir))
    {
    while (($file = readdir($dh)) !== false)
    {
        $dateinamenlaenge = strlen($file);
        if ($file != "" && $file != "" && (substr($file, $dateinamenlaenge-3, $dateinamenlaenge) == "jpg" || substr($file, $dateinamenlaenge-3, $dateinamenlaenge) == "gif"))

          if ($dateiname != "") 
		  	 {
 			 $dateiname = substr($file, 0, $dateinamenlaenge);    
 			 
			  ++$i . "<br> -" . $filename = "././" .$smiliepfad_db "/" .$dateiname;
 			 
 			 //zeit um jeweils eine sekunde erhöhen, zwecks sortierung
 			 $jetzt++;
			
			 $id = $max_id + $i;
 			 
			  $sql[] = "INSERT INTO " . $table_prefix . "smilies_page (pic_id, pic_user_id,pic_username,pic_time,pic_filename) VALUES ($id, '1','marcus',$jetzt,'$filename')";
 			 
			 }// end-if
      }
    closedir($dh);
    }
}

echo "<br>Anzahl Smilies: $i<br>";
//ende smilies auslesen



echo '<table width="100%" cellspacing="1" cellpadding="2" border="0" class="forumline">';
echo '<tr><th>Updating the database</th></tr><tr><td><span class="genmed"><ul type="circle">';


for( $i = 0; $i < count($sql); $i++ )
{
	if( !$result = $db->sql_query ($sql[$i]) )
	{
		$error = $db->sql_error();

		echo '<li>' . $sql[$i] . '<br /> +++ <font color="#FF0000"><b>Error:</b></font> ' . $error['message'] . '</li><br />';
	}
	else
	{
		echo '<li>' . $sql[$i] . '<br /> +++ <font color="#00AA00"><b>Successfull</b></font></li><br />';
	}
}


echo '</ul></span></td></tr><tr><td class="catBottom" height="28">&nbsp;</td></tr>';

echo '<tr><th>End</th></tr><tr><td><span class="genmed">Installation is now finished. Please be sure to delete this file now.<br />If you have run into any errors, please visit the <a href="http://www.phpbbsupport.co.uk" target="_phpbbsupport">phpBBSupport.co.uk</a> and ask someone for help.</span></td></tr>';
echo '<tr><td class="catBottom" height="28" align="center"><span class="genmed"><a href="' . append_sid("index.$phpEx") . '">Have a nice day</a></span></td></table>';

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
will man nun ein smilie löschen, so wird es nicht nur aus der datenbank gelöscht, sondern auch vom server. :eek:
schaut man sich jetzt die smilie-list an (nich smilie-album) so ist der eintrag noch vorhanden, aber das smilie ist nicht mehr auf dem server. also muss der db-eintrag für das entsprechende smilie beim löschen entfernt werden. die macht eine kleine änderung in der smilies_delete.php
ca. zeile 144

Code: Alles auswählen

@unlink(SMILIES_UPLOAD_PATH . $thispic['pic_filename']);
darunter folgendes einfügen:

Code: Alles auswählen

	if (strpos ($thispic['pic_filename'], "") == 0)
		{ 
		// smilie muss auch aus phpbb_smilies gelöscht werden     
		
		$laenge = strlen($thispic['pic_filename']) - strrpos($thispic['pic_filename'], "/");
	   
		$datei = substr($thispic['pic_filename'], strrpos($thispic['pic_filename'], "/")+1, $laenge);
		
		 $sql = " DELETE FROM ". SMILIES_TABLE " WHERE smile_url = '$datei'";
		 
		if( !$result = $db->sql_query($sql) )
			{
			message_die(GENERAL_ERROR, 'Could not delete DB entry', '', __LINE__, __FILE__, $sql);
			}
	
		}// end-if
somit sind bereits vorhandenen smilies mit dem smilie-album verbunden. :cool:

diese addon für einen mod funktioniert bei mir ohne probleme.

falls ich bei der deklaration und nutzung von variablen fehler gemacht habe, würde ich gerne darüber informiert werden. danke.
bei fragen stehe ich gerne zur verfügung.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Gute Sache das.
Aber:
Was jetzt noch geschickt wäre, ist eine Anpassung der Smilie-Verwaltung im ACP, die neue Smilies automatisch in das Album einträgt und zu löschende Smilies auch aus dem Album entfernt.
Also nicht der Weg vom Album aus, sondern vom ACP aus.

Kannst es ja mal versuchen ;)

Das Add-On werde ich jedenfalls mal ausprobieren und wenn es fehlerfrei ist, auch als Add-On anbieten (natürlich unter Deinem Namen!).
Dafür schon einmal ein dickes DANKESCHÖN!

EDIT & PS:
Ich sehe schon, daß Du vieles in dem Script abfragst, was bereits vorhanden ist und auch einiges fest verdrahtet hast, was man ebenfalls in Variablen zur Verfügung hat.
Wenn ich das Add-On erstelle, werde ich das "Install-Script" dann entsprechend anpassen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Beitrag von bce »

find ich ja prima das es soweit gefällt :)

werde es mal mit versuchen. aber im acp hab ich noch nichts programmiert bzw. geändert. aber ich werde es versuchen.
(nicht heute und morgen, da wir am wochenende kirmes haben. da werden wieder einige gehirnzellen vernichtet. hoffe nicht die wo phpbb drin ist ;) )

unter meinem namen, das ehrt mich.

zu edit & ps:
habe ja nicht viel ahnung daher hab ich mir mein zeug zusammengebastelt. wußte nicht was schon vorhanden und verdrahtet ist und was in variablen schon zur verfügung steht.

freue mich schon auf das angepasste install-script. werds dann gleich mal vergleichen um zu sehen was man anders machen kann ;)
gruß und thx
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Jo, hoffe mit, daß die phpBB-Zellen aktiv bleiben ;)
Viel Spaß bei der Kirmes.
Und auch ich werde dieses WE mal wieder etwas kürzer treten, was das Board und die Mods betrifft.
Aber vielleicht schaffe ich ja noch was an Deinem Script. Ansonsten nächsten Woche, dann haben ich Urlaub :cool: :D

EDIT
Hier das gesamte Add-On inklusive der Verzahlung mit der Smilie-Verwaltung im ACP.
Nach Installation des Add-Ons und dem einmaligen Aufruf des Update-Scripts, wirken sich Änderungen auf der einen Seite immer auch auf der anderen Seite aus.
So werden Änderungen, neue Smilies und Smilie-Löschungen im ACP auch im Album durchgeführt und Smilies, die im Album gelöscht werden, verschwinden auch komplett aus dem ACP und aus dem Ordner images/smilies/!
Daher sollten Smilies, deren Image-File man behalten möchte, immer nur aus dem ACP gelöscht werden.
Ebenso können Smilie-Pakete importiert werden, die anschliessend auch komplett im Album zur Verfügung stehen.

Achtung! Dieses Add-On ermöglichst nicht den Zugriff auf die Smilies aus dem Album für z.B. das Posten! Smilies, die vor der Installation des Add-Ons im Album bereits existierten bleiben weiterhin nur im Album verfügbar!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
CitLemBiK
Beiträge: 21
Registriert: So 02.Sep, 2007 06:27
Wohnort: Paderborn
Kontaktdaten:

Beitrag von CitLemBiK »

Hi danke hat mir richtig geholfen diese fix...

Mfg...
Benutzeravatar
CitLemBiK
Beiträge: 21
Registriert: So 02.Sep, 2007 06:27
Wohnort: Paderborn
Kontaktdaten:

Beitrag von CitLemBiK »

[quote="CitLemBiK";p="76663"]Hi danke hat mir richtig geholfen diese fix...

Mfg...[/quote]

edit : Funktioniert aber ich habe eine bitte , wenn ich ein neues smilies von ACP finzufüge , zeigt diese smiley auch bei smiles album bis hier alles normal...

Aber kann mal vorher existiertes smileys auch zu smiley album hinzufugen?
Zumbespiel ich habe über 150 smiley im mein ACP , kann mann diese 150 smiley auch zu smiley album hinzugen????

Ich hoffe sie haben verstanden was ich sagen wil..

Sorry für mein deutsch... (bisshen schlecht ne)

Warte ihre antworte...

MFG
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn Du die editierst, werden die eigentlich nachträglich auch noch eingefügt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
CitLemBiK
Beiträge: 21
Registriert: So 02.Sep, 2007 06:27
Wohnort: Paderborn
Kontaktdaten:

Beitrag von CitLemBiK »

Mit php code habe ich eigentlich gar keine ahnung :!:
Ich kann nur mods intallieren und themes bearbaiten :!:


Muss ich vielleicht dieser hier ändern?

Code: Alles auswählen

echo "<br>Anzahl Smilies: $i<br>"; 
//ende smilies auslesen 
Oderr... ? :!:
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

???
Ich meinte die Smilies im Admin Panel zu bearbeiten.
Also einmal aufrufen und speichern.
Das sollte sie im Album einfügen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
drkmnn666
Beiträge: 388
Registriert: Mi 23.Jan, 2008 17:29

Beitrag von drkmnn666 »

funktioniert perfekt... danke
Antworten