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"> </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);
?>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']);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-ifdiese 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.