Редактор файлов и коммандер на PHP(nikolaevevge.php)

Описание изменений

17 и 18 декабря 2023 г добавил функционал авторизации. Для вывода формы авторизации необходимо переключить переменную $authFormEnabled в true. Сделать это можно как в файле редактора изменив начальное значение переменной или в файле nikolaevevgeSettings.php, если значение указанной переменной указано в файле, то берётся из него. Так же для вывода формы требуется чтобы был указан логин в переменной $authLogin и название авторизационной cookie в переменной $authCookieName у обоих этих переменных указаны значения по умолчанию, можно оставить их как есть, таким образом для вывода формы их можно не указывать в файле настроек изменив только значение $authLogin на true. Если пароль не задан - будет выводиться форма авторизации содержащая только логин, если же задать переменную $authPassword, то к форме добавится поле для ввода пароля и для авторизации потребуется ввод логина и пароля заданных в соответствующих переменных. Так же можно изменить значение переменной безопасности $authHashSecurityKey она конкатинируется с логином и паролем, затем от получившейся последовательности вычисляется md5 hash и первые 20 символов от него используются в авторизационной cookie. Так же можно установить переменную $authExpirationTime в ней указывается числовое значение в секундах - сколько времени существует cookie авторизации. По умолчанию указано значение 0, то есть передавать cookie авторизации ок клиента серверу пока не закрыт браузер. Так же в этой версии редактора исходные значения переменных перемещены по коду выше вывода style, для того чтобы можно было устанавливать cookie авторизации.

Нужно будет написать что я делал 5 и 6 июня и с 12 по 14 июня 2021 года. В какие то из этих дней я точно делал удаление файлов по ajax для редактора. В другие даты я возможно делал чтобы поиск был регистронезависимым и искал по русским символам не зависимо от кодировки UTF-8 и cp1251.

26.06.2021 г было замечено что из редактора по ajax не удаётся сохранять файлы в браузерах Edge и Opera Gx - возникает ошибка не верного md5 хэша. Предположительно ошибка возникает поскольку в указанных браузерах иначе кодируются какие либо символы, например перенос строки. В планах разобраться в ситуации более детально и сделать возможность сохранения по ajax для всех современных браузеров.

Ранее редактор файлов при сохранении по Ajax указывал в качестве времени сохранения указывал серверное время, то есть время того часового пояса, который установлен в настройках сервера, а если данная настройка на сервере не была установлена то время по нулевому часовому поясу. Были внесены изменения в JavaScript и PHP код, после которых в Ajax запросе на сохранение файла передаётся часовой пояс получаемый из браузера, затем PHP скрипт возвращает время с учётом переданной информации о часовом поясе пользователя, а если эта информация по какой либо причине не будет передана, то время то будет возвращено время сохранения файла по нулевому часовому поясу. Возможно в дальнейшем работа редактора связанная с часовыми поясами будет пересмотрена и внедрена как для других модулей, так и для модуля сохранения файла по Ajax с целью стандартизации подхода. Текущее изменение было внесено 24.06.2021

Было обнаружено что редактор заменяет сочетание символов   после сохранения и повторного открытия на пробел. Предположительно такая же ситуация произойдёт и с символами используемыми для тегов(значки меньше и больше), а так же символы кавычек и знаком амперсенда. Данная ситуация была выявлена 21.06.2021 г, в планах её исправление, какие либо сроки пока не называются.

17.06.2021 г в редактор была добавлена возможность использовать файл конфигурации в котором можно настроить дирректории для исключения их из поиска. Более подробно данный функционал возможно будет анонсирован позднее.

Поскольку задачей редактора иногда является редактирование текста от копирайтера и его последующее размещение на сайте, то есть работа которая иногда включает в себя обрамление абзацев и списков специальными тегами в редактор было добавлено 2 сочетания клавиш, а именно: Ctrl+P и Ctrl+L, первое сочетание добавляет в начало и конце строки на которой находится курсор открывающий и закрывающие соответственно теги p, второе сочетание аналогично теги li. В дальнейшем логика работы данного функционала может быть пересмотрена, например может быть добавлена обработка отступов в начале строки, таким образом чтобы открывающий тег устанавливался после отступов. Указанный функционал был добавлен 15.06.2021 г.

