diff --git a/main/inc/ajax/statistics.ajax.php b/main/inc/ajax/statistics.ajax.php index eedec70394..b3299167be 100644 --- a/main/inc/ajax/statistics.ajax.php +++ b/main/inc/ajax/statistics.ajax.php @@ -8,6 +8,8 @@ use Chamilo\CoreBundle\Component\Utils\ChamiloApi; */ require_once __DIR__.'/../global.inc.php'; +use Chamilo\CoreBundle\Component\Utils\ChamiloApi; + api_protect_admin_script(); $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null; diff --git a/src/CoreBundle/Component/Utils/ChamiloApi.php b/src/CoreBundle/Component/Utils/ChamiloApi.php index 3f30a2737a..df161994b2 100644 --- a/src/CoreBundle/Component/Utils/ChamiloApi.php +++ b/src/CoreBundle/Component/Utils/ChamiloApi.php @@ -289,4 +289,44 @@ class ChamiloApi return api_get_path(WEB_CSS_PATH).'editor_content.css'; } + /** + * Get a list of colors from the palette at main/palette/pchart/default.color + * and return it as an array of strings + * @param bool $decimalOpacity Whether to return the opacity as 0..100 or 0..1 + * @param bool $wrapInRGBA Whether to return it as 1,1,1,100 or rgba(1,1,1,100) + * @param int $fillUpTo If the number of colors is smaller than this number, generate more colors + * @return array An array of string colors + */ + public static function getColorPalette( + $decimalOpacity = false, + $wrapInRGBA = false, + $fillUpTo = null + ) { + // Get the common colors from the palette used for pchart + $paletteFile = api_get_path(SYS_CODE_PATH).'palettes/pchart/default.color'; + $palette = file($paletteFile); + if ($decimalOpacity) { + // Because the pchart palette has transparency as integer values + // (0..100) and chartjs uses percentage (0.0..1.0), we need to divide + // the last value by 100, which is a bit overboard for just one chart + foreach ($palette as $index => $color) { + $components = preg_split('/,/', trim($color)); + $components[3] = round($components[3] / 100, 1); + $palette[$index] = join(',', $components); + } + } + if ($wrapInRGBA) { + foreach ($palette as $index => $color) { + $palette[$index] = 'rgba('.$palette[$index].')'; + } + } + // If we want more colors, loop through existing colors + $count = count($palette); + if (isset($fillUpTo) && $fillUpTo > $count) { + for ($i = $count; $i < $fillUpTo; $i++) { + $palette[$i] = $palette[$i%$count]; + } + } + return $palette; + } }