/**
* @desc This file is used for adminsitration of long database texts
* @author Dragonslayer for atrahor.de/lotgd.drachenserver.de
* @longdesc Install the following two functions anywhere in your global function repository
*/
///**
// * Get an extended string from the database
// *
// * @param string $str_text_id contains the id of the text
// * @param string $str_category contains the optional category, set to "*" to search in any category
// * @param bool $bool_get_as_array Set true to receive an array, else receive just the text
// * @return mixed - array or string (false if an error ocurred)
// */
//function get_extended_text($str_text_id = false,$str_category = '*',$bool_get_as_array = false)
//{
// global $session;
// if($str_text_id == false || empty($str_text_id))
// {
// return '';
// }
// if($str_category == false || is_null($str_category) || empty($str_category))
// {
// $str_category = 'standard';
// }
//
// //Sanitize
// $str_text_id = addslashes(stripslashes($str_text_id));
// $str_category = addslashes(stripslashes($str_category));
//
// $str_sql_get_text = 'SELECT id,text,category FROM extended_text WHERE id="'.$str_text_id.'"';
// if($str_category != '*')
// {
// $str_sql_get_text.= ' AND category = "'.$str_category.'"';
// }
//
// $db_result = db_query($str_sql_get_text);
// if(db_num_rows($db_result)==0)
// {
// return '';
// }
// $arr_return_text = db_fetch_assoc($db_result);
//
// $arr_return_text['text'] = stripslashes($arr_return_text['text']);
//
// //Replacing all PHP Sourcecode
// $str_temp_text = $arr_return_text['text'];
// preg_match_all('/{{(.*)}}/sU',$str_temp_text,$arr_matches,PREG_SET_ORDER);
// foreach($arr_matches as $arr_match)
// {
// $arr_match[1] = eval($arr_match[1]);
// $str_temp_text = str_replace($arr_match[0],$arr_match[1],$str_temp_text);
// }
//
// if(access_control::is_superuser() && $bool_get_as_array == false)
// {
// $str_link = 'su_extended_text.php?op=edit&id='.$arr_return_text['id'];
// addnav('',$str_link);
// $str_html_edit = '[ Ändern ]
';
// $str_temp_text = $str_html_edit.$str_temp_text;
// }
//
// if($bool_get_as_array == true)
// {
// return $arr_return_text;
// }
// else
// {
// return $str_temp_text;
// }
//}
//
///**
// * Write an extended text to the database
// *
// * @param string $str_text_id contains the id of the text
// * @param string $str_text contains the text
// * @param strin $str_category contains the optional category
// * @return bool
// */
//function set_extended_text($str_text_id = false,$str_text = false, $str_category = 'standard')
//{
// if($str_text_id == false || empty($str_text_id) || $str_text == false || empty($str_text))
// {
// return false;
// }
// if($str_category == false || is_null($str_category) || empty($str_category))
// {
// $str_category = 'standard';
// }
//
// //Sanitize
// $str_text_id = addslashes(stripslashes($str_text_id));
// $str_text = addslashes(stripslashes($str_text));
// $str_category = addslashes(stripslashes($str_category));
//
// $result = get_extended_text($str_text_id,'*');
// $str_sql_get_text = '';
// if($result != '')
// {
// $str_sql_get_text = 'UPDATE extended_text SET text="'.$str_text.'",category="'.$str_category.'" WHERE id="'.$str_text_id.'"';
// }
// else
// {
// $str_sql_get_text = 'INSERT INTO extended_text (id,text,category) VALUES("'.$str_text_id.'","'.$str_text.'","'.$str_category.'")';
// }
// $db_result = db_query($str_sql_get_text);
// return ($db_result==false)?false:true;
//}
$str_filename = basename(__FILE__);
include_once('common.php');
$access_control->su_check(access_control::SU_RIGHT_EDITOREXTTXT,true);
page_header('Extended Texts Administrieren');
output('`c`bExtended Texts Administrieren`b`c`n`n');
addnav('Mod Optionen');
grotto_nav();
if(getsetting('su_extended_text_installed',false)==true)
{
addnav('Liste der Texte',$str_filename.'?op=list');
addnav('Text hinzufügen',$str_filename.'?op=edit&action=new');
}
if($access_control->su_check(access_control::SU_RIGHT_DEV))
{
addnav('Superuser Optionen');
if(getsetting('su_extended_text_installed',false)==false)
{
addnav('Installieren',$str_filename.'?op=install',false,false,false,true,'Möchtest du den Editor wirklich installieren?');
}
else
{
addnav('Entfernen (komplett)',$str_filename.'?op=uninstall',false,false,false,false,'Möchtest du den Editor wirklich komplett entfernen?');
}
}
if(!empty($session['message'])) {
output('`n`b'.$session['message'].'`b`n`n');
$session['message'] = '';
}
global $output;
switch ($_GET['op'])
{
case 'install':
{
$str_sql_install = '
CREATE TABLE IF NOT EXISTS `extended_text` (
`id` CHAR( 255 ) NOT NULL ,
`text` TEXT NOT NULL ,
`category` CHAR( 255 ) DEFAULT "standard" NOT NULL ,
PRIMARY KEY ( `id` ) ,
INDEX ( `category` )
) TYPE = MYISAM COMMENT = "Saves some long texts in the database";
';
$db_result = db_query($str_sql_install);
if($db_result != false)
{
savesetting('su_extended_text_installed',true);
}
$str_demo_text = <<< END
"`c`bAnleitung`b`c`n`n\r\n`^\r\nExtended Text soll dazu verwendet werden lange Texte aus den Dateien in die Datenbank auszulagern, um sie dadurch schneller mal ändern zu können.`nPrädestiniert hierfür sind z.B. die Regeln/F.A.Q. die GPL usw.`n`n\r\n`bVerwendung`b`n\r\nJeder Text muss eine eindeutige ID erhalten, damit diese in der Datenbank schnell gefundenn werden kann. Es dürfen dabei keine Zeichen außer Buchstaben, Ziffern, Binde- und Unterstrich verwendet werden (für die Progger: es wird der reguläre Ausdruck [^w-_] angewendet).`n\r\nDer Text darf frei nach Schnauze editiert werden und darf sowohl bekannte `^L`2O`3T`4G`5D`^ Tags ``1 usw. aber auch HTML Tags enthalten.`n`n\r\n`n\r\n`bVerwendung von PHP Code (Für Progger)`b`n\r\nEs ist möglich PHP Quelltext, Variablen o.ä. innerhalb der Texte zu verwenden. Alles was sich zwischen den Zeichen { { und } } befindet wird als PHP Code interpretiert und evaluiert! Dabei gelten die für evaluierten Code gültigen Regeln:\r\n`n1. Der Quellcode muss eine gültige Syntax haben, es müssen auch Semikolon gesetzt werden.\r\n`n2. Evaluierter Code verhält sich wie eine Funktion, alle Variablen müssen ggf. mit \"global\" eingebunden werden.\r\n`n3. Evaluierter Code muss einen returnwert haben, der weiterverarbeitet werden kann`n`n\r\n`bBeispiel:`b`n\r\n{ { return \$session[\'user\'][\'login\']; } } ergibt => `2NICHTS`^`n\r\nWarum? Die Variable \$session existiert nicht im aktuelen Scope, sie muss erst eingebunden werden`n\r\n{ { global \$session; return \$session[\'user\'][\'login\']; } } ergibt => \r\n`2{{\r\nglobal \$session;\r\nreturn \$session[\'user\'][\'login\'];\r\n}}`^`n`n\r\n\r\n`bVerwendung im Code`b`nDer Code enthält zwei Funktionen:`n`n\r\n`2\r\n/**`n\r\n * Get an extended string from the database`n\r\n * @param string \$str_text_id contains the id of the text`n\r\n * @param string \$str_category contains the optional category, set to \"*\" to search in any category`n\r\n * @param bool \$bool_get_as_array Set true to receive an array, else receive just the text`n\r\n * @return mixed - array or string (false if an error ocurred)`n\r\n */\r\n`n`3function get_extended_text(\$str_text_id = false,\$str_category = \'standard\',\$bool_get_as_array = false)`n`n\r\n\r\n`2/**`n\r\n * Write an extended text to the database`n\r\n * @param string \$str_text_id contains the id of the text`n\r\n * @param string \$str_text contains the text`n\r\n * @param string \$str_category contains the optional category`n\r\n * @return bool`n\r\n */\r\n`n`3function set_extended_text(\$str_text_id = false,\$str_text = false, \$str_category = \'standard\')`n`^\r\n`nDiese Funktionen können dann in jeder Datei verwendet werden, um einen entsprechenden Text aus der DB abzurufen!`n`n\r\nViel Spass damit `nDragonslayer"
END;
set_extended_text('su_extended_text_manual',$str_demo_text,'standard');
redirect($str_filename.'?op=list');
}
break;
case 'uninstall':
{
if($_GET['confirm']==false)
{
$output .= '
Sollen tatsächlich alle Einträge, die Tabelle und die Settingseinträge gelöscht werden?
';
addnav('Entfernen?');
addnav('Nein, doch nicht',$str_filename.'?op=list');
addnav('Ja, alles entfernen',$str_filename.'?op=uninstall&confirm=true');
break;
}
$str_sql_uninstall = 'DROP TABLE IF EXISTS extended_text';
$db_result = db_query($str_sql_uninstall);
$str_sql_uninstall_setting = 'DELETE FROM settings WHERE setting="su_extended_text_installed"';
$db_result_setting = db_query($str_sql_uninstall_setting);
if($db_result != false)
{
redirect($str_filename.'?op=list');
}
else
{
$output .= 'Die Tabelle konnte nicht gelöscht werden oder existiert noch gar nicht';
}
}
break;
case 'list':
{
$int_page = (int)$_GET['page'];
$str_category = $_POST['category'];
$str_search = strip_appoencode(stripslashes($_POST['search']),3);
$bool_search_id = isset($_POST['search_id'])?true:false;
$bool_search_text = isset($_POST['search_text'])?true:false;
//Write a list of categories at the top of the list
$str_sql_get_categories = 'SELECT DISTINCT category FROM extended_text ORDER BY category ASC';
$db_result_categories = db_query($str_sql_get_categories);
$str_lnk = $str_filename.'?op=list';
addnav('',$str_lnk);
$output .= '';
//End writing a list of categories to the top of the screen
if(!empty($str_category) && $str_category != '_all_')
{
$str_where .= ' AND category="'.$str_category.'"';
}
if(!empty($str_search)) {
if($bool_search_id)
{
$str_where .= ' AND id LIKE "%'.addslashes($str_search).'%"';
}
if($bool_search_text)
{
$str_where .= ' AND text LIKE "%'.addslashes($str_search).'%"';
}
}
$str_sql_get_texts = 'SELECT id,SUBSTRING(text,1,100) as text,author,category,tags,subcategory FROM extended_text WHERE 1 '.$str_where.' ORDER BY id ASC';
$db_result = db_query($str_sql_get_texts);
if($db_result == false || db_num_rows($db_result)==0)
{
$output .= 'Entweder es gibt noch keine Texte oder die Suchkriterien haben kein Resultat!';
break;
}
while ($arr_result = db_fetch_assoc($db_result))
{
$str_id = $arr_result['id'];
$str_author = (empty($arr_result['author']) ? 'Ohne Autor' : $arr_result['author']);
$str_text = appoencode(closetags(htmlentities(stripslashes($arr_result['text'])),'`c`b`i')).'...
';
$str_category = stripslashes($arr_result['category']);
$str_link_view = 'Ansehen';
$str_link_edit = 'Ändern';
$str_link_delete = 'löschen';
addnav('',$str_filename.'?op=view&id='.$str_id);
addnav('',$str_filename.'?op=edit&id='.$str_id);
addnav('',$str_filename.'?op=delete&id='.$str_id);
$output .= '