GLPI и последние обновления временных зон в Windows

    История одного подвига

    Несколько недель назад GLPI ни с того, ни с сего стал зависать на загрузке страницы заявки. Жалоба поступила от моих сослуживцев, когда я находился в отпуске. Открыв страницу в браузере я не обнаружил проблемы, о чем уведомил своих коллег.

    К сведению — у меня Firefox на Linux, а у них Chrome на Windows.

    Они настаивали на проблеме. И я специально установил на свой нетбук зоопарк браузеров: Chrome, Opera (Blink, Presto). Проверил работу с GLPI в них — проблемы не обнаружил. Когда вышел на работу, проверил на рабочем компьютере под Windows и с удивлением обнаружил, что кроме Firefox, ни один из выше перечисленных браузеров не грузит страницу задачи. По совету одного из знакомых php программистов полез в код страницы и выяснил, что загрузка спотыкается о javascript устанавливающих дату создания заявки и дату выполнения. Памятуя о последних обновлениях Windows, связанных с изменениями часового пояса во Владивостоке, из-за которых у меня время раньше положенного срока перескочило на час назад, я попробовал поменять часовой пояс с Владивосток на Брисбен — проблема пропала.

    Послесловие

    Хочу выразить особую благодарность scif, Андрею — системному администратору, который не дал мне забить на эту проблему и заставил меня с ней разобраться, а также компании Microsoft, благодаря которой у меня всегда будет работа.

    Не смотрите, что статья написана в столь легком стиле. Я потратил на решение этой проблемы целый день. Буду очень рад, если другим системным администраторам эта статья сэкономит время.

    Технические данные

    Зависшая страница не отвечала ни на какие действия, кроме закрытия вкладки. Процесс вкладки постепенно рос до 1ГБ, после чего браузер сообщал об ошибке загрузки страницы.

    Обновления Windows, которые вызвали проблему — KB2998527

    JavaScript, который вызывал проблему:
    <script type="text/javascript">Ext.onReady(function() {
             var md1665785715 = new Ext.ux.form.DateTime({
                hiddenName: 'date'
                ,id: 'date1665785715'
                ,value: '2014-10-21 17:05:01'
                ,hiddenFormat:'Y-m-d H:i:s'
                ,applyTo: 'showdate1665785715'
                ,timeFormat:'H:i'
                ,timeWidth: 55
                ,dateWidth: 90
                ,startDay: 1,allowBlank: false,timeConfig: {
             altFormats:'H:i:s',increment: 1,allowBlank: false},dateFormat: 'd-m-Y',dateConfig: {
                   altFormats:'d-m-Y|d-n-Y',allowBlank: false} });
          });</script>
    

    <script type="text/javascript">Ext.onReady(function() {
             var md33295515 = new Ext.ux.form.DateTime({
                hiddenName: 'due_date'
                ,id: 'date33295515'
                ,value: ''
                ,hiddenFormat:'Y-m-d H:i:s'
                ,applyTo: 'showdate33295515'
                ,timeFormat:'H:i'
                ,timeWidth: 55
                ,dateWidth: 90
                ,startDay: 1,allowBlank: true,timeConfig: {
             altFormats:'H:i:s',increment: 1,allowBlank: true},dateFormat: 'd-m-Y',dateConfig: {
                   altFormats:'d-m-Y|d-n-Y',allowBlank: true} });
          });</script>
    


    Дополнение к статье от 27.10.2014

    Пришли обновления Firefox, стала версия 33.0.1, и после перезагрузки браузера эта же проблема стала возникать и в Firefox. Какова мотивация разработчиков внедрять такие изменения?.. (это риторический вопрос)

    Only registered users can participate in poll. Log in, please.

    Кто, по вашему мнению, должен сделать исправления?

    • 8.3%JS разработчики2
    • 16.7%Разработчики сайтов использующие эту библиотеку JS4
    • 16.7%Разработчики браузеров4
    • 45.8%Разработчики Microsoft11
    • 12.5%Пускай мучаются админы на местах! А зачем им ещё деньги платят?..3
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 8

      +6
      Так в чем суть решения? Переводить Владивостокцев на Брисбен?
        +3
        Присоединяюсь. Тем более странно называть это подвигом.
        Автору рекомендую посмотреть предыдущие топики на тему JS+RTZ, например Хром, укравший рождество или Новая таймзона — новые проблемы, может, появятся более дельные мысли
          –2
          Благодарю за статьи. Мысль не в том, чтобы сделать чужую работу, а в том чтобы убрать возникшую проблему самым скорым образом.
          Я не знаю JavaScript, и уж точно не знаю причины, по которым Россия придумала считать время в обратном порядке от хода солнца. И уж тем более не знаю, как это реализовала Microsoft. Другой более умный человек, прочитав эту заметку может полезть и разобраться в причинах и устранить их. Тем более, что эту проблему можно решить с трёх сторон. Я одно решение описал, которое под силу любому начинающему эникуйщику.
          Подвигом это я назвал, потому что это для меня подвиг. Статья написана в повествовательном стиле на скорую руку, вечером за час времени.
          Вы могли бы предложить более дельные мысли, если считаете, что это не достойное решение.
          Конечно я бы мог потратить на изучение вопроса ещё неделю. А всё это время кто-то так же бы сидел с GLPI и ломал голову, почему у него не работает.
        +2
        Так же не понятно от чего зависит проблема. От каких конкретно обновлений?
          0
          Я в статью добавил — KB2998527.
            +1
            Так что вы предлагаете-то?
            Не ставить апдейт?
            Убивать часть скрипта, вызывающую проблему?
            И то и то как-то… не решение.
            Апдейт выполняет конкретную задачу — меняет часовой пояс.

            скрипт тоже выполняет задачу.

            Как вы у себя решили вопрос?
              0
              Я на клиентских компьютерах с виндой поставил часовой пояс другой страны, но тот же по расположению.
              У нас только администраторы смотрят GLPI, поэтому это оказалось наиболее быстрым и простым решением.
              Все претензии к компании Microsoft обращайте. Вы же не будете исправлять скрипт на всех сайтах, которые используют эту технологию?..
                +2
                Я так понимаю GLPI использует ExtJS 3 версии. Один из вариантов указать после инициализации ExtJS:
                Ext.override(Ext.form.TimeField, {
                    initDate: '2/1/2008'
                });
                


                подробнее «почему так»

                P.S.: этот пост навеял написать небольшую статью.

          Only users with full accounts can post comments. Log in, please.