Вкратце:
Fusion Charts – красивые flash-чарты и прочие графики.
dbFusionChartPlugin - обертка для Fusion Charts для Symfony. В общем-то довольно удобная.
В ходе работы с ним вылез баг – при установке пользовательского цвета для линии чарта, почему-то всегда отображался цвет по-умолчанию. При этом пустая строка вместо цвета позволяла переложить задачу раскраски на fusion charts. Пара возможных фиксов под катом.
Итак, проблемная строка plugins/dbFusionChartPlugin/lib/dbFC_Multi.class.php:165 (пришлось немного облагородить, чтобы подсветка кода прилично смотрелась)
public function qAddDataSet(
$seriesName="",
$color="",
$alpha=null,
$showValues=true,
$ratio="",
$dashed=false,
$includeLegend=true,
$atts=array()
)
{
if($seriesName) $atts["seriesName"] = $seriesName;
if($color) $atts["color"] = "CCCCCC";
...
Итак, проблема в том если $color не является пустой строкой или null, то в массив атрибутов добавляется цвет по умолчанию.
Первый вариант – мы хотим вернуть нормальное поведение данного куска кода, т.е. чтобы пользовательский цвет нормально передавался. В этом случае достаточно просто поправить условие в проблемной строке:
public function qAddDataSet(
$seriesName="",
$color="",
$alpha=null,
$showValues=true,
$ratio="",
$dashed=false,
$includeLegend=true,
$atts=array()
)
{
if($seriesName) $atts["seriesName"] = $seriesName;
//if($color) $atts["color"] = "CCCCCC"; // Было
if(empty($color)) $atts["color"] = "CCCCCC"; else $atts["color"] = $color; // Стало
...
Wow. Теперь переданный нами цвет должен нормально отображаться. Но мы потеряли такую интересную возможность как “раскраска по умолчанию”.
Второй вариант – поддерживаем все варианты раскраски.
public function qAddDataSet(
$seriesName="",
$color="",
$alpha=null,
$showValues=true,
$ratio="",
$dashed=false,
$includeLegend=true,
$atts=array()
)
{
if($seriesName) $atts["seriesName"] = $seriesName;
//if($color) $atts["color"] = "CCCCCC"; // Было
if(isset($color))
{
// Считаем что цвет определен пользователем
$atts["color"] = $color;
}
else
{
// Если $color пустая строка, занNULLяем $atts["color"], Если null, тогда устанавливаем цвет по-умолчанию - CCCCCC
$atts["color"] = ($color === "") ? null : "CCCCCC";
}
...
Теперь если $color:
- null – используется серый цвет по умолчанию
- “” (пустая строка) – fusion chart сам решит как раскрасить линии
- все остальное (вообще-то ожидается строка XXXXXX, описывающая цвет) – переданное значение будет использовано в качестве User-defined цвета.
That is all )