/** * Construct new page controller */ function __construct() { parent::__construct(); // Init page values $this->country = Session::instance()->get('country', false); // AJAX requests output without template if (request::is_ajax()) { $this->auto_render = false; $this->history = false; return; } // Use profiler only when an admin is logged in if ($this->visitor->logged_in('admin')) { Profiler::enable(); } // Bind the generic page variables $this->template->bind('skin', $this->skin)->bind('skin_imports', $this->skin_imports)->bind('stylesheets', $this->stylesheets)->bind('language', $this->language)->bind('page_width', $this->page_width)->bind('page_main', $this->page_main)->bind('page_id', $this->page_id)->bind('page_class', $this->page_class)->bind('page_title', $this->page_title)->bind('page_subtitle', $this->page_subtitle); // Add controller name as default page id $this->page_id = Router::$controller; // Init page values $this->menu = Kohana::config('site.menu'); $skin_path = 'ui/' . Kohana::config('site.skin') . '/'; $this->skin = $skin_path . 'skin.less'; $this->skin_imports = array('ui/layout.less', 'ui/widget.less', 'ui/jquery-ui.css', 'ui/site.css', $skin_path . 'jquery-ui.css'); $this->page_width = Session::instance()->get('page_width', 'fixed'); $this->page_main = Session::instance()->get('page_main', 'left'); //$this->stylesheets = array('ui/' . Kohana::config('site.skin') . '/skin', 'ui/' . Kohana::config('site.skin') . '/jquery-ui'); $this->breadcrumb = array(); //html::anchor('/', __('Home'))); $this->tabs = array(); // If a country is seleced, add custom stylesheet if ($this->country && Kohana::config('site.country_css')) { widget::add('head', html::stylesheet('ui/' . utf8::strtolower($this->country) . '/skin')); } // Generic views widget::add('actions', View::factory('generic/actions')->bind('actions', $this->page_actions)); // widget::add('breadcrumb', View::factory('generic/breadcrumb')->bind('breadcrumb', $this->breadcrumb)); widget::add('navigation', View::factory('generic/navigation')->bind('items', $this->menu)->bind('selected', $this->page_id)); widget::add('tabs', View::factory('generic/tabs_top')->bind('tabs', $this->tabs)->bind('selected', $this->tab_id)); // Header widget::add('header', View::factory('generic/header')); // Footer widget::add('footer', View_Mod::factory('events/events_list', array('mod_id' => 'footer-events-new', 'mod_class' => 'article unit size1of4 cut events', 'mod_title' => __('New events'), 'events' => ORM::factory('event')->order_by('id', 'DESC')->find_all(10)))); widget::add('footer', View_Mod::factory('forum/topics_list', array('mod_id' => 'footer-topics-active', 'mod_class' => 'article unit size1of4 cut topics', 'mod_title' => __('New posts'), 'topics' => ORM::factory('forum_topic')->order_by('last_post_id', 'DESC')->find_all(10)))); widget::add('footer', View_Mod::factory('blog/entries_list', array('mod_id' => 'footer-blog-entries', 'mod_class' => 'article unit size1of4 cut blogentries', 'mod_title' => __('New blogs'), 'entries' => ORM::factory('blog_entry')->find_latest(10)))); // Dock $classes = array(html::anchor('set/width/narrow', __('Narrow'), array('onclick' => '$("body").addClass("fixed").removeClass("liquid"); $.get(this.href); return false;')), html::anchor('set/width/wide', __('Wide'), array('onclick' => '$("body").addClass("liquid").removeClass("narrow"); $.get(this.href); return false;')), html::anchor('set/main/left', __('Left'), array('onclick' => '$("body").addClass("left").removeClass("right"); $.get(this.href); return false;')), html::anchor('set/main/right', __('Right'), array('onclick' => '$("body").addClass("right").removeClass("left"); $.get(this.href); return false;'))); widget::add('dock2', __('Layout: ') . implode(', ', $classes)); // Language selection $available_languages = Kohana::config('locale.languages'); if (count($available_languages)) { $languages = array(); foreach ($available_languages as $lang => $locale) { $languages[] = html::anchor('set/lang/' . $lang, html::chars($locale[2])); } widget::add('dock2', ' | ' . __('Language: ') . implode(', ', $languages)); } if ($this->user) { // Authenticated view widget::add('dock', __('[#:id] :user', array(':id' => $this->user->id, ':user' => html::nick($this->user->id, $this->user->username)))); $new_messages = array(); if ($this->user->newcomments) { $new_messages[] = html::anchor(url::user($this->user), __(':commentsC', array(':comments' => $this->user->newcomments)), array('title' => __('New comments'), 'class' => 'new-comments')); } if (!empty($new_messages)) { widget::add('dock', ' - ' . __('New messages: ') . implode(' ', $new_messages)); } // Logout also from Facebook if (FB::enabled() && Visitor::instance()->get_provider()) { widget::add('dock', ' - ' . html::anchor('sign/out', FB::icon() . __('Sign out'), array('onclick' => "FB.Connect.logoutAndRedirect('/sign/out'); return false;"))); } else { widget::add('dock', ' - ' . html::anchor('sign/out', __('Sign out'))); } if (Kohana::config('site.inviteonly')) { // widget::add('dock', ' | ' . html::anchor('sign/up', __('Send invite'))); } // Admin functions if ($this->visitor->logged_in('admin')) { widget::add('dock2', ' | ' . __('Admin: ') . html::anchor('roles', __('Roles')) . ', ' . html::anchor('tags', __('Tags')) . ', ' . html::anchor('#kohana-profiler', __('Profiler'), array('onclick' => '$("#kohana-profiler").toggle();'))); } } else { // Non-authenticated view $form = form::open('sign/in'); $form .= form::input('username', null, 'title="' . __('Username') . '"'); $form .= form::password('password', '', 'title="' . __('Password') . '"'); $form .= form::submit('submit', __('Sign in')); $form .= form::close(); $form .= html::anchor('/sign/up', __('Sign up')); if (FB::enabled()) { $form .= ' | ' . FB::fbml_login(); } widget::add('dock', $form); } // End widget::add('end', View::factory('generic/end')); // Analytics $google_analytics = Kohana::config('site.google_analytics'); if ($google_analytics) { widget::add('head', html::script_source("\nvar _gaq = _gaq || []; _gaq.push(['_setAccount', '" . $google_analytics . "']); _gaq.push(['_trackPageview']);\n(function() {\n\tvar ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n\tga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n\t(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);\n})();\n")); } // Ads $ads = Kohana::config('site.ads'); if ($ads && $ads['enabled']) { foreach ($ads['slots'] as $ad => $slot) { widget::add($slot, View::factory('ads/' . $ad)); } } // Facebook connect if (FB::enabled()) { FB::init(); } }