3.06.2021 г была обнаружена ситуация, что после правки php файла из приведённого в данной статье редактора скрипт стал отрабатывать не корректно, а именно перестали корректно отображаться переносы строк из одного из полей запрашиваемого у базы данных. Возникло предположение, что редактор после пересохранения файла вырезал из него какие то символы и предположительно обработка возврата каретки. У отредактированного файла имелась более ранняя версия, которая работала корректно. На следующий день из старой версии в основной файл с помощью редактора NotePad++ был скопирован участок кода, который заменял у поля поступающего из базы переносы на новую строку HTML тегами, а за добавленным закрывающим HTML тегом так же добавлялся символ переноса строки(\n). После этих действий скрипт стал отрабатывать корректно. Указанная замена символа переноса строки в PHP файле производилась с использованием функции str_replace в первый параметр которой передавался перенос строки получаемый с помощью нажатия клавиши Enter внутри кавычек(то есть PHP строки), а не с помощью использования специальных символов, таких как \n или последовательности \r\n. В результате проведённого исследования корректно работающей версии файла полученной с использованием правок сделанных из NotePad++ и не корректно работающей версии файла полученной с использованием приведённого в статье редактора, оказалось что переносы строки редактор NotePad++ сохранил как один символ переноса строки(который можно получить с использованием комбинации \n), а приведённый в статье редактор перенос строки сохранил как 2 символа, которые можно получить используя последовательность \r\n. Оказалось что это происходит поскольку POST данные из поля TEXTAREA в PHP приходят с переносами строк состоящими из двух символов(а именно последовательности \r\n) это не смотря на то что если получить информацию из TextArea через JavaScript, то в барузере это поле будет содержать переносы строк обозначаемые одним символом(то есть \n). Данная ситуация привела к размышлениям, как же сделать редактор, чтобы он не повреждал структуру файла. Предполагаемых решений данной ситуации возникло несколько: 1) сделать поведение редактора в этой части аналогично поведению NotePad++ то есть всегда сохранять переносы строк в редактируемом файле в виде одного символа(\n), 2) давать пользователю возможность выбирать вариант сохранения при этом считывая исходную структуру файла и по-умолчанию предлагать её в случаи если иное поведение не указано в настройках. Таким образом в планах внедрить в редактор второй вариант поведения, если не будет найдена более правильная и удобная в использовании альтернатива.

Программисты на языке PHP наверняка сталкивались при разработке в выводом в браузер ошибок в которых содержится информация о строке в которой произошла проблема, найти данную строку в редакторе позволяет специальный счётчик строк, который в каких то редакторах расположен слева от каждой строки,а в каких то в каком либо ином месте и показывает строку на которой находится указатель курсора. Если в редакторе не предусмотрено аналогичного счётчика строк(хотя такой редактор как правило могут использовать только начинающие пользователи) то поиск строки в которой находится ошибка может быть затруднительным. У HTML тега textarea по умолчанию не предусмотрен вывод номера строки на которой находится курсор, а именно этот тег использует редактор код которого находится в листинге ниже. Для функционала по отображению номера строки в данном редакторе был добавлен специальный JavaScript код. Теперь при нажатии сочетания клавиш Ctrl + Enter всплывает alert в котором указывается номер строки на которой находится указатель курсора в textarea. Данное изменение было добавлено в версию редактора от 3.06.2021 г.

При наборе текста в поле Textarea в браузере не имеется прямой возможности вставит символ табуляции, поскольку при нажатии на клавиатуре кнопки TAB происходит перемещение фокуса на другие элементы и символ при этом не вставляется. При этом в PHP и JavaScript файлах символ табуляции применяется для создания отступов и выделения таким образом участков кода, поэтому для редактора PHP и JavaScript файлов переопределение работы клавиши TAB может быть достаточно удобным. Так в редактор был добавлен необходимый JavaScript который при нажатии клавиши TAB добавляет соответствующий символ в Textarea поле и при этом не переводится фокус на другие элементы. Данное изменение было выполнено 31.05.2021 г.

Возможно Вы использовали связку NotePad++ и WinSCP для работы с PHP файлами на сервере, тогда скорее всего Вы не только знаете но и использовали сочетание клавиш CTRL+S для сохранения изменений в файле. После того как одни из первых версий коммандера код которого Вы видите в листинге ниже были выпущены, по привычке я попробовал сохранить изменённый файл указанным выше сочетанием клавиш в результате чего получил стандартную форму браузера с предложением сохранить Web-страницу на диске локального компьютера, при этом ожидание было именно сохранение информации на сервере. В последней версии редактора внесены необходимые доработки, в результате чего сочетание клавиш CTRL+S сохраняет измёненный файл на сервере, а так же возвращает результат о успешном сохранении или информацию о ошибке. Таким образом работать в новом коммандере стало удобнее, а так же увеличилась скорость выполнения задач, поскольку для внесения изменений теперь не требуется наводить мышь на кнопку сохранения. Кроме того в результате внедрения технологии внесения изменений по Ajax указатель клавиатуры в поле Textaria более не возвращается в начало поле, а остаётся на своём месте, что так же исключило необходимость прокрутки поля к нужной строке после каждого сохранения. Данные изменения были внедрены 25.05.2021 г.

Последняя версия(31.12.2023)

Предыдущая версия

Файл настроек

Файл должен называться nikolaevevgeSettings.php находиться в директории nikolaevevge.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: