Проблемы при обновлении на 3.2, потом на 3.2.1

  • 38 Ответов
  • 12129 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}

« Последнее редактирование: 19.12.2013, 12:02:00 от Arkadiy »

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Это странно, потому что такой проблемы у себя не заметил. Вот код, который добавляет $app и $db в качестве свойств в класс JPlugin. Это было сделано еще в 3.2.0. Плагин Remember вызывает parent::__construct($subject, $config); и эти свойства должны инициализироваться. У тебя нет?

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru

*

Оффлайн ELLE

один в один ошибка с плагином remember
3.1.1 -> 3.2.1 обновлением из админки

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
Во, нас прибыло, я еще в родитель не смотрел, руки не дошли.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
Начал расследование. По факту у меня оказалось два файла с классом JPlugin.
/libraries/joomla/plugin/plugin.php
и
/libraries/cms/plugin/plugin.php

в /libraries/joomla/plugin/plugin.php слова app вообще нету,
в  /libraries/cms/plugin/plugin.php в конструкторе есть выражение:
               if (property_exists($this, 'app'))
{
$reflection = new ReflectionClass($this);
$appProperty = $reflection->getProperty('app');

if ($appProperty->isPrivate() === false && is_null($this->app))
{
$this->app = JFactory::getApplication();
}
}
Получается что /libraries/joomla/plugin/plugin.php цепляется вместо нужного класса и $app остается пустым.

/libraries/joomla/plugin/plugin.php отсутствует в дистрибутиве 3.2.

Надо в обновлялке предусмотреть удаление устаревшего класса.
« Последнее редактирование: 21.12.2013, 11:33:27 от Arkadiy »

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
Слишком много незнакомых буквосочетаний. Ты хочешь сказать что если отключить этот плагин, то обновление пройдет до конца и устаревший класс удалится?

*

Оффлайн HiopsNerevar

  • *****
  • 656
  • [+]88 / [-]0
  • Я удобный.
    • Просмотр профиля
Была такая же ситуация. Я вообще изначально думал что если отключить вообще ВСЕ, процесс пройдет гладко и безболезненно. Отнюдь. Помимо этой были проблемы с удаление папок и обновлением БД. В результате довести до рабочего состояния сайт пока так и не удалось.
Это бидаль пича.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
У меня после описанных в первом посте действий сайт работает.

*

Оффлайн HiopsNerevar

  • *****
  • 656
  • [+]88 / [-]0
  • Я удобный.
    • Просмотр профиля
Сейчас попробовал обновить сайт не на локалке а на хостинге. Создал подомен. Процесс тоже решил провести не совсем обычно. Как обычно отключил все что можно. Главное отличие - выбрал загрузку пакета по FTP. Также выключил сайт. Прошло все быстро и идеально. Я в шоке. Все работает. Ошибку remember не выдает. Вообще ошибок нет.
Это бидаль пича.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
Изначально какой дистриб был установлен?

*

Оффлайн HiopsNerevar

  • *****
  • 656
  • [+]88 / [-]0
  • Я удобный.
    • Просмотр профиля
Это бидаль пича.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru

*

Оффлайн HiopsNerevar

  • *****
  • 656
  • [+]88 / [-]0
  • Я удобный.
    • Просмотр профиля
Нет. Устанавливал вчера через компонент Обновление. Накатил сразу 3.2.1. Но дело мне кажется не в версии. Так как до этого 3.2.1 устанавливалась криво.
Это бидаль пича.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
А я думаю, что дело в 3.1, если ее небыло, то все путем, если была, то появляется лишний файл. Это можно вычислить только сравнением дистрибутивов, но на это времени нет.

*

Оффлайн mr_green

та же проблема. вы помогли спасибо! я обновлялся с 3.0.3
правда теперь не работает админка: Table 'denny1_inshop.hf5vi_postinstall_messages' doesn't exist SQL=SHOW FULL COLUMNS FROM `hf5vi_postinstall_messages`
что с базой может быть?
как понял нет таблицы _postinstall_messages как её правильно вписать? в sql слабо понимаю (
« Последнее редактирование: 29.12.2013, 02:40:40 от mr_green »

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

*

Оффлайн mr_green

решил )) https://github.com/joomla/joomla-cms/blob/master/installation/sql/mysql/joomla.sql#L1495 (не знаю можно ли ссылки выкладывать, если что соррь) тут запрос нашёл на создание этой таблицы, выполнил, заработало.. за одно начал работать плагин Saxum IPLogger, видать после обновления.. всем спасибо ))

*

Оффлайн Coresolo

  • ***
  • 43
  • [+]1 / [-]0
  • Fishishere.com©Ваш лучший улов в океане интернета!
    • Просмотр профиля
У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}


