diff --git a/includes/config.php b/includes/config.php index 70d6574..42373d7 100755 --- a/includes/config.php +++ b/includes/config.php @@ -1,273 +1,273 @@ * @copyright 2010 Sébastien Santoro aka Dereckson * @license http://www.opensource.org/licenses/bsd-license.php BSD * @version 0.1 * @link http://scherzo.dereckson.be/doc/zed * @link http://zed.dereckson.be/ * @filesource */ //////////////////////////////////////////////////////////////////////////////// /// /// /// I. SQL configuration /// /// /// //////////////////////////////////////////////////////////////////////////////// //SQL configuration $Config['database']['engine'] = 'MySQLi'; //MySQL, MySQLi $Config['database']['host'] = 'localhost'; $Config['database']['username'] = 'zed'; $Config['database']['password'] = 'zed'; $Config['database']['database'] = 'zed'; //SQL tables $prefix = ''; define('TABLE_API_KEYS', $prefix . 'api_keys'); define('TABLE_COMMENTS', $prefix . 'comments'); define('TABLE_CONTENT_FILES', $prefix . 'content_files'); define('TABLE_CONTENT_LOCATIONS', $prefix . 'content_locations'); define('TABLE_CONTENT_ZONES', $prefix . 'content_zones'); define('TABLE_CONTENT_ZONES_LOCATIONS', $prefix . 'content_zones_locations'); define('TABLE_LOG', $prefix . 'log'); define('TABLE_LOG_SMARTLINE', $prefix . 'log_smartline'); define('TABLE_MESSAGES', $prefix . 'messages'); define('TABLE_MOTD', $prefix . 'motd'); define('TABLE_PAGES', $prefix . 'pages'); define('TABLE_PAGES_EDITS', $prefix . 'pages_edits'); define('TABLE_PERSOS', $prefix . 'persos'); define('TABLE_PERSOS_FLAGS', $prefix . 'persos_flags'); define('TABLE_PERSOS_NOTES', $prefix . 'persos_notes'); define('TABLE_PORTS', $prefix . 'ports'); define('TABLE_PROFILES', $prefix . 'profiles'); define('TABLE_PROFILES_COMMENTS', $prefix . 'profiles_comments'); define('TABLE_PROFILES_PHOTOS', $prefix . 'profiles_photos'); define('TABLE_PROFILES_TAGS', $prefix . 'profiles_tags'); define('TABLE_REGISTRY', $prefix . 'registry'); define('TABLE_REQUESTS', $prefix . 'requests'); define('TABLE_REQUESTS_REPLIES', $prefix . 'requests_replies'); define('TABLE_SESSIONS', $prefix . 'sessions'); define('TABLE_SHIPS', $prefix . 'ships'); define('TABLE_USERS', $prefix . 'users'); define('TABLE_USERS_INVITES', $prefix . 'users_invites'); define('TABLE_USERS_AUTH', $prefix . 'users_auth'); //Geo tables define('TABLE_BODIES', $prefix . 'geo_bodies'); define('TABLE_LOCATIONS', $prefix . 'geo_locations'); //Well... it's a view define('TABLE_PLACES', $prefix . 'geo_places'); //////////////////////////////////////////////////////////////////////////////// /// /// /// II. Site configuration /// /// /// //////////////////////////////////////////////////////////////////////////////// //Default theme $Config['DefaultTheme'] = "Zed"; //Dates date_default_timezone_set("UTC"); //Secret key, used for some verification hashes in URLs or forms. $Config['SecretKey'] = 'Lorem ipsum dolor'; //When reading files, buffer size define('BUFFER_SIZE', 4096); //////////////////////////////////////////////////////////////////////////////// /// /// /// III. Script URLs /// /// /// //////////////////////////////////////////////////////////////////////////////// /* * Apache httpd, without mod_rewrite: * * Subdirectory: * - $Config['SiteURL'] = 'http://zed.dereckson.be/hypership/index.php'; * - $Config['BaseURL'] = '/hypership/index.php'; * * Root directory: * - $Config['SiteURL'] = 'http://zed.dereckson.be/index.php'; * - $Config['BaseURL'] = '/index.php'; * * Apache httpd, with mod_rewrite: * * Subdirectory: * - $Config['SiteURL'] = 'http://zed.dereckson.be/hypership'; * - $Config['BaseURL'] = '/hypership'; * * In .htaccess or your vhost definition: * RewriteEngine On * RewriteBase /hypership/ * RewriteCond %{REQUEST_FILENAME} !-f * RewriteCond %{REQUEST_FILENAME} !-d * RewriteRule . /hypership/index.php [L] * * Root directory: * - $Config['SiteURL'] = 'http://zed.dereckson.be'; * - $Config['BaseURL'] = ''; * * In .htaccess or your vhost definition: * RewriteEngine On * RewriteBase / * RewriteCond %{REQUEST_FILENAME} !-f * RewriteCond %{REQUEST_FILENAME} !-d * RewriteRule . /index.php [L] * * nginx: * * Use same config.php settings than Apache httpd, with mod_rewrite. * * In your server block: * location / { * #Serves static files if they exists, with one month cache * if (-f $request_filename) { * expires 30d; * break; * } * * #Sends all non existing file or directory requests to index.php * if (!-e request_filename) { * rewrite ^(.+)$ /index.php last; * #Or if you use a subdirectory: * #rewrite ^(.+)$ /hypership/index.php last; * } * } * * location ~ \.php$ { * #Your instructions to pass query to your FastCGI process, like: * fastcgi_pass 127.0.0.1:9000; * fastcgi_param SCRIPT_FILENAME /var/www/zed$fastcgi_script_name; * include fastcgi_params; * } * * * If you don't want to specify the server domain, you can use get_server_url: * $Config['SiteURL'] = get_server_url() . '/hypership'; * $Config['SiteURL'] = get_server_url(); * * * * !!! No trailing slash !!! * */ $Config['SiteURL'] = get_server_url(); $Config['BaseURL'] = ''; //AJAX callbacks URL $Config['DoURL'] = $Config['SiteURL'] . "/do.php"; //////////////////////////////////////////////////////////////////////////////// /// /// /// IV. Static content /// /// /// //////////////////////////////////////////////////////////////////////////////// //Where the static content is located? //Static content = 4 directories: js, css, img and content //On default installation, those directories are at site root. //To improve site performance, you can use a CDN for that. // //Recommended setting: $Config['StaticContentURL'] = $Config['SiteURL']; //Or if Zed is the site root: $Config['StaticContentURL'] = ''; //With CoralCDN: $Config['StaticContentURL'] = . '.nyud.net'; // $Config['StaticContentURL'] = ''; //$Config['StaticContentURL'] = get_server_url() . '.nyud.net'; //Site content -$contentDirectory = $_ENV['CONTENT_DIR'] ?? 'content'; +define('CONTENT_DIR', $_ENV['CONTENT_DIR'] ?? 'content'); //Scenes -define('SCENE_DIR', "$contentDirectory/scenes"); +define('SCENE_DIR', CONTENT_DIR . "/scenes"); define('SCENE_URL', $Config['StaticContentURL'] . '/content/scenes'); //Stories -define('STORIES_DIR', "$contentDirectory/stories"); +define('STORIES_DIR', CONTENT_DIR . "/stories"); //Profile's photos -define('PHOTOS_DIR', "$contentDirectory/users/_photos"); +define('PHOTOS_DIR', CONTENT_DIR . "/users/_photos"); define('PHOTOS_URL', $Config['StaticContentURL'] . '/content/users/_photos'); //ImageMagick paths //Be careful on Windows platform convert could match the NTFS convert command. $Config['ImageMagick']['convert'] = 'convert'; $Config['ImageMagick']['mogrify'] = 'mogrify'; $Config['ImageMagick']['composite'] = 'composite'; $Config['ImageMagick']['identify'] = 'identify'; //////////////////////////////////////////////////////////////////////////////// /// /// /// V. Caching /// /// /// //////////////////////////////////////////////////////////////////////////////// /* * Some data (Smarty, OpenID and sessions) are cached in the cache directory. * * Security tip: you can move this cache directory outside the webserver tree. */ define('CACHE_DIR', $_ENV['CACHE_DIR'] ?? 'cache'); /* * Furthermore, you can also enable a cache engine, like memcached, to store * data from heavy database queries, or frequently accessed stuff. * * To use memcached: * - $Config['cache']['engine'] = 'memcached'; * - $Config['cache']['server'] = 'localhost'; * - $Config['cache']['port'] = 11211; * * To disable cache: * - $Config['cache']['engine'] = 'void'; * (or don't write nothing at all) */ $Config['cache']['engine'] = 'void'; //////////////////////////////////////////////////////////////////////////////// /// /// /// VI. Sessions and authentication code /// /// /// //////////////////////////////////////////////////////////////////////////////// //If you want to use a common table of sessions / user handling //with several websites, specify a different resource id for each site. $Config['ResourceID'] = 21; //Enable OpenID authentication //$Config['OpenID'] = true; //Enable YubiKey authentication //API 12940 //For YubiCloud API key - create yours at https://upgrade.yubico.com/getapikey/ //$Config['YubiCloud']['ClientID'] = 12345; //$Config['YubiCloud']['SecretKey'] = 'Base64SecretKeyHere'; //PHP variables ini_set('session.serialize_handler', 'wddx'); ini_set('session.save_path', CACHE_DIR . '/sessions'); ini_set('session.gc_maxlifetime', 345600); //4 days, for week-end story pause and continue url //////////////////////////////////////////////////////////////////////////////// /// /// /// VII. Builder /// /// /// //////////////////////////////////////////////////////////////////////////////// //Zed can invoke a slightly modified version of HOTGLUE to build zones. $Config['builder']['hotglue']['enable'] = true; $Config['builder']['hotglue']['URL'] = '/apps/hotglue/index.php'; diff --git a/includes/travel/travel.php b/includes/travel/travel.php index 3d0c3a5..d86010b 100755 --- a/includes/travel/travel.php +++ b/includes/travel/travel.php @@ -1,173 +1,173 @@ * @copyright 2010 Sébastien Santoro aka Dereckson * @license http://www.opensource.org/licenses/bsd-license.php BSD * @version 0.1 * @link http://scherzo.dereckson.be/doc/zed * @link http://zed.dereckson.be/ * @filesource */ require_once('place.php'); /** * Travel helper class * * The Travel class reads content/travel.xml to get travel special rules * * It so be able to provide methods determining if a move is or not valid. * * This class implements a singleton pattern. */ class Travel { /** * Array of TravelPlace, each one a custom travel rule * * This array is indexed by TravelPlace code. * * @var Array */ public $globalTravelTo; /** * Constructor */ function __construct () { //Initializes array $this->globalTravelTo = []; } /** * Gets and initializes if needed the Travel instance * * @return Travel the Travel instance */ static function load () { require_once('includes/cache/cache.php'); $cache = Cache::load(); if (!$travel = $cache->get('zed_travel')) { //Initializes resource and caches it $travel = new Travel(); - $travel->load_xml("content/travel.xml"); + $travel->load_xml(CONTENT_DIR . "/travel.xml"); $cache->set('zed_travel', serialize($travel)); return $travel; } return unserialize($travel); } /** * Loads a travel configuration XML file * * @param string the path to the travel XML file */ function load_xml ($file) { $xml = simplexml_load_file($file); foreach ($xml->TravelPlace as $travelPlaceXml) { $travelPlace = TravelPlace::from_xml($travelPlaceXml); $this->globalTravelTo[$travelPlace->code] = $travelPlace; } } /** * Tries to parse the specified expression, according the rewrite rules * (for example defined by the xml tags) * * @param string $expression the expression to parse * @param GeoLocation the location where the perso is * @param GeoLocation the location where the perso wants to go * * @return boolean true if the expression have been parsed ; otherwise, false. */ function try_parse_rewrite_rule ($expression, $from, &$to) { //Relevant write rules depends from the location the perso is ($from) if (!array_key_exists($from->global, $this->globalTravelTo)) { return false; } $travelPlace = $this->globalTravelTo[$from->global]; foreach ($travelPlace->rewriteRules as $rule) { //$rule is an array [expression, global_location, local_location] $subpatterns = []; $result = preg_match($rule[0], $expression, $subpatterns); if ($result > 0) { //$subpatterns is an array with: // - at indice 0, the full matched regexp // - from 1 to n, the (groups) inside the regexp //We need so to replace $1 by $subpatterns[1] and so on. for ($i = count($subpatterns) - 1 ; $i > 0 ; $i--) { $rule[1] = str_replace('$' . $i, $subpatterns[$i], $rule[1]); $rule[2] = str_replace('$' . $i, $subpatterns[$i], $rule[2]); } $to = new GeoLocation($rule[1], $rule[2]); return true; } } return false; } /** * Determines if a perso can travel from $from to $to * * If an alias have been used for $to local location, set correct location. * * @param GeoLocation the location where the perso is * @param GeoLocation the location where the perso wants to go * @return boolean true if the travel move is valid ; otherwise, false. * * @todo From B00001002, goto C1 doesn't work. Alias seems ignored. */ function can_travel ($from, &$to) { if ($from->global != $to->global) { //Checks if we can locally from $from to $to place if (!array_key_exists($from->global, $this->globalTravelTo)) { return false; } $travelPlace = $this->globalTravelTo[$from->global]; if (!in_array($to->global, $travelPlace->globalTravelTo)) { return false; } } if ($to->containsLocalLocation) { //Determines if we've custom rules about local moves in $to if (!array_key_exists($to->global, $this->globalTravelTo)) { return false; } $travelPlace = $this->globalTravelTo[$to->global]; //Is it's an especially allowed movement? foreach ($travelPlace->localMoves as $move) { //move is a [location, alias, name] array //If any of those 3 parameters matches $to->local, it's okay if (in_array($to->local, $move)) { $to->local = $move[0]; return true; } } if ($travelPlace->freeLocalMove) { //We can move freely, perfect return true; } //Local move not allowed return false; } return true; } }