static function mod_pg($pg) { $p = plugins::getinst(); $user = $p->d->getrow('SELECT * FROM users WHERE name="' . $pg . '";'); if ($user->account_id == $_SESSION['datiaccount']['id']) { $t = new template('template/mod_pg.tpl'); $t->assign_var('PG_NAME', $pg); if ($_POST) { $query = 'UPDATE users SET description="' . $_POST['desc'] . '",image="' . $_POST['image'] . '" WHERE name="' . $pg . '";'; $upd = $p->d->query($query); if (!$upd) { $t->start_block('mod_failed'); $t->end_block('mod_failed'); } else { $t->start_block('mod_success'); $t->end_block('mod_success'); } } else { $t->start_block('mod_failed'); $t->end_block('mod_failed'); } $p->action('mod_pg'); $t->out(); } }
static function mp_list_arrived($page = 1) { global $t; $p = plugins::getinst(); $msg_for_page = 10; $limit = ($page - 1) * $msg_for_page; $t = new template('template/mp_list.tpl'); $msgs = $p->d->getresults('SELECT * FROM messaggi WHERE dest="' . $_SESSION['datiuser']['id'] . '" ORDER BY id DESC LIMIT ' . $limit . ',' . $msg_for_page . ';'); if ($msgs) { $t->start_block('if_messages'); foreach ($msgs as $msg) { $t->start_block('messaggio'); $t->assign_block_vars(array('TIME' => $msg->time, 'TO' => $_SESSION['datiuser']['name'], 'FROM' => $p->d->getvar('SELECT name FROM users WHERE id="' . $msg->mittente . '";'), 'ID' => $msg->id)); $t->end_block('messaggio'); } $t->end_block('if_messages'); $num_mess = $p->d->getvar('SELECT COUNT(`id`) FROM messaggi WHERE dest="' . $_SESSION['datiuser']['id'] . '";'); for ($i = 1; $i <= $num_mess / $msg_for_page + 1; $i++) { $t->to_comp['if_pages'][0]['link_page'][] = array('TYPE' => 'arrived', 'PAGE' => $i); } } else { $t->to_comp['if_not_messages'][] = array(); } $p->action('mp_list_arrived'); @$t->out(); }
static function get_chat($last_time = NULL) { $p = plugins::getinst(); $t = new template('template/chat_messages.tpl'); $chat_id = $_SESSION['stanza']; $query = 'SELECT * FROM messaggi_chat WHERE time > "' . $last_time . '" AND chat_id="' . $chat_id . '" ORDER BY time DESC;'; if (empty($last_time)) { $query = 'SELECT * FROM messaggi_chat WHERE time > ' . (time() * 1000 - 30 * 60 * 1000) . ' AND chat_id="' . $chat_id . '" ORDER BY time DESC;'; } $messages = $p->d->getresults($query); if ($messages) { foreach ($messages as $mess) { $time = date('H:i', $mess->time / 1000); $t->start_block('message'); $message = array('HOUR' => $time, 'USERNAME' => $mess->user, 'TEXT' => stripslashes($mess->text)); switch ($mess->text[0]) { //in base al primo carattere del messaggio //se è un + il messaggio è in terza persona case '+': $t->start_block('third_person'); $message['TEXT'] = substr($message['TEXT'], 1); $t->assign_block_vars($message); //assegno l'array message preparato prima $t->end_block('third_person'); break; //se è * è del master, ma controllo che chi l'ha scritto sia realmente un master prima //se è * è del master, ma controllo che chi l'ha scritto sia realmente un master prima case '*': $master = $p->d->getvar('SELECT master FROM accounts WHERE id=(SELECT account_id FROM users WHERE name="' . $mess->user . '");'); if ($master == 1) { $t->start_block('master'); $message['TEXT'] = substr($message['TEXT'], 1); $t->assign_block_vars($message); //assegno l'array message preparato prima $t->end_block('master'); } else { $t->to_comp['message'][]['normal'][] = $message; } break; //altrimenti è un messaggio normale //altrimenti è un messaggio normale default: $t->start_block('normal'); $t->assign_block_vars($message); //assegno l'array message preparato prima $t->end_block('normal'); break; } $t->end_block('message'); } } //$p->action('chat_body'); @$t->out(); }
static function chat_mod($id = 0) { global $t; $p = plugins::getinst(); $t = new template('template/chat_mod.tpl'); //controllo che l'utente sia admin $access = control_access(ADMIN_ACCESS); if (!$access) { $t->block_null('not_admin'); $t->out(); exit; } //faccio un update della stanza in base ai dati che mi sono arrivati $query = 'UPDATE stanze SET name="' . mysql_real_escape_string(htmlspecialchars($_POST['name'])) . '",image="' . mysql_real_escape_string(htmlspecialchars($_POST['img'])) . '",description="' . mysql_real_escape_string(htmlspecialchars($_POST['desc'])) . '" WHERE id="' . mysql_real_escape_string($id) . '";'; //Apro il blocco $t->start_block('is_admin'); //faccio la query e controllo l'esito $upd = $p->d->query($query); if (!$upd) { $t->block_null('mod_failed'); } else { $t->block_null('mod_success'); } //Chiudo il blocco $t->end_block('is_admin'); //Eseguo l'azione "chat_mod" $p->action('chat_mod'); $t->out(); }
static function news_list() { $p = plugins::getinst(); $t = new template('template/news_list.tpl'); $messages = $p->d->getresults('SELECT * FROM news ORDER BY id DESC;'); foreach ($messages as $news) { $t->start_block('news_row'); $t->assign_block_vars(array('AUTHOR' => $news->author, 'DATE' => $news->date, 'TEXT' => stripslashes($news->text))); $t->end_block('news_row'); } $t->out(); }
static function register_action() { global $p; $t = new template('template/register.tpl'); //inizializzo il template if ($_POST) { //controllo e modifico le stringhe passate per evitare bugs $email = mysql_real_escape_string(htmlspecialchars($_POST['email'])); $username = mysql_real_escape_string(htmlspecialchars($_POST['username'])); //$surname=mysql_real_escape_string(htmlspecialchars($_POST['surname'])); $password = md5($_POST['password']); //$race_id=$_POST['race']; //$sex=$_POST['sex']; //controllo se l'email dell'utente esiste già, per evitare i doppi if ($p->d->getvar('SELECT COUNT(id) FROM accounts WHERE email="' . $email . '" OR username="******";') > 0) { $t->start_block('register_failed'); $t->end_block('register_failed'); $p->action('register_failed'); } else { //$query='INSERT INTO users SET name="'.$username.'",surname="'.$surname.'",password="******",email="'.$email.'",sex="'.$sex.'",race="'.$race_id.'";'; $query = 'INSERT INTO accounts SET username="******",password="******",email="' . $email . '",last_change_pwd=NOW() ;'; $result = $p->d->query($query); if ($result == 1) { $t->start_block('register_success'); $t->assign_block_var('USERNAME', $username); $t->end_block('register_success'); } else { $t->start_block('register_failed'); $t->end_block('register_failed'); } } } else { $t->start_block('register_failed'); $t->end_block('register_failed'); } $t->out(); }
function online() { $p = plugins::getinst(); $t = new template('template/online.tpl'); //seleziono distintamente le stanze dove si trovano i pg $stanze = $p->d->getresults('SELECT DISTINCT chat_name,chat_id FROM sessioni GROUP BY chat_id ASC;'); //per ogni stanza aggiungo al template i pg presenti for ($i = 0; $i < count($stanze); $i++) { $chat = $stanze[$i]; $t->start_block('online_chat'); $t->assign_block_vars(array('CHAT_ID' => $chat->chat_id, 'CHAT_NAME' => $chat->chat_name)); $users = $p->d->getcol('SELECT pg_id FROM sessioni WHERE chat_id="' . $chat->chat_id . '";'); foreach ($users as $user) { $username = $p->d->getvar('SELECT name FROM users WHERE id="' . $user . '";'); $t->start_block('online_row'); $t->assign_block_var('USERNAME', $username); $t->end_block('online_row'); } $t->end_block('online_chat'); } @$t->out(); }
static function account_switch($action = '') { /* prendo l'istanza della classe plugin dal singleton | Call Singleton Plugin */ $p = plugins::getinst(); /* prendo l'id dell'account | gain account id * TODO Fix filtraggio input */ $account_id = $_SESSION['datiaccount']['id']; $t = new template('template/account_switch.tpl'); /* se si vuole usare un utente | "Use a User Profile" Action */ if ($action == 'use_user') { /* vedo se esiste l'utente selezionato e se è dell'account che lo ha selezionato | Check existance and proprietary account on selected one * TODO Fix filtraggio input */ $cond = $p->d->getrow('SELECT COUNT(id) AS count, account_id FROM users WHERE id="' . mysql_real_escape_string($_POST['pg_id']) . '" GROUP BY id;'); /* se supera l'if metto nella sessione i dati del pg separati da quelli dell'account, cambio pg_id nella tabella sessioni e mando l'utente alla pagina main | * save usre data out of account data, update pg_id in session table, redirect to main page */ if ($cond->count > 0 && $cond->account_id == $_SESSION['datiaccount']['id']) { $_SESSION['datiuser'] = get_object_vars($p->d->getrow('SELECT * FROM users WHERE id="' . $_POST['pg_id'] . '";')); $updsess = $p->d->query('UPDATE sessioni SET pg_id="' . $_POST['pg_id'] . '" WHERE session_id="' . session_id() . '";'); header('Location:' . config::game_dir . '/plugins.php/main'); /* command to redirect */ } } /* se si vuole cambiare la password | Change Password OF FULL ACCOUNT */ if ($action == 'change_pwd') { /* cripto in md5 quella nuova | md5 encript * TODO Fix filtraggio input */ $password = md5(mysql_real_escape_string($_POST['password'])); /* faccio l'update della password sul db | update query */ $query = 'UPDATE accounts SET password="******",last_change_pwd=NOW() WHERE id="' . $account_id . '";'; if ($p->d->query($query) > 0) { $t->block_null('new_password_success'); } else { $t->block_null('new_password_failed'); } } /* se si vuole creare un nuovo utente | New User */ if ($action == 'new_user') { /* prendo tutti i dati passati in POST e li passo a mysql_real_escape_string e htmlentities per evitare XSS e SQL injections | Input filtering * TODO Fix filtraggio input */ $name = mysql_real_escape_string(htmlentities($_POST['name'])); $surname = mysql_real_escape_string(htmlentities($_POST['surname'])); $sex = mysql_real_escape_string(htmlentities($_POST['sex'])); $race = mysql_real_escape_string(htmlentities($_POST['race'])); /* vedo se sono stati riempiti tutti i campi | no empty fields */ if ($name == NULL || ($surname = NULL || $sex == NULL || $race == NULL)) { die('Non hai riempito tutti i campi <br/> <a href="javascript:history.back();">torna indietro</a>'); } /* java function to reload form */ /* controllo che il personaggio non esista già | Check in DB for duplicate entries */ if ($p->d->getvar('SELECT COUNT(id) as count FROM users WHERE name="' . $name . '";') > 0) { die('Il personaggio che vuoi creare esiste già! <br/> <a href="javascript:history.back();">torna indietro</a>'); } /* vedo se l'utente ha già raggiunto il massimo di pg consentiti (settati nel config) | check for max number of users in account */ if ($p->d->getvar('SELECT COUNT(*) FROM users WHERE account_id="' . $account_id . '";') < config::max_pg) { /* creo il pg e lo collego all'account che lo ha creato | add user in db and link it to account */ $query = 'INSERT INTO users SET account_id="' . $account_id . '",name="' . $name . '",surname="' . $surname . '",sex="' . $sex . '",race="' . $race . '";'; $p->d->query($query); /* faccio un refresh della pagina, per evitare che lo faccia manualmente l'utente creando un'altro utente vuoto | force a refresh so no duplicate entries for hand-made refreshes */ header('Location:' . config::game_dir . '/plugins.php/account_switch'); } else { echo 'Hai raggiunto il numero massimo di personaggi consentiti... <br/> <a href="javascript:history.back();">torna indietro</a>'; } /* | if already has all slot full display a warning and rollback */ } /* assegno l'account id e il path di questa pagina al template | view init: assign account id and path to template */ $t->assign_var('ID', $account_id); $t->assign_var('ACTION', config::game_dir . '/plugins.php/account_switch'); /* | Check for last changed password * TODO Fix filtraggio input */ $time_password = $p->d->getvar('SELECT COUNT(id) FROM accounts WHERE id="' . $_SESSION['datiaccount']['id'] . '" AND last_change_pwd < (NOW() - INTERVAL 6 MONTH);'); if ($time_password > 0) { $t->block_null('change_password'); } /* seleziono i pg dell'utente | extract from db account's pc */ $users = $p->d->getresults('SELECT * FROM users WHERE account_id="' . $account_id . '" LIMIT 0,' . config::max_pg . ';'); /* se ce ne sono li aggiungo al template | if any add it to template */ if (count($users) > 0) { foreach ($users as $user) { $t->start_block('user'); $t->assign_block_vars(array('PG_ID' => $user->id, 'PG_NAME' => $user->name, 'PG_SURNAME' => $user->surname, 'PG_IMAGE' => $user->image, 'PG_DESC' => isset($user->description) ? $user->description : 'nessuna descrizione')); $t->end_block('user'); /* assegnazioni per gli editor in-place per le modifiche dei PG | set editor-in-place for PC mod */ $t->block_assign('javascript_inplace_row_surname', 'ID', $user->id); $t->block_assign('javascript_inplace_row_desc', 'ID', $user->id); } } /* se il numero di utenti è minore del numero massimo consentito visualizzo il form di creazione pg | If * number of current pc is less than max allowed per account, show new PC form */ if (count($users) < config::max_pg) { /* | Use config constant to perform check */ $query = 'SELECT * FROM razze WHERE evolution!=1;'; /* TODO implementare uso delle sottorazze e razze avanzate */ $races = $p->d->getresults($query); /* ogni razza a cui sia possibile aggiungere il pg è aggiunta nel template | add any pc's allowed race to template */ $t->start_block('new_user_form'); foreach ($races as $race) { $t->block_assign('race_row', array('RACE_ID' => $race->id, 'RACE_NAME' => $race->name)); } $t->end_block('new_user_form'); } // endif $t->out(); }
static function edit_post($forum_id = 0, $id = 0) { $p = plugins::getinst(); if ($id != 0) { $t = new template('template/forum_message.tpl'); $t->assign_var('FORUM_ID', $forum_id); //controllo se la bacheca è riservata al master e in caso controllo che l'utente lo sia if ($p->d->getvar('SELECT master FROM forums WHERE id="' . $forum_id . '";') == 1 && control_access(MASTER_ACCESS) != 1) { $t->start_block('access_denied'); $t->end_block('access_denied'); } else { $post = $p->d->getrow('SELECT * FROM posts WHERE id="' . $id . '"'); if (!$_POST) { $t->start_block('message_form'); if ($post->title != NULL && $post->topic_id == 0) { $t->block_assign('is_topic', 'TOPIC_TITLE', $post->title); } $t->assign_block_var('TEXT', $post->text); $t->assign_block_var('SUBMIT_TEXT', 'modifica messaggio'); $t->assign_block_var('ACTION', '{ROOT}/plugins.php/edit_post/' . $forum_id . '/' . $id); $t->end_block('message_form'); } else { if (isset($_POST['title'])) { $title = mysql_real_escape_string(htmlentities($_POST['title'])); } else { $title = $post->title; } $text = $p->filter('topic_message_edited', mysql_real_escape_string(htmlentities($_POST['text']))); $query = 'UPDATE posts SET title="' . $title . '",text="' . $text . '" WHERE id="' . $id . '"'; $res = $p->d->query($query); if ($res > 0) { $t->block_assign('success', 'TEXT_SUCCESS', 'Messaggio modificato!'); } else { $t->block_assign('failed', 'TEXT_FAILED', 'Messaggio NON modificato: ' . mysql_error()); } } } $t->out(); } }
static function logout() { $p = plugins::getinst(); $t = new template('template/logout.tpl'); //Elimino l'utente dalle sessioni $query = 'DELETE FROM sessioni WHERE session_id="' . session_id() . '";'; $p->d->query($query); //Elimino le variabili di sessione resettando $_SESSION $_SESSION = array(); $t->start_block('logout'); //Eseguo l'azione "logout" $p->action('logout'); $t->end_block('logout'); $t->out(); }