Необходимо написать несколько небольших скриптов PHP.
Есть MySQL база к работающей CMS. Надо внести некоторые групповые изменения непосредственно в базу, поскольку такие групповые операции в CMS не предусмотрены.
Требования:
Защита от превышения тайминга: Предусмотреть защиту от сбоев в случае превышения лимита времени выполнения скрипта. (например, обрабатывать порциями по ххх-записей и сохранять индекс или еще как-нибудь)
Интерфейс: простейшая индикация выполнения (сообщить выполнен ли скрипт без ошибок или возникли затруднения) + лог совершенных действий.
Кодировка базы: UTF8
Безопасность: ничего особого не требуется – поставим .htpasswd
Задание 1: Скрипт для добавления изображений
Исходные данные:
-
Таблица mySQL.
-
Файлы изображений и с текстом на сервере в определенной директории. Файлы имеют имена в виде: <код>_xxx.<расширение>.
-
Вызов скрипта будет производиться удаленно. Строка вызова будет передавать параметры: <код>, <флаг текста>
Инструкция:
-
Найти в таблице запись, где id_external = <код>
-
Если найдено:
-
Ищем файлы, имена которых начинаются с <код>. Если найдено:
-
Файлы изображений (расширения .jpg .gif) перемещаются в рабочую директорию. Если в рабочей директории уже есть файлы с такими же названиями, то они заменяются на новые без предупреждений.
-
Имена файлов изображений с путем заносятся в поля найденной записи. Поле выбирается исходя их постфикса имени файла, в соответствие с таблицей из задания №2.
-
Если <флаг текста> установлен, то ищется файл с именем <код>_1.txt и содержимое вноситься в поле description. Текст перекодируется из win-1251 в UTF8.
-
Текстовые файлы удаляются, вне зависимости от установки флага.
-
Примечание: по идее все файлы в директории будут иметь в названии тот же <код> который предается, как параметр. Но если будут файлы, с другим <кодом> то они не должны попадать в запись.
-
Если не найдено:
-
Все файлы, имена которых начинаются с <код>, в исходной директории удаляются.
Задание 2: Обработка имеющихся записей
В таблице содержаться записи, в полях которых указаны ссылки на изображения. В базу изображения заносились вручную, и файлы изображений поименованы, как бог на душу положит
Иногда несколько записей ссылаются на одни и те же изображения.
Надо привести имена изображений к единому виду и для каждой записи должны быть свои, отдельные изображения в директории.
Исходные данные:
-
Таблица mySQL, в полях указаны ссылки на изображения
-
Файлы изображений там же на сервере
-
На одно и то же изображение могут быть ссылки в нескольких записях.
Инструкция:
-
Во всех существующих записях, в которых есть ссылки на изображения, изменить их:
-
Проверить нужно ли обрабатывать запись: если значение поля custom_field_48 > 9999, то запись пропускаем.
Если же нет, то делать следующее:
-
Скопировать файл изображения, на которое ссылается запись, под новым именем (<код> + постфикс). Значение <код> берется из поля id_external. В значении поля могут быть русские буквы – наследие 1С – их надо преобразовать в латинские (по любому алгоритму – лишь бы значение поля оставалось уникальным).
Известно, что файлов с именами, под которыми их будем копировать, в директории нет - конфликтов не будет.
Если изображение на которое ссылается значение в поле, то поле очищается – пустая строка или NULL.
-
Если исходное изображение находиться не в директории /_mod_files/ce_images/eshop/ , то записать его название с полным путем в отдельный лог, чтобы потом можно было их вычистить.
-
Изменить строку в записи на новое название изображения. Если поле пустое, то пропускаем его. Список полей в таблице 1 ниже.
-
Проверить наличие ссылок на изображения в поле description внутри html-текста (в теге img) (может пригодиться html-парсер). Если такая ссылка имеется, то создать копию файла изображения в директории /_mod_files/ce_images/eshop-in/ переименовать его и изменить ссылку в тексте на копию изображения и обновить поле description.
-
Значение поля custom_field_48 = custom_field_48 +10000.
-
После прохода по всем записям переместить все исходные изображения( в названии которых нет новых постфиксов) в отдельную директорию. (/_mod_files/ce_images/eshop/oldimg/ )
Таблица 1
Поле
|
Новое значение
|
Примечание
|
ext_picture
|
<код>_box1.<расширение>
|
Изображение. Меняем на новое имя (и новый путь, если перемещаем). Расширение оставляем какое было.
|
ext_popup_picture
|
<код>_box2.<расширение>
|
То же
|
ext_small_picture
|
<код>_box0.<расширение>
|
То же
|
custom_field_33
|
<код>_scr1.<расширение>
|
То же
|
custom_field_34
|
<код>_scr2.<расширение>
|
То же
|
custom_field_35
|
<код>_scr3.<расширение>
|
То же
|
custom_field_36
|
<код>_scr4.<расширение>
|
То же
|
custom_field_37
|
<код>_scr5.<расширение>
|
То же
|
description
|
<код>_add01.<расширение>
|
Изображение. Меняем на новое имя и новый путь. Расширение оставляем какое было. Число увеличиваем от 01 и далее, для каждой записи.
|
Задание 3: Добавление готовых данных
В запись добавить текст в html-виде и ссылки на изображения.
Исходные данные:
-
Таблица mySQL, в которой есть «незаполненные» записи.
-
Файлы изображений. Имена файлов уже имеют вид: <код> + постфикс. Код совпадает со значением поля id_external , постфикс указывает в какое поле вставлять ссылку на изображение.
-
Файлы с текстом. Имена файлов уже имеют вид: <код> + постфикс.
-
Файлы находятся уже на сервере в отдельной директории.
Инструкция:
-
Критерий «незаполненности»: для изображений - [поля ext_picture или ext_small_picture равны ‘’ или NULL], для текста - [длинна строки из поля description меньше 10 символов].
-
Проходим по всем записям, и если они «незаполнены», то смотрим есть ли файлы изображений имеющие в названии <код>_ и текстовые файлы (с расширением .txt) имя которых совпадает с <код>. Значение <код> берется из поля id_external
-
Найденные файлы изображений перемещаем из исходной директории в рабочую.
-
Текст добавляем в поле: description. При добавлении текста, переводим его в html: каждую строку текста превращаем в параграф (добавляем теги P в начало и конец). И переводим в кодировку UTF8 из win-1251.
-
При заполнении полей с именами файлов изображений:
выбираем поле в соответствии с постфиксом в названии файла
-
ext_picture _box1
-
ext_popup_picture _box2
-
ext_small_picture _box0
и добавляем путь: _mod_files/ce_images/eshop/ к названию файла.
Задание 4: Копирование контента
Маленький скрипт.
Копируем 1 запись в другую. С минимальным интерфейсом – 2 поля и 1 переключатель.
+ какой-нибудь стандартный парольный доступ к интерфейсу (желательно с привязкой к кукам – так чтобы удобно было заходить, без постоянного ввода пароля) – или что-то подобное на ваш выбор. Особой защиты от взлома не надо, так – чтобы случайно не зашли.
Исходные данные:
-
Таблица mySQL.
-
2 поля на экране: в 1 поле оператор вставляет значение id_external откуда копируем, во 2 поле – куда копируем.
-
Переключатель на экране - с обложкой или нет (по умолчанию - вЫключен): флаг1
Что надо:
-
Находим в таблице запись, где id_external = поле1 и копируем в запись, где id_external = поле2 следующие поля:
announce
special_announce
description
weight
custom_field_29
custom_field_30
custom_field_31
custom_field_32
custom_field_33
custom_field_34
custom_field_35
custom_field_36
custom_field_37
custom_field_42
custom_field_49
custom_field_50
custom_field_51
Если флаг1 включен, то следущие поля тоже:
ext_picture
ext_popup_picture
ext_small_picture
-
Сообщаем результаты операции – успешно или нет.
В качестве результата работы получаю от вас отлаженные php-скрипты.
Способы оплаты обсуждаются – если оплата по факту, то удобный для вас перевод денег, если предоплата - то «защищенная сделка».
При продолжении сотрудничества условия будем обсуждать.