Столкнулся с такой же проблемой. Решил её так:
Совершил первое действие описанное в первом посте и после этого смог попасть в админку. На второе ума не хватило. Потом скачал заплатку по этой ссылке http://joomlacode.org/gf/download/frsrelease/19008/134339/Joomla_3.2.x_to_3.2.1-Stable-Patch_Package.zip установил ее из админки и все заработало.
Всем спасибо за подсказки.
Благодарность в виде плюсов всегда радует :-)

 *DRINK* АЙ ДА МОЛОДЦА!

Аркадию большое спасибо.

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru

Присоединяюсь к zegamind. Специально зарегистрировалась здесь, чтобы сказать спасибо Аркадию  :-* Изменила только плагин remember, и все заработало! Ура!

*

Оффлайн stylus83

У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}


Я не могу найти такие строки у меня. Вот что у меня

<?php
/**
 * @package     Joomla.Plugin
 * @subpackage  System.remember
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Joomla! System Remember Me Plugin
 *
 * @package     Joomla.Plugin
 * @subpackage  System.remember
 * @since       1.5
 */

class PlgSystemRemember extends JPlugin
{
   /**
    * Application object.
    *
    * @var    JApplicationCms
    * @since  3.2
    */
   protected $app;

   /**
    * Remember me method to run onAfterInitialise
    * Only purpose is to initialise the login authentication process if a cookie is present
    *
    * @return  void
    *
    * @since   1.5
    * @throws  InvalidArgumentException
    */
   public function onAfterInitialise()
   {
      // No remember me for admin.
      if ($this->app->isAdmin())
      {
         return;
      }

      // Check for a cookie if user is not logged in
      if (JFactory::getUser()->get('guest'))
      {
         $cookieName = JUserHelper::getShortHashedUserAgent();

         // Check for the cookie
         if ($this->app->input->cookie->get($cookieName))
         {
            $this->app->login(array('username' => ''), array('silent' => true));
         }
      }
   }

   /**
    * Imports the authentication plugin on user logout to make sure that the cookie is destroyed.
    *
    * @param   array  $user     Holds the user data.
    * @param   array  $options  Array holding options (remember, autoregister, group).
    *
    * @return  boolean
    */
   public function onUserLogout($user, $options)
   {
      // No remember me for admin
      if ($this->app->isAdmin())
      {
         return true;
      }

      $cookieName = JUserHelper::getShortHashedUserAgent();

      // Check for the cookie
      if ($this->app->input->cookie->get($cookieName))
      {
         // Make sure authentication group is loaded to process onUserAfterLogout event
         JPluginHelper::importPlugin('authentication');
      }

      return true;
   }
}


*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
Значит у вас более новая версия чем здесь обсуждается.

*

Оффлайн stylus83

Значит у вас более новая версия чем здесь обсуждается.
было написано обновить до 3.1.5. Так что ж можно сделать?

*

Оффлайн stylus83

при том что админка работает, только в панели управления выдает ошибку
Table 'arbolsem_admin.eqrxm_postinstall_messages' doesn't exist SQL=SHOW FULL COLUMNS FROM `eqrxm_postinstall_messages`

*

Оффлайн Arkadiy

  • *****
  • 5340
  • [+]440 / [-]0
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
У вас ведь совсем другая ошибка. Первым делом создайте таблицу eqrxm_postinstall_messages

Всем привет. Помогите пожалуйста. После обновления с 3,0 на 3,2
Fatal error: Call to a member function isAdmin() on a non-object in Q:\home\phobos.kz\www\plugins\system\remember\remember.php on line 42
Тупо забить не могу. Руками работать не умею, Потому что Я дебил ))
Но готов научиться. Что делать?

   public function onAfterInitialise()
   {
      // No remember me for admin.
      if ($this->app->isAdmin())
      {
         return;
      }

      // Check for a cookie if user is not logged in
      if (JFactory::getUser()->get('guest'))
   
$this->app = JFactory::getApplication();   {
         $cookieName = JUserHelper::getShortHashedUserAgent();

         // Check for the cookie
         if ($this->app->input->cookie->get($cookieName))
         {
            $this->app->login(array('username' => ''), array('silent' => true));
         }
      }
   }

   /**
    * Imports the authentication plugin on user logout to make sure that the cookie is destroyed.
    *
    * @param   array  $user     Holds the user data.
    * @param   array  $options  Array holding options (remember, autoregister, group).
    *
    * @return  boolean
    */
   public function onUserLogout($user, $options)
   {
      // No remember me for admin
      if ($this->app->isAdmin())
      {
         return true;
      }

      $cookieName = JUserHelper::getShortHashedUserAgent();

      // Check for the cookie
      if ($this->app->input->cookie->get($cookieName))
      {
         // Make sure authentication group is loaded to process onUserAfterLogout event
         JPluginHelper::importPlugin('authentication');
      }

      return true;
   }
}

Как правильно вписать что он хочет не знаю.
« Последнее редактирование: 27.05.2014, 16:30:17 от Phobosm10 »