Trying to get property of non-object in /var/www/html/v2/grss/app/controllers/application.php at line 105
<?php
ini_set("memory_limit", "128M");

class ApplicationController extends Controller {
   
   protected function before() {

      $this->serve_lang();

      $this->determine_layout();
      $this->assign_meta(false);

      $this->view->menu = '/shared/baner.phtml';

      if ($this->auth()) {
         if (($this->params['controller'] == 'show') || ($this->params['controller'] == 'questionnaire')) {
            $this->prepare_menu();
         }
         return true;
      }
      else {
         if (($this->params['controller'] == 'show') || ($this->params['controller'] == 'questionnaire')) {
            $this->prepare_menu();
            return true;
         }
         elseif(!($this->params['controller'] == 'account' && $this->params['action'] == 'login')) {
            $this->flash(Dictionary::get('LOGIN_REQUIRED'), 'error');
            $this->redirect(array('controller' => 'account', 'action' => 'login'));
            return false;
         }
         else {
            return true;
         }
      }
   }
   
   private function serve_lang() {
      if (! isset($this->params['lang']) && $this->params['controller'] == 'show') {
         $this->redirect(array('controller' => 'show', 'action' => 'home', 'lang' => 'pl'));
      }
      else if (isset($this->params['lang'])) {
         Globals::$lang = strtolower($this->params['lang']);
      }
      else {
         Globals::$lang = 'pl';
      }
   }
   
   private function auth() {
      if (isset($this->session['account_id']) && ($this->session['account_id'] > 0)) {
         //set logged_account
         $this->logged_account = MR::collect('account')->filter('id = ?', $this->session['account_id'])->first();
         $this->view->logged_account = $this->logged_account;
         Globals::$logged_account_id = $this->logged_account->id;
         return true;
      }
      else {
         return false;
      }
   }
   
   private function load_parent_for_category($category) {

      return MR::collect('category')->filter("id = ? AND (status = 'visible' OR status = ?)", $category->category_id, ((isset(Globals::$logged_account_id))?'hidden':'visible'))->call('load_categories')->first();
   }
   
   private function load_base_menu() {

      #main
      if (isset($this->logged_account)) {
         $this->view->menus = MR::collect('menu')->filter("(status = 'visible' OR status = 'hidden')")->call('load_boxes_with_categories')->all();
      }
      else {
         $this->view->menus = MR::collect('menu')->filter("status = 'visible'")->call('load_visible_boxes_with_categories')->all();
      }
   }
   
   private function add_to_box($category) {

      foreach ($this->view->menus as $menu) {
         foreach ($menu->boxes as $box) {
            if ($box->id == $category->box_id) {
               foreach ($box->categories as & $c) {
                  if ($category->id == $c->id) {
                     $c = $category;
                     continue;
                  }
                  unset($c);
               }
            }
         }
      }
   }
   
   protected function prepare_menu() {
      if (isset($this->params['category_id']) && isset($this->params['category_url'])) {
         $this->selected_category = MR::collect('category')->filter("id = ? AND (status = 'visible' OR status = ?)", $this->params['category_id'], ((isset(Globals::$logged_account_id))?'hidden':'visible'))->first();
         if ($this->selected_category->url != $this->params['category_url']) {
            Report::error(Dictionary::get('NO_ID'), true);
         }
      }
      elseif(isset($this->params['article_id']) && isset($this->params['article_url'])) {
         $this->article = MR::collect('article')->filter("id = ? AND (status = 'visible' OR status = ?)", $this->params['article_id'], ((isset(Globals::$logged_account_id))?'hidden':'visible'))->first();

         if ($this->article->url != $this->params['article_url']) {
            Report::error(Dictionary::get('NO_ID'), true);
         }
         else {
            $this->selected_category = MR::collect('category')->filter("id = ? AND (status = 'visible' OR status = ?) ", $this->article->category_id, ((isset(Globals::$logged_account_id))?'hidden':'visible'))->first();
         }
      }

      if (isset($this->selected_category)) {
         #parent
         $category = $this->selected_category;
         while ($category->category_id != 0) {
            $parent = $this->load_parent_for_category($category);
            if (!empty($parent->categories)) {
               foreach ($parent->categories as & $c) {
                  if ($c->id == $category->id) $c = $category;
                  unset($c);
               }
            }
            else {
               $parent->categories = array($category);
            }

            $category = $parent;
         }

         if (isset($this->logged_account)) {
            $this->selected_category->load_categories();
            $this->selected_category->load_articles();
         }
         else {
            $this->selected_category->load_visible_categories();
            $this->selected_category->load_visible_articles();
         }

         $this->load_base_menu($category);
         $this->add_to_box($category);

      }
      else {
         $this->load_base_menu();

      }
   }
   
   protected function assign_meta($object) {

      $this->view->title = (($object)?$object->title:'');
      $this->view->keywords = (($object)?$object->keywords:'');
      $this->view->description = (($object)?$object->description:'');
   }
   
   protected function rhx_sort($class) {
      $in = array();
      foreach ($this->post[$class . 'ul'] as $id) {
         array_push($in, "?");
      }
      if ($objects = MR::collect($class)->filter('id in (' . implode(',', $in) . ')', $this->post[$class . 'ul'])->all()) {
         //dualscope
         if (isset($objects[0]->object) && isset($objects[0]->object_id)) {
            $scope = array('object', 'object_id');
         }
         //uniscope
         else if (isset($objects[0]->box_id) && $objects[0]->box_id != 0) //for root categories
         {
            $scope = 'box_id';
         }
         else //for subcatcegories and articles
         {
            $scope = 'category_id';
         }
      }
      $first = array_shift($objects);
      if (!is_array($scope)) //uniscope
      {
         $base = $first->$scope;
      }
      else //multiscope (many conditions)
      {
         $base = array();
         foreach ($scope as $item)
            $base[$item] = $first->$item;
      }
      array_unshift($objects, $first);
      #test all
      foreach ($objects as $object) {
         if (!is_array($scope)) {
            if ($object->$scope != $base) return;
         }
         else {
            foreach ($scope as $item) {
               if ($object->$item != $base[$item]) return;
            }
         }
      }

      $sorted = array();
      foreach ($objects as $object) {
         if (in_array($object->id, $this->post[$class . 'ul'])) {
            $sorted[array_search($object->id, $this->post[$class . 'ul'])] = $object;
         }

      }

      foreach ($sorted as $key=>$object) {
         $object->position = $key + 1;
         if (!$object->save()) return false;
      }
      return true;
   }
   
   private function determine_layout() {

      if (($this->params['controller'] == 'show') || ($this->params['controller'] == 'questionnaire')) {
         $this->layout = 'shared/layout.phtml';
      }
      else {
         $this->layout = 'shared/cms.phtml';
      }
   }
   
   public function hide(& $object) {
      if ($this->request_method == 'post') {
         $object->update_attributes(array('status' => 'hidden'));
         if ($object->save())
            return true;
      }

      return false;
   }
   
   public function appear(& $object) {
      if ($this->request_method == 'post') {
         $object->update_attributes(array('status' => 'visible'));
         if ($object->save())
            return true;
      }

      return false;
   }
   
   public function delete(& $object) {
      if ($this->request_method == 'post') {
         $object->update_attributes(array('status' => 'deleted'));
         if ($object->save())
             return true;
      }

      return false;
   }
}

?>