<?php /** * Helper class for more site specific functions. * * @author Daan Janssens, mentored by Matthew Lagoe */ class Helpers { /** * workhorse of the website, it loads the template and shows it or returns th html. * it uses smarty to load the $template, but before displaying the template it will pass the $vars to smarty. Also based on your language settings a matching * array of words & sentences for that page will be loaded. In case the $returnHTML parameter is set to true, it will return the html instead of displaying the template. * * @param $template the name of the template(page) that we want to load. * @param $vars an array of variables that should be loaded by smarty before displaying or returning the html. * @param $returnHTML (default=false) if set to true, the html that should have been displayed, will be returned. * @return in case $returnHTML=true, it returns the html of the template being loaded. */ public static function loadTemplate( $template, $vars = array (), $returnHTML = false ) { //error_log(print_r($_GET,true)); //error_log(print_r($_POST,true)); global $AMS_LIB; global $SITEBASE; global $AMS_TRANS; global $INGAME_LAYOUT; global $AMS_CACHEDIR; global $AMS_PLUGINS; // define('SMARTY_SPL_AUTOLOAD',1); require_once $AMS_LIB . '/smarty/libs/Smarty.class.php'; spl_autoload_register( '__autoload' ); $smarty = new Smarty; $smarty -> setCompileDir( $SITEBASE . '/templates_c/' ); $smarty -> setCacheDir( $AMS_CACHEDIR ); $smarty -> setConfigDir( $SITEBASE . '/configs/' ); // turn smarty debugging on/off $smarty -> debugging = false; // caching must be disabled for multi-language support $smarty -> caching = false; $smarty -> cache_lifetime = 300; $smarty->addPluginsDir($AMS_PLUGINS); if (function_exists('apc_cache_info')) { // production //$smarty->caching = true; //$smarty->setCachingType("apc"); //$smarty->compile_check = false; } // needed by smarty. helpers :: create_folders (); global $FORCE_INGAME; // if ingame, then use the ingame templates if ( helpers :: check_if_game_client() or $FORCE_INGAME ) { $smarty -> template_dir = $AMS_LIB . '/ingame_templates/'; $smarty -> setConfigDir( $AMS_LIB . '/configs' ); $variables = parse_ini_file( $AMS_LIB . '/configs/ingame_layout.ini', true ); foreach ( $variables[$INGAME_LAYOUT] as $key => $value ) { $smarty -> assign( $key, $value ); } } else { $smarty -> template_dir = $SITEBASE . '/templates/'; $smarty -> setConfigDir( $SITEBASE . '/configs' ); } foreach ( $vars as $key => $value ) { $smarty -> assign( $key, $value ); } // load page specific variables that are language dependent $variables = Helpers :: handle_language(); if ( $template != 'layout_plugin' ) { foreach ( $variables[$template] as $key => $value ) { $smarty -> assign( $key, $value ); } } // load ams content variables that are language dependent foreach ( $variables['ams_content'] as $key => $value ) { $smarty -> assign( $key, $value ); } //load ams content variables that are language dependent foreach ( $variables['ams_content'] as $key => $value){ $smarty -> assign( $key, $value); } $id = session_id(); $smarty -> assign( "sessionid", $id ); $dbl = new DBLayer("lib"); $statement = $dbl->executeWithoutParams("SELECT * FROM settings"); $rows = $statement->fetchAll(); foreach ($rows as &$value) { $smarty -> assign( $value['Setting'], $value['Value'] ); } // smarty inheritance for loading the matching wrapper layout (with the matching menu bar) if ( isset( $vars['permission'] ) && $vars['permission'] == 3 ) { $inherited = "extends:layout_admin.tpl|"; } else if ( isset( $vars['permission'] ) && $vars['permission'] == 2 ) { $inherited = "extends:layout_mod.tpl|"; } else if ( isset( $vars['permission'] ) && $vars['permission'] == 1 ) { $inherited = "extends:layout_user.tpl|"; } else { $inherited = ""; } // if $returnHTML is set to true, return the html by fetching the template else display the template. if ( $returnHTML == true ) { return $smarty -> fetch( $inherited . $template . '.tpl' ); } else { $smarty -> display( $inherited . $template . '.tpl' ); } } /** * creates the folders that are needed for smarty. * * @todo for the drupal module it might be possible that drupal_mkdir needs to be used instead of mkdir, also this should be in the install.php instead. */ static public function create_folders() { global $AMS_LIB; global $SITEBASE; $arr = array( $AMS_LIB . '/ingame_templates/', $AMS_LIB . '/configs', // $AMS_LIB . '/cache', $SITEBASE . '/cache/', $SITEBASE . '/templates/', $SITEBASE . '/templates_c/', $SITEBASE . '/configs' ); foreach ( $arr as &$value ) { if ( !file_exists( $value ) ) { print( $value ); mkdir( $value ); } } } /** * check if the http request is sent ingame or not. * * @return returns true in case it's sent ingame, else false is returned. */ static public function check_if_game_client() { // if HTTP_USER_AGENT is not set then its ryzom core global $FORCE_INGAME; if ( ( isset( $_SERVER['HTTP_USER_AGENT'] ) && ( strpos( $_SERVER['HTTP_USER_AGENT'], "Ryzom" ) === 0 ) ) || $FORCE_INGAME || ! isset( $_SERVER['HTTP_USER_AGENT'] ) ) { return true; } else { return false; } } /** * Handles the language specific aspect. * The language can be changed by setting the $_GET['Language'] & $_GET['setLang'] together. This will also change the language entry of the user in the db. * Cookies are also being used in case the user isn't logged in. * * @return returns the parsed content of the language .ini file related to the users language setting. */ static public function handle_language() { global $DEFAULT_LANGUAGE; global $AMS_TRANS; // if user wants to change the language if ( isset( $_GET['Language'] ) && isset( $_GET['setLang'] ) ) { // The ingame client sometimes sends full words, derive those! switch ( $_GET['Language'] ) { case "English": $lang = "en"; break; case "French": $lang = "fr"; break; default: $lang = $_GET['Language']; } // if the file exists en the setLang = true if ( file_exists( $AMS_TRANS . '/' . $lang . '.ini' ) && $_GET['setLang'] == "true" ) { // set a cookie & session var and incase logged in write it to the db! setcookie( 'Language', $lang , time() + 60 * 60 * 24 * 30 ); $_SESSION['Language'] = $lang; if ( WebUsers :: isLoggedIn() ) { WebUsers :: setLanguage( $_SESSION['id'], $lang ); } } else { $_SESSION['Language'] = $DEFAULT_LANGUAGE; } } else { // if the session var is not set yet if ( !isset( $_SESSION['Language'] ) ) { // check if a cookie already exists for it if ( isset( $_COOKIE['Language'] ) ) { $_SESSION['Language'] = $_COOKIE['Language']; // else use the default language } else { $_SESSION['Language'] = $DEFAULT_LANGUAGE; } } } if ( $_SESSION['Language'] == "" ) { $_SESSION['Language'] = $DEFAULT_LANGUAGE; } return parse_ini_file( $AMS_TRANS . '/' . $_SESSION['Language'] . '.ini', true ); } /** * Time output function for handling the time display. * * @return returns the time in the format specified in the $TIME_FORMAT global variable. */ static public function outputTime($time, $str = 1) { global $TIME_FORMAT; if ($str) { return date($TIME_FORMAT, strtotime($time)); } else { return date($TIME_FORMAT, $time); } } /** * Auto login function for ingame use. * This function will allow users who access the website ingame, to log in without entering the username and password. It uses the COOKIE entry in the open_ring db. * it checks if the cookie sent by the http request matches the one in the db. This cookie in the db is changed everytime the user relogs. * * @return returns "FALSE" if the cookies didn't match, else it returns an array with the user's id and name. */ static public function check_login_ingame() { return NULL; // FIXME /* if ( helpers :: check_if_game_client () or $forcelibrender = false ) { $dbr = new DBLayer( "ring" ); if ( isset( $_GET['UserId'] ) && isset( $_COOKIE['ryzomId'] ) ) { $id = $_GET['UserId']; $statement = $dbr -> select( "ring_users", array( 'id' => $id, 'cookie' => $_COOKIE['ryzomId'] ), "user_id=:id AND cookie =:cookie" ); // $statement = $dbr->execute("SELECT * FROM ring_users WHERE user_id=:id AND cookie =:cookie", array('id' => $id, 'cookie' => $_COOKIE['ryzomId'])); if ( $statement -> rowCount() ) { $entry = $statement -> fetch(); // print_r($entry); return array( 'id' => $entry['user_id'], 'name' => $entry['user_name'] ); } else { return "FALSE"; } } else { return "FALSE"; } } else { return "FALSE"; } } */ } }