function countries() { return Config::countries(); }
private static function process_object($data, $parent_name = '', $current_tree = '') { $fields = array(); if ($data['name'] == '_versions') { $fields['version_id'] = array('type' => 'int', 'length' => 10, 'index' => 'primary'); $fields['id'] = array('type' => 'int', 'length' => 10, 'index' => 'index'); if ($parent_name) { $fields[$parent_name . '_id'] = array('type' => 'int', 'length' => 10, 'index' => 'index'); } } else { $fields['id'] = array('type' => 'int', 'length' => 10, 'index' => 'primary'); if ($parent_name && !isset($data['child'])) { $fields[$parent_name . '_id'] = array('type' => 'int', 'length' => 10, 'index' => 'index'); } } if ($data->getName() == 'site') { $data = new SimpleXMLElement('<object path="site" name="site" stack="site">' . Config::site_fields() . '</object>'); $fields['name'] = array('type' => 'varchar', 'length' => 150, 'default' => ''); $fields['url'] = array('type' => 'varchar', 'length' => 150, 'default' => ''); $language_codes = array_keys(languages()); if ($countries = Config::countries()) { $language_codes = array_keys($countries); } if (count($language_codes) > 1) { foreach ($language_codes as $code) { $fields['url_' . $code] = array('type' => 'varchar', 'length' => 150, 'default' => ''); } } $fields['table_check_date'] = array('type' => 'int', 'length' => 10); $fields['routing_check_date'] = array('type' => 'int', 'length' => 10); $fields['structure_xml'] = array('type' => 'mediumtext'); $fields['structure_xml_expanded'] = array('type' => 'mediumtext'); $fields['routing'] = array('type' => 'text'); $fields['live'] = array('type' => 'bool', 'default' => '0'); $fields['piwik_id'] = array('type' => 'varchar', 'length' => 50, 'default' => ''); $cmsdownloads = $data->addChild('files'); $cmsdownloads->addAttribute('name', 'downloads'); $cmsdownloads->addAttribute('sortable', 'true'); $cmsimages = $data->addChild('images'); $cmsimages->addAttribute('name', 'images'); $cmsimages->addAttribute('sortable', 'true'); $cmsvideos = $data->addChild('object'); $cmsvideos->addAttribute('name', 'videos'); $cmsvideos->addAttribute('sortable', 'true'); $cmsvideo = $cmsvideos->addChild('video'); $cmsvideo->addAttribute('name', 'video'); } $attributes = $data->attributes(); $children = $data->children(); if (!isset($attributes['name'])) { return false; } if (isset($data['sortable']) && $data['sortable']) { $fields['_sort_order'] = array('type' => 'int', 'length' => 10, 'index' => 'index'); } if (isset($data['recursive']) && $data['recursive']) { $fields['parent_id'] = array('type' => 'int', 'length' => 10, 'index' => 'index'); } foreach ($children as $key => $child) { $fields = self::process_field($key, $child, $fields, $data, $current_tree); } self::modify_table($current_tree . $attributes['name'], $fields, $data); }
public static function determine_language() { // If multilanguage, determine current language. Redirect to appropriate language if unable to determine. if (count(languages()) > 1) { $language_codes = array_keys(languages()); if ($countries = Config::countries()) { $language_codes = array_keys($countries); } $language_values = languages(); if ($countries) { $language_values = $countries; } $site = current_site(); $url_key = 'url_' . reset($language_codes); if ($site->{$url_key} && false === stristr($_SERVER['HTTP_HOST'], '.fw4.be')) { foreach ($language_codes as $lang) { $url_key = 'url_' . $lang; if ($_SERVER['HTTP_HOST'] == $site->{$url_key}) { if ($countries) { self::set_language($countries[$lang]); self::set_country($lang); } else { self::set_language($lang); } break; } } } else { foreach ($language_codes as $lang) { if (segment(0) == $lang) { if ($countries) { self::set_country(array_shift(self::$segments)); self::set_language($countries[country()]); } else { self::set_language(array_shift(self::$segments)); } break; } } } if (!language()) { if (isset($_COOKIE['language']) && isset($language_values[$_COOKIE['language']])) { $language = $_COOKIE['language']; } else { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ($negotiated = self::prefered_language($language_codes))) { $language = $negotiated; } else { $language = array_shift($language_codes); } } if ($countries) { self::set_country($language); self::set_language($countries[$language]); } else { self::set_language($language); } return false; } if (!isset($_COOKIE['language']) || $_COOKIE['language'] != language_identifier()) { setcookie('language', language_identifier(), time() + 60 * 60 * 24 * 30 * 24, '/'); } } else { $languages = array_keys(languages()); self::set_language(array_shift($languages)); // If single language, define it. } return true; }
public static function reload_site() { $db = FW4_Db::get_instance(); $site = false; if (!$site) { try { if (count(languages()) > 1) { $query = from('site')->where('url LIKE %s', $_SERVER['HTTP_HOST'] . '%'); $language_codes = array_keys(languages()); if ($countries = Config::countries()) { $language_codes = array_keys($countries); } foreach ($language_codes as $code) { $query->or_where('`url_' . $code . '` LIKE %s', $_SERVER['HTTP_HOST'] . '%'); } $site = $query->get_row(); } else { $site = from('site')->where('url LIKE %s', $_SERVER['HTTP_HOST'] . '%')->get_row(); } } catch (PDOException $exception) { FW4_Structure::check_structure('', true); } if (!$site) { if (!($site = get_row('site'))) { $name = str_ireplace('www.', '', $_SERVER['HTTP_HOST']); $name = ucfirst(substr($name, 0, strpos($name, '.'))); $url = $_SERVER['HTTP_HOST']; if (stristr(getcwd(), 'httpdocs')) { $url .= substr(getcwd(), stripos(getcwd(), 'httpdocs') + strlen('httpdocs')); } insert('site', array("url" => $url, "name" => $name)); FW4_Structure::check_structure(); $site = where('url LIKE %s', $_SERVER['HTTP_HOST'])->get_row('site'); } else { $domain_handled = false; // Process minisites $types = FW4_Type_Manager::get_instance()->get_types(); foreach ($types as $typename => $type) { if (method_exists($type, 'handle_domain')) { if (!$site->structure_xml_expanded) { FW4_Structure::check_structure("", true); return self::reload_site(); } $structure = new SimpleXMLElement($site->structure_xml_expanded); $fields = $structure->xpath('//*[@type_name="' . $typename . '"]'); if (count($fields)) { $prev = self::$current; self::$current = $site; if (call_user_func_array(array($type, 'handle_domain'), array($_SERVER['HTTP_HOST'], $fields))) { $domain_handled = true; break; } self::$current = $prev; } } } // Process subdomains foreach (Config::subdomains() as $subdomain => $handler) { //if () Router::set_content_prefix($handler); } if (!$domain_handled && $site->live) { redirect((Config::https() ? 'https' : 'http') . '://' . $site->url . $_SERVER['REQUEST_URI']); } } } } if (!$site->live && false === stristr($_SERVER['HTTP_HOST'], '.fw4.') && false === stristr($_SERVER['HTTP_HOST'], 'local')) { $db->query("UPDATE site SET live = 1 WHERE id = " . $site->id); if (stristr($site->url, '.fw4.be')) { where('id = %d', $site->id)->update('site', array('url' => $_SERVER['HTTP_HOST'])); } } self::$current = $site; return $site; }