Главной целью практически любого ревью является отсев деффектов, а в последнюю очередь просев форматирования. Посему, именно на них стоит концентрировать внимание в первую очередь при прогоне глазами кода.
Вот этапы, которые лично я использую в ревью (можно предлагать в комментах дополнения):
1.1. Находим функции темизации и детально анализируем что выводится. Именно в них присутствует большинство XSS. Важно помнить, что это касается не только модулей, но и темы.
1.2. Если функций нет или мы всех их прошли, просматриваем код на наличие запросов в базу и *_load функций. Отслеживаем куда ведут эти данные и ловим XSS. На этом этапе можно сразу проверять запросы — на отсутсвие переменных прямо в запросе (SQL injections), на правильную фильтрацию, а также правильное использование API, как в случае с LIMIT, которы пашет в зависимости от СУБД по-разному.
2. Поиск багов перевода
2.1. Ищете любые строки в коде. Они могут не переводится только в трех случаях — в хуке меню, в хуке схемы и когда там перевод мало нужен (чтобы не засорять бд).
2.2. Анализируете все вызовы t(). В них не должно быть любой динамики. Вся динамика вставляется через плейсхолдеры. Будьте бдительны, так как тут может скрываться XSS, если используются плейсхолдеры с префиксом!
2.3. Номера переводятся через format_plural().
2.4. watchdog() переводит все сам, не нужно пихать в него динамики и уже переведенных строк
2.5. Стоит помнить, что в некоторых случаях, как то рассылка писем, стоит использовать не текущий язык, а предпочитаемый язык конкретного пользователя.
3. Поиск багов темизации
3.1. Прямые вызовы theme_*.
3.2. Объявление функции темизации без определения hook_theme().
3.3. Большие куски HTML кода практически всегда оправданно совать в шаблоны.
3.4. Изменение вывода в хуках node_api вмесмто использования препроцессинг функции.
3.5. В препроцессинг функциях переменная $vars а использование $variables и наоборот.
«Наших» модулей оказалось довольно много и, даже просто рассказывая в одном предложении про каждый из модулей, мы бы потратили не один час. Очень порадовало то, что были вопросы о том, как опубликовать свой модуль? какие преимущества? и др.
Сейчас процедура получения права на публикацию модуля усложнилась, но это к лучшему. Благодаря такой процедуре, будут отсеиваться бесполезные модули и те, которые дублируют без особых причин функционал уже существующих модулей.
В то время как ваш модуль может находиться в песочнице длительное время, вы можете уже сейчас публиковать патчи, которые исправляют ошибки или добавляют новые фичи в существующие contrib-модули, разработчиком которых вы не являетесь.
Contrib-модулями называются модули, которые были созданы и опубликованы на drupal.org сторонними разработчиками. Любой желающий может их использовать (contribution).
23-го апреля в Москве состоялась конференция DrupalConf. Наша доблестная команда в составе 4х человек тоже посетила событие, поэтому, спешу поделиться впечатлениями.
Конференция прошла в районе ВДНХ. Я был в Москве первый раз, поэтому все время был под впечатлением окружающих соружений и памятников:
Сжатие файлов уменьшает трафик от сервера к посетителю сайта, а значит посетитель сможет быстрее загрузить страницу и сервер не будет передавать "лишний" трафик.
Мы с вами рассмотрим:
Какие бывают виды сжатия?
Что предлагает ядро Drupal для решения этой проблемы?
Ведение проектов веб-студии требует наличия ряда инструментов:
Система управления проектами (планирование, задачи)
Багтрекер (ведение разработки и учет деффектов)
Система управления кодом (администрирование репозиториями)
Система документооборота (хранение общей и проектной документации)
Система биллинга времени (слежение за расходом времени на задачи)
Система рассчетов и бухгалтерии
Существует масса конкретных продуктов и решений для каждой из этих категорий, и я не буду расписывать все их. Вместо этого, я опишу что использовали мы, как эволюциировал наш выбор и на чем вы в конце-концов остановились.
Одним из самых развиваемых направлений сайтостроения в последние годы являются социальные сети, главная задача такого сайта дать большему количеству людей площадку для общения. Количество пользователей сайта возрастает и уследить изменения которые они делают ставится все сложнее. Для удобного наблюдения за активностью сайта или пользователя существуют специальные модули, которые мы сейчас и рассмотрим.
Цель рассматриваемых модулей отследить действия пользователя и вывести в удобном виде. Чем больше действий модуль может фиксировать тем лучше. Другой важный показатель — интеграция с другими модулями и наличие развитого API.
В последнее время NoSQL стало модным словом в веб-разработке. Некоторые проекты используют подобные БД для узких частей архитектуры, некоторые мигрируют на них полностью. Такие БД как правило отличаются от реляционных простой архитектурой и высокой масштабируемостью. На данный момент нас интересует MongoDB как одна из наиболее популярных NoSQL баз данных. Постараемся выделить сильные и слабые стороны, рассмотреть некоторые особенности разработки, область применения в друпале, а также постараемся понять на практическом примере что означает термин Map/Reduce.
MongoDB это что-то среднее между key-value хранилищами (которые обычно быстры и масштабируемы) и традиционными реляционными базами данных (MySQL, PostgreSQL и т.п.), которые предоставляют расширенные запросы и богатый функционал.
В первой части статьи про составное CCK-поле это поле было создано. Настало время добавить к этому полю отрисовку графиков в реальном времени. Этому и будет посвящена вторая часть статьи.
Напомню, что в конце первой части статьи мы получили вот такое поле:
Мы добавим на форму создания ноды таблицу, где пользователь сможет вносить данные и добавлять нужное количество строк в таблице. Об этом будет первоя часть статьи. Также прикрутим отрисовку графика по этим данным в момент их ввода, то есть "на лету" - это уже вторая часть.
Основные проблемы, которые нужно решить:
Одна строка таблицы должна была стать единым элементом, чтобы можно было на этапе валидации проверить заполнение всех ячеек одной строки таблицы.
Вывод в виде таблицы как на форме, так и на странице ноды был четко указан на мокапе и в требованиях.
Возможность добавлять, обрабатывать и сохранять в базе неограниченное количество рядов данных.