Патчим dbFusionChartPlugin 0.0.4 под Symfony 1.2

Вкратце:

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 )

This entry was posted in Профессиональное and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">