SugarCRM: Невозможно создать Звонки / Встречи - PHP Пойманная фатальная ошибка с TimeDate :: _ getUserTZ () - PullRequest
2 голосов
/ 10 июня 2011

Helllo,
Недавно я обновился до 6,2 GA с 6.1.4 с помощью патча обновления.

Даже с тех пор я не могу создать ничего, что имеет прямое отношение к дате и времени, а именно: журналы вызовов, собрания и задачи.

Когда я делаю то же самое, используя подпанель, запись просто исчезает и НИКОГДА не создается.

Когда я пытаюсь выполнить один из соответствующих модулей в разделе Активности, при отправке я получаю ошибку HTTP 500 .

Журнал ошибок Apache показывает следующее:

PHP Catchable fatal error:  Argument 1 passed to TimeDate::_getUserTZ() must be 
an instance of User, boolean given, called in /home/crm/include/TimeDate.php on 
line 849 and defined in /home/crm/include/TimeDate.php on line 259, referer: 
http://mysite/index.php?module=Leads&offset=1&stamp=1307694072083825200&return_module=Leads&action=DetailView&record=xxxxxxxxxxxx

К сожалению, это случилось с рабочим сервером, и я заметил эту проблему слишком поздно.

Как я могу это исправить? Срочно ищу вашу помощь.

Спасибо, м ^ е

ОБНОВЛЕНИЕ 1

Мне удалось применить временный патч к этому, и он заработал ... Строка 849 TimeDate.php является частью функции, которая выглядит следующим образом:

function to_display_date_time($date, $meridiem = true, $convert_tz = true, $user = null)
{

    return $this->_convert($date,
        self::DB_DATETIME_FORMAT, self::$gmtTimezone, $this->get_date_time_format($user),
        $convert_tz ? $this->_getUserTZ($user) : self::$gmtTimezone, true);
} 

Эта функция в свою очередь вызывает другую _getUserTZ(), в которую предполагается передать переменную типа User. Вместо этого он проходит null.

Я использовал фрагмент, чтобы проверить наличие пустого $ user и присвоить ему значение, если это необходимо. Код является частью другой функции с именем _getUser(), найденной в этом же файле ....

protected function _getUser(User $user = null)
{
    if (empty($user)) {
        $user = $this->user;
    }
    if (empty($user)) {
        $user = $GLOBALS['current_user'];
    }
    return $user;
}

Я позаимствовал код из этой функции и вставил его внутрь to_display_date_time(), чтобы он выглядел следующим образом:

function to_display_date_time($date, $meridiem = true, $convert_tz = true, $user = null)
{
    if (empty($user)) {
        $user = $this->user;
    }
    if (empty($user)) {
        $user = $GLOBALS['current_user'];
    }
    return $this->_convert($date,
        self::DB_DATETIME_FORMAT, self::$gmtTimezone, $this->get_date_time_format($user),
        $convert_tz ? $this->_getUserTZ($user) : self::$gmtTimezone, true);
}

Теперь Звонки / Встречи снова работают ... но я все еще задаюсь вопросом, как на самом деле решить эту проблему. Мой путь должен оказаться быстрым решением для тех, кому нужно срочно исправить это.

Если кто-то может найти причину проблемы и более элегантное решение, я готов предложить вознаграждение.

Ура, м ^ е

...