public function __construct() { // if the application wasn't defined before we will define it if (!defined('NAMED_APPLICATION')) { define('NAMED_APPLICATION', 'frontend'); } // set the module $this->setModule(SpoonFilter::getGetValue('module', null, '')); // set the requested file $this->setFile(SpoonFilter::getGetValue('file', null, '')); // set the language $this->setLanguage(SpoonFilter::getGetValue('language', FrontendLanguage::getActiveLanguages(), SITE_DEFAULT_LANGUAGE)); // create a new template instance (this will handle all stuff for us) $tpl = new FrontendTemplate(); // enable addslashes on each locale $tpl->setAddSlashes(true); // set correct headers SpoonHTTP::setHeaders('content-type: application/javascript'); // fetch the template path if ($this->module == 'core') { $file = FRONTEND_CORE_PATH . '/js/' . $this->getFile(); } else { $file = FRONTEND_MODULES_PATH . '/' . $this->getModule() . '/js/' . $this->getFile(); } // output the template $tpl->display(FrontendTheme::getPath($file), true); }
public function __construct() { // because some cronjobs will be run on the command line we should pass parameters if (isset($_SERVER['argv'])) { // init var $first = true; // loop all passes arguments foreach ($_SERVER['argv'] as $parameter) { // ignore first, because this is the scripts name. if ($first) { // reset $first = false; // skip continue; } // split into chunks $chunks = explode('=', $parameter, 2); // valid paramters? if (count($chunks) == 2) { // build key and value $key = trim($chunks[0], '--'); $value = $chunks[1]; // set in GET if ($key != '' && $value != '') { $_GET[$key] = $value; } } } } // define the Named Application if (!defined('NAMED_APPLICATION')) { define('NAMED_APPLICATION', 'backend'); } // set the module $this->setModule(SpoonFilter::getGetValue('module', null, '')); // set the requested file $this->setAction(SpoonFilter::getGetValue('action', null, '')); // set the language $this->setLanguage(SpoonFilter::getGetValue('language', FrontendLanguage::getActiveLanguages(), SITE_DEFAULT_LANGUAGE)); // mark cronjob as run $cronjobs = (array) BackendModel::getModuleSetting('core', 'cronjobs'); $cronjobs[] = $this->getModule() . '.' . $this->getAction(); BackendModel::setModuleSetting('core', 'cronjobs', array_unique($cronjobs)); // create new action $action = new BackendCronjobAction($this->getAction(), $this->getModule()); $action->execute(); }
/** * Process the querystring * * @return void */ private function processQueryString() { // store the querystring local, so we don't alter it. $queryString = $this->getQueryString(); // fix GET-parameters $getChunks = explode('?', $queryString); // are there GET-parameters if (isset($getChunks[1])) { // get key-value pairs $get = explode('&', $getChunks[1]); // remove from querystring $queryString = str_replace('?' . $getChunks[1], '', $this->getQueryString()); // loop pairs foreach ($get as $getItem) { // get key and value $getChunks = explode('=', $getItem, 2); // key available? if (isset($getChunks[0])) { // reset in $_GET $_GET[$getChunks[0]] = isset($getChunks[1]) ? (string) $getChunks[1] : ''; // add into parameters if (isset($getChunks[1])) { $this->parameters[(string) $getChunks[0]] = (string) $getChunks[1]; } } } } // split into chunks $chunks = (array) explode('/', $queryString); // single language if (!SITE_MULTILANGUAGE) { // set language id $language = FrontendModel::getModuleSetting('core', 'default_language', SITE_DEFAULT_LANGUAGE); } else { // default value $mustRedirect = false; // get possible languages $possibleLanguages = (array) FrontendLanguage::getActiveLanguages(); $redirectLanguages = (array) FrontendLanguage::getRedirectLanguages(); // the language is present in the URL if (isset($chunks[0]) && in_array($chunks[0], $possibleLanguages)) { // define language $language = (string) $chunks[0]; // try to set a cookie with the language try { // set cookie SpoonCookie::set('frontend_language', $language, 7 * 24 * 60 * 60, '/', '.' . $this->getDomain()); } catch (SpoonCookieException $e) { // settings cookies isn't allowed, because this isn't a real problem we ignore the exception } // set sessions SpoonSession::set('frontend_language', $language); // remove the language part array_shift($chunks); } elseif (SpoonCookie::exists('frontend_language') && in_array(SpoonCookie::get('frontend_language'), $redirectLanguages)) { // set languageId $language = (string) SpoonCookie::get('frontend_language'); // redirect is needed $mustRedirect = true; } else { // set languageId & abbreviation $language = FrontendLanguage::getBrowserLanguage(); // try to set a cookie with the language try { // set cookie SpoonCookie::set('frontend_language', $language, 7 * 24 * 60 * 60, '/', '.' . $this->getDomain()); } catch (SpoonCookieException $e) { // settings cookies isn't allowed, because this isn't a real problem we ignore the exception } // redirect is needed $mustRedirect = true; } // redirect is required if ($mustRedirect) { // build URL $URL = rtrim('/' . $language . '/' . $this->getQueryString(), '/'); // set header & redirect SpoonHTTP::redirect($URL, 301); } } // define the language define('FRONTEND_LANGUAGE', $language); // sets the localefile FrontendLanguage::setLocale($language); // list of pageIds & their full URL $keys = FrontendNavigation::getKeys(); // full URL $URL = implode('/', $chunks); $startURL = $URL; // loop until we find the URL in the list of pages while (!in_array($URL, $keys)) { // remove the last chunk array_pop($chunks); // redefine the URL $URL = implode('/', $chunks); } // remove language from querystring if (SITE_MULTILANGUAGE) { $queryString = trim(substr($queryString, strlen($language)), '/'); } // if it's the homepage AND parameters were given (not allowed!) if ($URL == '' && $queryString != '') { // get 404 URL $URL = FrontendNavigation::getURL(404); // remove language if (SITE_MULTILANGUAGE) { $URL = str_replace('/' . $language, '', $URL); } } // set pages $URL = trim($URL, '/'); // currently not in the homepage if ($URL != '') { // explode in pages $pages = explode('/', $URL); // reset pages $this->setPages($pages); // reset parameters $this->setParameters(array()); } // set parameters $parameters = trim(substr($startURL, strlen($URL)), '/'); // has at least one parameter if ($parameters != '') { // parameters will be separated by / $parameters = explode('/', $parameters); // set parameters $this->setParameters($parameters); } // pageId, parentId & depth $pageId = FrontendNavigation::getPageId(implode('/', $this->getPages())); $pageInfo = FrontendNavigation::getPageInfo($pageId); // invalid page, or parameters but no extra if ($pageInfo === false || !empty($parameters) && !$pageInfo['has_extra']) { // get 404 URL $URL = FrontendNavigation::getURL(404); // remove language if (SITE_MULTILANGUAGE) { $URL = trim(str_replace('/' . $language, '', $URL), '/'); } // currently not in the homepage if ($URL != '') { // explode in pages $pages = explode('/', $URL); // reset pages $this->setPages($pages); // reset parameters $this->setParameters(array()); } } // is this an internal redirect? if (isset($pageInfo['redirect_page_id']) && $pageInfo['redirect_page_id'] != '') { // get url for item $newPageURL = FrontendNavigation::getURL((int) $pageInfo['redirect_page_id']); $errorURL = FrontendNavigation::getURL(404); // not an error? if ($newPageURL != $errorURL) { // redirect SpoonHTTP::redirect($newPageURL, $pageInfo['redirect_code']); } } // is this an external redirect? if (isset($pageInfo['redirect_url']) && $pageInfo['redirect_url'] != '') { // redirect SpoonHTTP::redirect($pageInfo['redirect_url'], $pageInfo['redirect_code']); } }
/** * Parse the languages */ protected function parseLanguages() { // just execute if the site is multi-language if (SITE_MULTILANGUAGE) { // get languages $activeLanguages = FrontendLanguage::getActiveLanguages(); // init var $languages = array(); // loop active languages foreach ($activeLanguages as $language) { // build temp array $temp = array(); $temp['url'] = '/' . $language; $temp['label'] = $language; $temp['name'] = FL::msg(strtoupper($language)); $temp['current'] = (bool) ($language == FRONTEND_LANGUAGE); // add $languages[] = $temp; } // assign if (count($languages) > 1) { $this->tpl->assign('languages', $languages); } } }
/** * Set the language * * @return void * @param string $value The (interface-)language, will be used to parse labels. */ public function setLanguage($value) { // get the possible languages $possibleLanguages = FrontendLanguage::getActiveLanguages(); // validate if (!in_array($value, $possibleLanguages)) { // only 1 active language? if (!SITE_MULTILANGUAGE && count($possibleLanguages) == 1) { $this->language = array_shift($possibleLanguages); } else { // create fake action $fakeAction = new FrontendBaseAJAXAction('', ''); // output error $fakeAction->output(FrontendBaseAJAXAction::BAD_REQUEST, null, 'Language not provided.'); } } else { $this->language = (string) $value; } // define constant define('FRONTEND_LANGUAGE', $this->language); // set the locale (we need this for the labels) FrontendLanguage::setLocale($this->language); }