Beispiel #1
0
 /**
  * Returns user link
  *
  * @param	  mixed   $user  User_Model, uid or username
  * @param	  string  $nick
  * @param   string  $class
  * @return  string
  */
 public static function user($user, $nick = null, $class = null)
 {
     static $viewer;
     // Load current user for friend styling
     if (is_null($viewer)) {
         $viewer = Visitor::instance()->get_user();
         if (!$viewer) {
             $viewer = false;
         }
     }
     $class = $class ? array($class, 'user') : array('user');
     if ($user instanceof User_Model || $user && ($user = ORM::factory('user')->find_user($user))) {
         $nick = $user->username;
         if ($viewer && $viewer->is_friend($user)) {
             $class[] = 'friend';
         }
         if ($user->gender) {
             $class[] = $user->gender == 'f' ? 'female' : 'male';
         }
     }
     return empty($nick) ? __('Unknown') : html::anchor(url::user($nick), $nick, array('class' => implode(' ', $class)));
 }
Beispiel #2
0
 /**
  * User profile
  */
 public function _view()
 {
     $this->tab_id = 'profile';
     $owner = $this->user && $this->member->id == $this->user->id;
     if ($owner && $this->user->newcomments) {
         $this->user->newcomments = 0;
         $this->user->save();
     }
     // Actions
     if ($this->member->has_access(User_Model::ACCESS_EDIT)) {
         $this->page_actions[] = array('link' => url::user($this->member) . '/edit', 'text' => __('Settings'), 'class' => 'settings');
     }
     // Picture
     widget::add('side', View_Mod::factory('member/member', array('mod_class' => 'member member-' . $this->member->id, 'user' => $this->member)));
     // Comments
     if ($this->member->has_access(User_Model::ACCESS_COMMENT)) {
         $comment = new User_Comment_Model();
         $form_values = $comment->as_array();
         $form_errors = array();
         // check post
         if (csrf::valid() && ($post = $this->input->post())) {
             $comment->user_id = $this->member->id;
             $comment->author_id = $this->user->id;
             $comment->comment = $post['comment'];
             if (isset($post['private'])) {
                 $comment->private = 1;
             }
             try {
                 $comment->save();
                 if (!$owner) {
                     $this->member->newcomments += 1;
                     $this->member->save();
                 }
                 $this->user->commentsleft += 1;
                 $this->user->save();
                 if (!request::is_ajax()) {
                     url::redirect(url::current());
                 }
             } catch (ORM_Validation_Exception $e) {
                 $form_errors = $e->validation->errors();
                 $form_values = arr::overwrite($form_values, $post);
             }
         }
         // Handle pagination
         $per_page = 25;
         $page_num = $this->uri->segment('page') ? $this->uri->segment('page') : 1;
         $page_offset = ($page_num - 1) * $per_page;
         $total_comments = $this->member->get_comment_count();
         $comments = $this->member->find_comments($page_num, $per_page, $this->user);
         $pagination = new Pagination(array('items_per_page' => $per_page, 'total_items' => $total_comments));
         $view = View::factory('generic/comments', array('delete' => '/member/comment/%d/delete/?token=' . csrf::token(), 'private' => '/member/comment/%d/private/?token=' . csrf::token(), 'comments' => $comments, 'errors' => $form_errors, 'values' => $form_values, 'pagination' => $pagination, 'user' => $this->user));
         if (request::is_ajax()) {
             echo $view;
             return;
         }
         widget::add('main', $view);
     }
     // Basic info
     $basic_info = array();
     if (!empty($this->member->name)) {
         $basic_info[__('Name')] = html::specialchars($this->member->name);
     }
     if (!empty($this->member->city_name)) {
         $basic_info[__('City')] = html::specialchars($this->member->city_name);
     }
     if (!empty($this->member->dob) && $this->member->dob != '0000-00-00') {
         $basic_info[__('Date of Birth')] = __(':dob (:years years)', array(':dob' => date::format('DMYYYY', $this->member->dob), ':years' => date::timespan(strtotime($this->member->dob), null, 'years')));
     }
     if (!empty($this->member->gender)) {
         $basic_info[__('Gender')] = $this->member->gender == 'm' ? __('Male') : __('Female');
     }
     if (!empty($this->member->latitude) && !empty($this->member->longitude)) {
         $basic_info[__('Location')] = $this->member->latitude . ', ' . $this->member->longitude;
         $basic_info[__('Location')] = html::anchor('#map', __('Toggle map'), array('class' => 'expander', 'title' => __('Show/hide'))) . '<div id="map" style="display: none">' . __('Map loading') . '</div>';
         $map = new Gmap('map', array('ScrollWheelZoom' => true));
         $map->center($this->member->latitude, $this->member->longitude, 15)->controls('small')->types();
         $map->add_marker($this->member->latitude, $this->member->longitude, html::avatar($this->member->avatar, $this->member->username) . html::user($this->member));
         widget::add('foot', html::script_source($map->render('gmaps/jquery_event')));
         widget::add('foot', html::script_source("\$('a[href*=\"#map\"]:first').click(function() { \$('#map').toggle('normal', gmap_open); return false; });"));
     }
     // Site info
     $site_info = array(__('Registered') => date::format('DMYYYY_HM', $this->member->created) . ' [#' . $this->member->id . ']', __('Logins') => __(':logins (:ago ago)', array(':logins' => number_format($this->member->logins, 0), ':ago' => '<abbr title="' . date::format('DMYYYY_HM', $this->member->last_login) . '">' . date::timespan_short($this->member->last_login) . '</abbr>')), __('Posts') => number_format($this->member->posts, 0), __('Comments') => number_format($this->member->commentsleft, 0));
     // Initialize tabs
     $tabs = array('basic-info' => array('href' => '#basic-info', 'title' => __('Basic info'), 'tab' => new View('generic/list_info', array('id' => 'basic-info', 'title' => __('Basic info'), 'list' => $basic_info))), 'site-info' => array('href' => '#site-info', 'title' => __('Site info'), 'tab' => new View('generic/list_info', array('id' => 'site-info', 'title' => __('Site info'), 'list' => $site_info))));
     widget::add('side', View::factory('generic/tabs', array('id' => 'info-tab', 'tabs' => $tabs)));
     $this->_side_views();
 }
Beispiel #3
0
 /**
  * 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();
     }
 }