From e332de1d50c61af40173fea22a279440085af86e Mon Sep 17 00:00:00 2001 From: Vincent Augagneur Date: Fri, 20 Sep 2013 17:14:50 +0200 Subject: [PATCH 1/7] //blockrss now use boostrap design --- modules/blocknewsletter/blocknewsletter.php | 2 +- modules/blockrss/blockrss.php | 102 +++++++++++++------- 2 files changed, 69 insertions(+), 35 deletions(-) diff --git a/modules/blocknewsletter/blocknewsletter.php b/modules/blocknewsletter/blocknewsletter.php index 023771df5..e68bce7ff 100644 --- a/modules/blocknewsletter/blocknewsletter.php +++ b/modules/blocknewsletter/blocknewsletter.php @@ -551,7 +551,7 @@ class Blocknewsletter extends Module 'type' => 'text', 'label' => $this->l('Welcome voucher code'), 'name' => 'NW_VOUCHER_CODE', - 'class' => '.fixed-width-md', + 'class' => 'fixed-width-md', 'desc' => $this->l('Leave blank to disable by default.') ), ), diff --git a/modules/blockrss/blockrss.php b/modules/blockrss/blockrss.php index 102b1fbb8..266f816f4 100644 --- a/modules/blockrss/blockrss.php +++ b/modules/blockrss/blockrss.php @@ -63,14 +63,14 @@ class Blockrss extends Module public function getContent() { - $output = '

'.$this->displayName.'

'; + $output = ''; if (Tools::isSubmit('submitBlockRss')) { $errors = array(); - $urlfeed = Tools::getValue('urlfeed'); - $title = Tools::getValue('title'); - $nbr = (int)Tools::getValue('nbr'); + $urlfeed = Tools::getValue('RSS_FEED_URL'); + $title = Tools::getValue('RSS_FEED_TITLE'); + $nbr = (int)Tools::getValue('RSS_FEED_NBR'); if ($urlfeed AND !Validate::isAbsoluteUrl($urlfeed)) $errors[] = $this->l('Invalid feed URL'); @@ -113,36 +113,7 @@ class Blockrss extends Module $output .= $this->displayError(implode('
', $errors)); } - return $output.$this->displayForm(); - } - - public function displayForm() - { - $output = ' -
-
'.$this->l('Settings').' - -
- -

'.$this->l('Create a title for the block (default: \'RSS feed\')').'

- -
- -
- -

'.$this->l('Add the URL of the feed you want to use (sample: http://news.google.com/?output=rss)').'

- -
- -
- -

'.$this->l('Number of threads displayed by the block (default value: 5)').'

- -
-
-
-
'; - return $output; + return $output.$this->renderForm(); } function hookLeftColumn($params) @@ -193,4 +164,67 @@ class Blockrss extends Module { $this->context->controller->addCSS(($this->_path).'blockrss.css', 'all'); } + + public function renderForm() + { + $fields_form = array( + 'form' => array( + 'legend' => array( + 'title' => $this->l('Settings'), + 'icon' => 'icon-cogs' + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Block title'), + 'name' => 'RSS_FEED_TITLE', + 'desc' => $this->l('Create a title for the block (default: \'RSS feed\')'), + ), + array( + 'type' => 'text', + 'label' => $this->l('Add a feed URL'), + 'name' => 'RSS_FEED_URL', + 'desc' => $this->l('Add the URL of the feed you want to use (sample: http://news.google.com/?output=rss)'), + ), + array( + 'type' => 'text', + 'label' => $this->l('Number of threads displayed'), + 'name' => 'RSS_FEED_NBR', + 'class' => 'fixed-width-sm', + 'desc' => $this->l('Number of threads displayed by the block (default value: 5)'), + ), + ), + 'submit' => array( + 'title' => $this->l('Save'), + 'class' => 'btn btn-primary') + ), + ); + + $helper = new HelperForm(); + $helper->show_toolbar = false; + $helper->table = $this->table; + $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); + $helper->default_form_language = $lang->id; + $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; + $helper->identifier = $this->identifier; + $helper->submit_action = 'submitBlockRss'; + $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; + $helper->token = Tools::getAdminTokenLite('AdminModules'); + $helper->tpl_vars = array( + 'fields_value' => $this->getConfigFieldsValues(), + 'languages' => $this->context->controller->getLanguages(), + 'id_language' => $this->context->language->id + ); + + return $helper->generateForm(array($fields_form)); + } + + public function getConfigFieldsValues() + { + return array( + 'RSS_FEED_TITLE' => Tools::getValue('RSS_FEED_TITLE', Configuration::get('RSS_FEED_TITLE')), + 'RSS_FEED_URL' => Tools::getValue('RSS_FEED_URL', Configuration::get('RSS_FEED_URL')), + 'RSS_FEED_NBR' => Tools::getValue('RSS_FEED_NBR', Configuration::get('RSS_FEED_NBR')), + ); + } } From 4136697c5e12ca999235526db4a97fe56a3604f8 Mon Sep 17 00:00:00 2001 From: Vincent Augagneur Date: Fri, 20 Sep 2013 17:22:15 +0200 Subject: [PATCH 2/7] //blocksocial now use boostrap design --- modules/blocksocial/blocksocial.php | 94 +++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 24 deletions(-) diff --git a/modules/blocksocial/blocksocial.php b/modules/blocksocial/blocksocial.php index 389e68d7f..b26aa43a3 100644 --- a/modules/blocksocial/blocksocial.php +++ b/modules/blocksocial/blocksocial.php @@ -56,32 +56,16 @@ class blocksocial extends Module { // If we try to update the settings $output = ''; - if (isset($_POST['submitModule'])) + if (Tools::isSubmit('submitModule')) { - Configuration::updateValue('blocksocial_facebook', (($_POST['facebook_url'] != '') ? $_POST['facebook_url']: '')); - Configuration::updateValue('blocksocial_twitter', (($_POST['twitter_url'] != '') ? $_POST['twitter_url']: '')); - Configuration::updateValue('blocksocial_rss', (($_POST['rss_url'] != '') ? $_POST['rss_url']: '')); + Configuration::updateValue('blocksocial_facebook', (($_POST['blocksocial_facebook'] != '') ? $_POST['blocksocial_facebook']: '')); + Configuration::updateValue('blocksocial_twitter', (($_POST['blocksocial_twitter'] != '') ? $_POST['blocksocial_twitter']: '')); + Configuration::updateValue('blocksocial_rss', (($_POST['blocksocial_rss'] != '') ? $_POST['blocksocial_rss']: '')); $this->_clearCache('blocksocial.tpl'); - $output = '
'.$this->l('Configuration updated').'
'; + $output .= $this->displayConfirmation($this->l('Configuration updated')); } - return ' -

'.$this->displayName.'

- '.$output.' -
-
- - -
 
- - -
 
- - -
 
-
-
-
'; + return $output.$this->renderForm(); } public function hookDisplayHeader() @@ -100,5 +84,67 @@ class blocksocial extends Module return $this->display(__FILE__, 'blocksocial.tpl', $this->getCacheId()); } -} -?> + + public function renderForm() + { + $fields_form = array( + 'form' => array( + 'legend' => array( + 'title' => $this->l('Settings'), + 'icon' => 'icon-cogs' + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Facebook URL:'), + 'name' => 'blocksocial_facebook', + 'desc' => $this->l('Create a title for the block (default: \'RSS feed\')'), + ), + array( + 'type' => 'text', + 'label' => $this->l('Twitter URL:'), + 'name' => 'blocksocial_twitter', + 'desc' => $this->l('Add the URL of the feed you want to use (sample: http://news.google.com/?output=rss)'), + ), + array( + 'type' => 'text', + 'label' => $this->l('RSS URL:'), + 'name' => 'blocksocial_rss', + 'desc' => $this->l('Number of threads displayed by the block (default value: 5)'), + ), + ), + 'submit' => array( + 'title' => $this->l('Save'), + 'class' => 'btn btn-primary') + ), + ); + + $helper = new HelperForm(); + $helper->show_toolbar = false; + $helper->table = $this->table; + $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); + $helper->default_form_language = $lang->id; + $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; + $helper->identifier = $this->identifier; + $helper->submit_action = 'submitModule'; + $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; + $helper->token = Tools::getAdminTokenLite('AdminModules'); + $helper->tpl_vars = array( + 'fields_value' => $this->getConfigFieldsValues(), + 'languages' => $this->context->controller->getLanguages(), + 'id_language' => $this->context->language->id + ); + + return $helper->generateForm(array($fields_form)); + } + + public function getConfigFieldsValues() + { + return array( + 'blocksocial_facebook' => Tools::getValue('blocksocial_facebook', Configuration::get('blocksocial_facebook')), + 'blocksocial_twitter' => Tools::getValue('blocksocial_twitter', Configuration::get('blocksocial_twitter')), + 'blocksocial_rss' => Tools::getValue('blocksocial_rss', Configuration::get('blocksocial_rss')), + ); + } + +} \ No newline at end of file From 504485cef385a5188ef3342296d8ced83dccfac7 Mon Sep 17 00:00:00 2001 From: Vincent Augagneur Date: Fri, 20 Sep 2013 17:51:24 +0200 Subject: [PATCH 3/7] //blockspecials now use bootstrap design --- modules/blockspecials/blockspecials.php | 99 ++++++++++++++++++------- 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/modules/blockspecials/blockspecials.php b/modules/blockspecials/blockspecials.php index 3be99ed9d..855434267 100644 --- a/modules/blockspecials/blockspecials.php +++ b/modules/blockspecials/blockspecials.php @@ -69,38 +69,14 @@ class BlockSpecials extends Module public function getContent() { - $output = '

'.$this->displayName.'

'; + $output = ''; if (Tools::isSubmit('submitSpecials')) { - Configuration::updateValue('PS_BLOCK_SPECIALS_DISPLAY', (int)Tools::getValue('always_display')); + Configuration::updateValue('PS_BLOCK_SPECIALS_DISPLAY', (int)Tools::getValue('PS_BLOCK_SPECIALS_DISPLAY')); Configuration::updateValue('BLOCKSPECIALS_NB_CACHES', (int)Tools::getValue('BLOCKSPECIALS_NB_CACHES')); - $output .= '
'.$this->l('Settings updated').'
'; + $output .= $this->displayConfirmation($this->l('Settings updated')); } - return $output.$this->displayForm(); - } - - public function displayForm() - { - return ' -
-
- '.$this->l('Settings').' - -
- - - - -

'.$this->l('Show the block even if no product is available.').'

-
- -
- -

'.$this->l('Specials are displayed randomly on the front end, but since it takes a lot of ressources, it is better to cache the results. Cache is reset everyday. 0 will disable the cache.').'

-
-
-
-
'; + return $output.$this->renderForm(); } public function hookRightColumn($params) @@ -152,4 +128,71 @@ class BlockSpecials extends Module { $this->_clearCache('blockspecials.tpl'); } + + public function renderForm() + { + $fields_form = array( + 'form' => array( + 'legend' => array( + 'title' => $this->l('Settings'), + 'icon' => 'icon-cogs' + ), + 'input' => array( + array( + 'type' => 'switch', + 'label' => $this->l('Always display this block.'), + 'name' => 'PS_BLOCK_SPECIALS_DISPLAY', + 'desc' => $this->l('Show the block even if no products are available.'), + 'values' => array( + array( + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->l('Enabled') + ), + array( + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->l('Disabled') + ) + ), + ), + array( + 'type' => 'text', + 'label' => $this->l('Number of cache files.'), + 'name' => 'BLOCKSPECIALS_NB_CACHES', + 'desc' => $this->l('Specials are displayed randomly on the front end, but since it takes a lot of ressources, it is better to cache the results. Cache is reset everyday. 0 will disable the cache.'), + ), + ), + 'submit' => array( + 'title' => $this->l('Save'), + 'class' => 'btn btn-primary') + ), + ); + + $helper = new HelperForm(); + $helper->show_toolbar = false; + $helper->table = $this->table; + $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); + $helper->default_form_language = $lang->id; + $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; + $helper->identifier = $this->identifier; + $helper->submit_action = 'submitSpecials'; + $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; + $helper->token = Tools::getAdminTokenLite('AdminModules'); + $helper->tpl_vars = array( + 'fields_value' => $this->getConfigFieldsValues(), + 'languages' => $this->context->controller->getLanguages(), + 'id_language' => $this->context->language->id + ); + + return $helper->generateForm(array($fields_form)); + } + + public function getConfigFieldsValues() + { + return array( + 'PS_BLOCK_SPECIALS_DISPLAY' => Tools::getValue('PS_BLOCK_SPECIALS_DISPLAY', Configuration::get('PS_BLOCK_SPECIALS_DISPLAY')), + 'BLOCKSPECIALS_NB_CACHES' => Tools::getValue('BLOCKSPECIALS_NB_CACHES', Configuration::get('BLOCKSPECIALS_NB_CACHES')), + ); + } } \ No newline at end of file From 02e5913dd61c8590e6d170ccc141f3626f93600d Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 20 Sep 2013 14:44:51 +0200 Subject: [PATCH 4/7] // Fixed potential warning --- controllers/admin/AdminStatsTabController.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/controllers/admin/AdminStatsTabController.php b/controllers/admin/AdminStatsTabController.php index 8c2c0e157..d0a91c0d3 100644 --- a/controllers/admin/AdminStatsTabController.php +++ b/controllers/admin/AdminStatsTabController.php @@ -143,8 +143,13 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor $module_instance = array(); foreach ($modules as $m => $module) { - $module_instance[$module['name']] = Module::getInstanceByName($module['name']); - $modules[$m]['displayName'] = $module_instance[$module['name']]->displayName; + if ($module_instance[$module['name']] = Module::getInstanceByName($module['name'])) + $modules[$m]['displayName'] = $module_instance[$module['name']]->displayName; + else + { + unset($module_instance[$module['name']]); + unset($modules[$m]); + } } uasort($modules, array($this, 'checkModulesNames')); From ed1574e9edcdae921de0af4114230617e6bf2d72 Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 20 Sep 2013 18:11:59 +0200 Subject: [PATCH 5/7] // Finished nvd3 chart --- modules/graphnvd3/graphnvd3.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/graphnvd3/graphnvd3.php b/modules/graphnvd3/graphnvd3.php index bf0d25e40..14685e5cd 100644 --- a/modules/graphnvd3/graphnvd3.php +++ b/modules/graphnvd3/graphnvd3.php @@ -78,8 +78,8 @@ class GraphNvD3 extends ModuleGraphEngine nv.models.lineChart()', 'pie' => ' nv.models.pieChart() - .x(function(d) {return d.label}) - .y(function(d) {return d.value}) + .x(function(d) { return d.label; }) + .y(function(d) { return d.value; }) .showLabels(true) .showLegend(false)' ); @@ -150,12 +150,17 @@ class GraphNvD3 extends ModuleGraphEngine { $nvd3_values = array(); if (Tools::getValue('type') == 'pie') + { foreach ($this->_values as $x => $y) $nvd3_values[] = array('label' => $this->_legend[$x], 'value' => $y); + $array['data'] = $nvd3_values; + } else + { foreach ($this->_values as $x => $y) $nvd3_values[] = array('x' => $x, 'y' => $y); - $array['data'][] = array('values' => $nvd3_values, 'key' => $this->_titles['main']); + $array['data'][] = array('values' => $nvd3_values, 'key' => $this->_titles['main']); + } } else foreach ($this->_values as $layer => $gross_values) From 1fe17f0eb1954048f02ae244caf0c8baeb3a69c2 Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 20 Sep 2013 18:18:04 +0200 Subject: [PATCH 6/7] // Removed deprecated option form in stats --- .../themes/default/template/controllers/stats/engines.tpl | 5 ++--- admin-dev/themes/default/template/controllers/stats/menu.tpl | 3 ++- controllers/admin/AdminStatsTabController.php | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/admin-dev/themes/default/template/controllers/stats/engines.tpl b/admin-dev/themes/default/template/controllers/stats/engines.tpl index f073ab22c..0078a01b8 100644 --- a/admin-dev/themes/default/template/controllers/stats/engines.tpl +++ b/admin-dev/themes/default/template/controllers/stats/engines.tpl @@ -23,7 +23,7 @@ * International Registered Trademark & Property of PrestaShop SA *} -
+{*

{l s='Settings'}

@@ -66,5 +66,4 @@

-
- \ No newline at end of file +*} \ No newline at end of file diff --git a/admin-dev/themes/default/template/controllers/stats/menu.tpl b/admin-dev/themes/default/template/controllers/stats/menu.tpl index c21a6304e..d94a14790 100644 --- a/admin-dev/themes/default/template/controllers/stats/menu.tpl +++ b/admin-dev/themes/default/template/controllers/stats/menu.tpl @@ -34,4 +34,5 @@ {else} {l s='No module has been installed.'} {/if} - \ No newline at end of file + + \ No newline at end of file diff --git a/controllers/admin/AdminStatsTabController.php b/controllers/admin/AdminStatsTabController.php index d0a91c0d3..386139bf5 100644 --- a/controllers/admin/AdminStatsTabController.php +++ b/controllers/admin/AdminStatsTabController.php @@ -51,7 +51,6 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor } $this->content .= $this->displayMenu(); - $this->content .= $this->displayEngines(); $this->content .= $this->displayCalendar(); $this->content .= $this->displayStats(); @@ -110,6 +109,7 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor return $tpl->fetch(); } + /* Not used anymore, but still work */ protected function displayEngines() { $tpl = $this->createTemplate('engines.tpl'); From dadf83d6f605ecb3ae5399e55ca401111a8b5c4c Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 20 Sep 2013 18:27:35 +0200 Subject: [PATCH 7/7] [*] BO : removed deprecated chart engines --- install-dev/upgrade/sql/1.6.0.1.sql | 1 + .../graphartichow/artichow/AntiSpam.class.php | 224 --- .../graphartichow/artichow/Artichow.cfg.php | 84 - .../graphartichow/artichow/BarPlot.class.php | 364 ---- .../artichow/Component.class.php | 415 ----- .../graphartichow/artichow/Graph.class.php | 412 ----- .../graphartichow/artichow/Image.class.php | 606 ------- .../graphartichow/artichow/LinePlot.class.php | 585 ------- .../graphartichow/artichow/MathPlot.class.php | 438 ----- .../graphartichow/artichow/Pattern.class.php | 96 -- modules/graphartichow/artichow/Pie.class.php | 694 -------- modules/graphartichow/artichow/Plot.class.php | 1463 ----------------- .../artichow/ScatterPlot.class.php | 300 ---- modules/graphartichow/artichow/cache/Abel | Bin 15596 -> 0 bytes .../graphartichow/artichow/cache/Abel-time | 2 - modules/graphartichow/artichow/cache/Albert | Bin 14816 -> 0 bytes .../graphartichow/artichow/cache/Albert-time | 2 - .../graphartichow/artichow/cache/Example-006 | Bin 13372 -> 0 bytes .../artichow/cache/Example-006-time | 2 - .../graphartichow/artichow/cache/index.php | 35 - modules/graphartichow/artichow/common.php | 96 -- modules/graphartichow/artichow/font/Tuffy.ttf | Bin 19300 -> 0 bytes .../graphartichow/artichow/font/TuffyBold.ttf | Bin 16440 -> 0 bytes .../artichow/font/TuffyBoldItalic.ttf | Bin 18068 -> 0 bytes .../artichow/font/TuffyItalic.ttf | Bin 18904 -> 0 bytes modules/graphartichow/artichow/font/index.php | 35 - .../graphartichow/artichow/images/book.png | Bin 797 -> 0 bytes .../graphartichow/artichow/images/error.png | Bin 6066 -> 0 bytes .../artichow/images/errors/index.php | 35 - .../images/errors/missing-anti-aliasing.png | Bin 7634 -> 0 bytes .../artichow/images/errors/missing-gd2.png | Bin 7448 -> 0 bytes .../graphartichow/artichow/images/index.php | 35 - .../artichow/images/paperclip.png | Bin 452 -> 0 bytes .../graphartichow/artichow/images/star.png | Bin 748 -> 0 bytes .../graphartichow/artichow/inc/Axis.class.php | 768 --------- .../artichow/inc/Border.class.php | 197 --- .../artichow/inc/Color.class.php | 165 -- .../artichow/inc/Driver.class.php | 724 -------- .../graphartichow/artichow/inc/Font.class.php | 262 --- .../artichow/inc/Gradient.class.php | 135 -- .../graphartichow/artichow/inc/Grid.class.php | 290 ---- .../artichow/inc/Label.class.php | 587 ------- .../artichow/inc/Legend.class.php | 709 -------- .../graphartichow/artichow/inc/Mark.class.php | 489 ------ .../graphartichow/artichow/inc/Math.class.php | 831 ---------- .../artichow/inc/Shadow.class.php | 405 ----- .../graphartichow/artichow/inc/Text.class.php | 233 --- .../graphartichow/artichow/inc/Tick.class.php | 343 ---- .../artichow/inc/Tools.class.php | 174 -- .../artichow/inc/drivers/gd.class.php | 1335 --------------- .../artichow/inc/drivers/index.php | 35 - .../artichow/inc/drivers/ming.class.php | 773 --------- modules/graphartichow/artichow/inc/index.php | 35 - modules/graphartichow/artichow/index.php | 35 - .../artichow/patterns/BarDepth.php | 84 - .../artichow/patterns/LightLine.php | 49 - .../graphartichow/artichow/patterns/index.php | 35 - modules/graphartichow/config.xml | 12 - modules/graphartichow/graphartichow.php | 369 ----- modules/graphartichow/index.php | 35 - modules/graphartichow/logo.gif | Bin 1042 -> 0 bytes modules/graphartichow/logo.png | Bin 1993 -> 0 bytes modules/graphartichow/translations/index.php | 35 - modules/graphgooglechart/config.xml | 12 - modules/graphgooglechart/graphgooglechart.php | 247 --- modules/graphgooglechart/index.php | 35 - modules/graphgooglechart/logo.gif | Bin 953 -> 0 bytes modules/graphgooglechart/logo.png | Bin 1993 -> 0 bytes .../graphgooglechart/translations/index.php | 35 - modules/graphvisifire/config.xml | 12 - modules/graphvisifire/graphvisifire.php | 186 --- modules/graphvisifire/index.php | 35 - modules/graphvisifire/logo.gif | Bin 1012 -> 0 bytes modules/graphvisifire/logo.png | Bin 2034 -> 0 bytes modules/graphvisifire/translations/index.php | 35 - modules/graphvisifire/visifire/Visifire.js | 353 ---- modules/graphvisifire/visifire/Visifire.xap | Bin 152606 -> 0 bytes modules/graphvisifire/visifire/index.php | 35 - modules/graphxmlswfcharts/config.xml | 12 - .../graphxmlswfcharts/graphxmlswfcharts.php | 258 --- modules/graphxmlswfcharts/index.php | 35 - modules/graphxmlswfcharts/logo.gif | Bin 979 -> 0 bytes modules/graphxmlswfcharts/logo.png | Bin 1280 -> 0 bytes .../graphxmlswfcharts/translations/index.php | 35 - .../xml_swf_charts/AC_RunActiveContent.js | 292 ---- .../xml_swf_charts/charts.swf | Bin 51456 -> 0 bytes .../xml_swf_charts/charts.txt | 1 - .../xml_swf_charts/charts_library/ar3d.swf | Bin 10349 -> 0 bytes .../xml_swf_charts/charts_library/arno.swf | Bin 8119 -> 0 bytes .../xml_swf_charts/charts_library/ars3.swf | Bin 10756 -> 0 bytes .../xml_swf_charts/charts_library/arst.swf | Bin 8444 -> 0 bytes .../xml_swf_charts/charts_library/brfl.swf | Bin 7351 -> 0 bytes .../xml_swf_charts/charts_library/brno.swf | Bin 8660 -> 0 bytes .../xml_swf_charts/charts_library/brst.swf | Bin 8646 -> 0 bytes .../xml_swf_charts/charts_library/buno.swf | Bin 7014 -> 0 bytes .../xml_swf_charts/charts_library/cl3d.swf | Bin 10512 -> 0 bytes .../xml_swf_charts/charts_library/clfl.swf | Bin 7125 -> 0 bytes .../xml_swf_charts/charts_library/clim.swf | Bin 6963 -> 0 bytes .../xml_swf_charts/charts_library/clno.swf | Bin 8394 -> 0 bytes .../xml_swf_charts/charts_library/clp3.swf | Bin 10524 -> 0 bytes .../xml_swf_charts/charts_library/cls3.swf | Bin 10616 -> 0 bytes .../xml_swf_charts/charts_library/clst.swf | Bin 8486 -> 0 bytes .../xml_swf_charts/charts_library/cnno.swf | Bin 7450 -> 0 bytes .../xml_swf_charts/charts_library/dono.swf | Bin 6615 -> 0 bytes .../xml_swf_charts/charts_library/index.php | 35 - .../xml_swf_charts/charts_library/lnno.swf | Bin 9111 -> 0 bytes .../xml_swf_charts/charts_library/mxno.swf | Bin 10229 -> 0 bytes .../xml_swf_charts/charts_library/pi3d.swf | Bin 9222 -> 0 bytes .../xml_swf_charts/charts_library/piim.swf | Bin 5572 -> 0 bytes .../xml_swf_charts/charts_library/pino.swf | Bin 6814 -> 0 bytes .../xml_swf_charts/charts_library/pono.swf | Bin 8529 -> 0 bytes .../xml_swf_charts/charts_library/scno.swf | Bin 8069 -> 0 bytes .../xml_swf_charts/index.php | 35 - 113 files changed, 1 insertion(+), 16755 deletions(-) delete mode 100644 modules/graphartichow/artichow/AntiSpam.class.php delete mode 100644 modules/graphartichow/artichow/Artichow.cfg.php delete mode 100644 modules/graphartichow/artichow/BarPlot.class.php delete mode 100644 modules/graphartichow/artichow/Component.class.php delete mode 100644 modules/graphartichow/artichow/Graph.class.php delete mode 100644 modules/graphartichow/artichow/Image.class.php delete mode 100644 modules/graphartichow/artichow/LinePlot.class.php delete mode 100644 modules/graphartichow/artichow/MathPlot.class.php delete mode 100644 modules/graphartichow/artichow/Pattern.class.php delete mode 100644 modules/graphartichow/artichow/Pie.class.php delete mode 100644 modules/graphartichow/artichow/Plot.class.php delete mode 100644 modules/graphartichow/artichow/ScatterPlot.class.php delete mode 100644 modules/graphartichow/artichow/cache/Abel delete mode 100644 modules/graphartichow/artichow/cache/Abel-time delete mode 100644 modules/graphartichow/artichow/cache/Albert delete mode 100644 modules/graphartichow/artichow/cache/Albert-time delete mode 100644 modules/graphartichow/artichow/cache/Example-006 delete mode 100644 modules/graphartichow/artichow/cache/Example-006-time delete mode 100644 modules/graphartichow/artichow/cache/index.php delete mode 100644 modules/graphartichow/artichow/common.php delete mode 100644 modules/graphartichow/artichow/font/Tuffy.ttf delete mode 100644 modules/graphartichow/artichow/font/TuffyBold.ttf delete mode 100644 modules/graphartichow/artichow/font/TuffyBoldItalic.ttf delete mode 100644 modules/graphartichow/artichow/font/TuffyItalic.ttf delete mode 100644 modules/graphartichow/artichow/font/index.php delete mode 100644 modules/graphartichow/artichow/images/book.png delete mode 100644 modules/graphartichow/artichow/images/error.png delete mode 100644 modules/graphartichow/artichow/images/errors/index.php delete mode 100644 modules/graphartichow/artichow/images/errors/missing-anti-aliasing.png delete mode 100644 modules/graphartichow/artichow/images/errors/missing-gd2.png delete mode 100644 modules/graphartichow/artichow/images/index.php delete mode 100644 modules/graphartichow/artichow/images/paperclip.png delete mode 100644 modules/graphartichow/artichow/images/star.png delete mode 100644 modules/graphartichow/artichow/inc/Axis.class.php delete mode 100644 modules/graphartichow/artichow/inc/Border.class.php delete mode 100644 modules/graphartichow/artichow/inc/Color.class.php delete mode 100644 modules/graphartichow/artichow/inc/Driver.class.php delete mode 100644 modules/graphartichow/artichow/inc/Font.class.php delete mode 100644 modules/graphartichow/artichow/inc/Gradient.class.php delete mode 100644 modules/graphartichow/artichow/inc/Grid.class.php delete mode 100644 modules/graphartichow/artichow/inc/Label.class.php delete mode 100644 modules/graphartichow/artichow/inc/Legend.class.php delete mode 100644 modules/graphartichow/artichow/inc/Mark.class.php delete mode 100644 modules/graphartichow/artichow/inc/Math.class.php delete mode 100644 modules/graphartichow/artichow/inc/Shadow.class.php delete mode 100644 modules/graphartichow/artichow/inc/Text.class.php delete mode 100644 modules/graphartichow/artichow/inc/Tick.class.php delete mode 100644 modules/graphartichow/artichow/inc/Tools.class.php delete mode 100644 modules/graphartichow/artichow/inc/drivers/gd.class.php delete mode 100644 modules/graphartichow/artichow/inc/drivers/index.php delete mode 100644 modules/graphartichow/artichow/inc/drivers/ming.class.php delete mode 100644 modules/graphartichow/artichow/inc/index.php delete mode 100644 modules/graphartichow/artichow/index.php delete mode 100644 modules/graphartichow/artichow/patterns/BarDepth.php delete mode 100644 modules/graphartichow/artichow/patterns/LightLine.php delete mode 100644 modules/graphartichow/artichow/patterns/index.php delete mode 100755 modules/graphartichow/config.xml delete mode 100644 modules/graphartichow/graphartichow.php delete mode 100644 modules/graphartichow/index.php delete mode 100644 modules/graphartichow/logo.gif delete mode 100755 modules/graphartichow/logo.png delete mode 100644 modules/graphartichow/translations/index.php delete mode 100755 modules/graphgooglechart/config.xml delete mode 100644 modules/graphgooglechart/graphgooglechart.php delete mode 100644 modules/graphgooglechart/index.php delete mode 100644 modules/graphgooglechart/logo.gif delete mode 100755 modules/graphgooglechart/logo.png delete mode 100644 modules/graphgooglechart/translations/index.php delete mode 100755 modules/graphvisifire/config.xml delete mode 100644 modules/graphvisifire/graphvisifire.php delete mode 100644 modules/graphvisifire/index.php delete mode 100644 modules/graphvisifire/logo.gif delete mode 100644 modules/graphvisifire/logo.png delete mode 100644 modules/graphvisifire/translations/index.php delete mode 100644 modules/graphvisifire/visifire/Visifire.js delete mode 100644 modules/graphvisifire/visifire/Visifire.xap delete mode 100644 modules/graphvisifire/visifire/index.php delete mode 100755 modules/graphxmlswfcharts/config.xml delete mode 100644 modules/graphxmlswfcharts/graphxmlswfcharts.php delete mode 100644 modules/graphxmlswfcharts/index.php delete mode 100644 modules/graphxmlswfcharts/logo.gif delete mode 100755 modules/graphxmlswfcharts/logo.png delete mode 100644 modules/graphxmlswfcharts/translations/index.php delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/AC_RunActiveContent.js delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts.txt delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/ar3d.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/arno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/ars3.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/arst.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/brfl.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/brno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/brst.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/buno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/cl3d.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/clfl.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/clim.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/clno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/clp3.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/cls3.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/clst.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/cnno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/dono.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/index.php delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/lnno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/mxno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/pi3d.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/piim.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/pino.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/pono.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/charts_library/scno.swf delete mode 100644 modules/graphxmlswfcharts/xml_swf_charts/index.php diff --git a/install-dev/upgrade/sql/1.6.0.1.sql b/install-dev/upgrade/sql/1.6.0.1.sql index 00db9a99f..fa32d2424 100644 --- a/install-dev/upgrade/sql/1.6.0.1.sql +++ b/install-dev/upgrade/sql/1.6.0.1.sql @@ -1,6 +1,7 @@ SET NAMES 'utf8'; INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES('PS_DASHBOARD_USE_PUSH', '0', NOW(), NOW()); +UPDATE `PREFIX_configuration` SET `value` = 'graphnvd3' WHERE `name` = 'PS_STATS_RENDER'; ALTER TABLE `PREFIX_employee` CHANGE `bo_show_screencast` `bo_menu` TINYINT(1) NOT NULL DEFAULT '0'; UPDATE `PREFIX_employee` SET bo_menu = 0; diff --git a/modules/graphartichow/artichow/AntiSpam.class.php b/modules/graphartichow/artichow/AntiSpam.class.php deleted file mode 100644 index fea3cb23e..000000000 --- a/modules/graphartichow/artichow/AntiSpam.class.php +++ /dev/null @@ -1,224 +0,0 @@ -string = (string)$string; - - } - - /** - * Create a random string - * - * @param int $length String length - * @return string String created - */ - public function setRand($length) { - - $length = (int)$length; - - $this->string = ''; - - $letters = 'aAbBCDeEFgGhHJKLmMnNpPqQRsStTuVwWXYZz2345679'; - $number = strlen($letters); - - for($i = 0; $i < $length; $i++) { - $this->string .= $letters{mt_rand(0, $number - 1)}; - } - - return $this->string; - - } - - /** - * Set noise on image - * - * @param int $nois Noise intensity (from 0 to 10) - */ - public function setNoise($noise) { - if($noise < 0) { - $noise = 0; - } - if($noise > 10) { - $noise = 10; - } - $this->noise = (int)$noise; - } - - /** - * Save string value in session - * You can use check() to verify the value later - * - * @param string $qName A name that identify the anti-spam image - */ - public function save($qName) { - $this->session(); - $session = 'artichow_'.(string)$qName; - $_SESSION[$session] = $this->string; - } - - /** - * Verify user entry - * - * @param string $qName A name that identify the anti-spam image - * @param string $value User-defined value - * @param bool $case TRUE for case insensitive check, FALSE for case sensitive check ? (default to TRUE) - * @return bool TRUE if the value is correct, FALSE otherwise - */ - public function check($qName, $value, $case = TRUE) { - - $this->session(); - - $session = 'artichow_'.(string)$qName; - - return ( - array_key_exists($session, $_SESSION) === TRUE and - $case ? - (strtolower($_SESSION[$session]) === strtolower((string)$value)) : - ($_SESSION[$session] === (string)$value) - ); - - } - - /** - * Draw image - */ - public function draw() { - - $fonts = array( - 'Tuffy', - 'TuffyBold', - 'TuffyItalic', - 'TuffyBoldItalic' - ); - - $sizes = array(12, 12.5, 13, 13.5, 14, 15, 16, 17, 18, 19); - - $widths = array(); - $heights = array(); - $texts = array(); - - // Set up a temporary driver to allow font size calculations... - $this->setSize(10, 10); - $driver = $this->getDriver(); - - for($i = 0; $i < strlen($this->string); $i++) { - - $fontKey = array_rand($fonts); - $sizeKey = array_rand($sizes); - - $font = new awTTFFont( - $fonts[$fontKey], $sizes[$sizeKey] - ); - - $text = new awText( - $this->string{$i}, - $font, - NULL, - mt_rand(-15, 15) - ); - - $widths[] = $driver->getTextWidth($text); - $heights[] = $driver->getTextHeight($text); - $texts[] = $text; - - } - - // ... and get rid of it. - $this->driver = NULL; - - $width = array_sum($widths); - $height = array_max($heights); - - $totalWidth = $width + 10 + count($texts) * 10; - $totalHeight = $height + 20; - - $this->setSize($totalWidth, $totalHeight); - - $this->create(); - - for($i = 0; $i < strlen($this->string); $i++) { - - $this->driver->string( - $texts[$i], - new awPoint( - 5 + array_sum(array_slice($widths, 0, $i)) + $widths[$i] / 2 + $i * 10, - 10 + ($height - $heights[$i]) / 2 - ) - ); - - } - - $this->drawNoise($totalWidth, $totalHeight); - - $this->send(); - - } - - protected function drawNoise($width, $height) { - - $points = $this->noise * 30; - $color = new awColor(0, 0, 0); - - for($i = 0; $i < $points; $i++) { - $this->driver->point( - $color, - new awPoint( - mt_rand(0, $width), - mt_rand(0, $height) - ) - ); - } - - } - - protected function session() { - - // Start session if needed - if(!session_id()) { - session_start(); - } - - } - -} - -registerClass('AntiSpam'); - diff --git a/modules/graphartichow/artichow/Artichow.cfg.php b/modules/graphartichow/artichow/Artichow.cfg.php deleted file mode 100644 index 3b9f71555..000000000 --- a/modules/graphartichow/artichow/Artichow.cfg.php +++ /dev/null @@ -1,84 +0,0 @@ -label = new awLabel; - - $this->barPadding = new awSide(0.08, 0.08, 0, 0); - $this->barShadow = new awShadow(awShadow::RIGHT_TOP); - $this->barBorder = new awBorder; - - $this->setValues($values); - - $this->identifier = (int)$identifier; - $this->number = (int)$number; - $this->depth = (int)$depth; - - $this->move = new awSide; - - // Hide vertical grid - $this->grid->hideVertical(TRUE); - - } - - /** - * Change bars padding - * This method is not compatible with awBarPlot::setBarPadding() - * - * @param float $left Left padding (between 0 and 1) - * @param float $right Right padding (between 0 and 1) - */ - public function setBarPadding($left = NULL, $right = NULL) { - $this->barPadding->set($left, $right); - } - - /** - * Change bars size - * This method is not compatible with awBarPlot::setBarPadding() - * - * @param int $width Bars size (between 0 and 1) - */ - public function setBarSize($size) { - $padding = (1 - $size) / 2; - $this->barPadding->set($padding, $padding); - } - - /** - * Move bars - * - * @param int $x - * @param int $y - */ - public function move($x, $y) { - $this->move->set($x, NULL, $y, NULL); - } - - /** - * Change bars space - * - * @param int $space Space in pixels - */ - public function setBarSpace($space) { - $this->barSpace = (int)$space; - } - - /** - * Change line background color - * - * @param awColor $color - */ - public function setBarColor(awColor $color) { - $this->barBackground = $color; - } - - /** - * Change line background gradient - * - * @param awGradient $gradient - */ - public function setBarGradient(awGradient $gradient) { - $this->barBackground = $gradient; - } - - /** - * Get the line thickness - * - * @return int - */ - public function getLegendLineThickness() { - } - - /** - * Get the line type - * - * @return int - */ - public function getLegendLineStyle() { - } - - /** - * Get the color of line - * - * @return Color - */ - public function getLegendLineColor() { - } - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground() { - return $this->barBackground; - } - - /** - * Get a mark object - * - * @return Mark - */ - public function getLegendMark() { - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - $count = count($this->datay); - $max = $this->getRealYMax(NULL); - $min = $this->getRealYMin(NULL); - - // Find zero for bars - if($this->xAxisZero and $min <= 0 and $max >= 0) { - $zero = 0; - } else if($max < 0) { - $zero = $max; - } else { - $zero = $min; - } - - // Get base position - $zero = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint(0, $zero)); - - // Distance between two values on the graph - $distance = $this->xAxis->getDistance(0, 1); - - // Compute paddings - $leftPadding = $this->barPadding->left * $distance; - $rightPadding = $this->barPadding->right * $distance; - - $padding = $leftPadding + $rightPadding; - $space = $this->barSpace * ($this->number - 1); - - $barSize = ($distance - $padding - $space) / $this->number; - $barPosition = $leftPadding + $barSize * ($this->identifier - 1); - - for($key = 0; $key < $count; $key++) { - - $value = $this->datay[$key]; - - if($value !== NULL) { - - $position = awAxis::toPosition( - $this->xAxis, - $this->yAxis, - new awPoint($key, $value) - ); - - $barStart = $barPosition + ($this->identifier - 1) * $this->barSpace + $position->x; - $barStop = $barStart + $barSize; - - $t1 = min($zero->y, $position->y); - $t2 = max($zero->y, $position->y); - - if(round($t2 - $t1) == 0) { - continue; - } - - $p1 = new awPoint( - round($barStart) + $this->depth + $this->move->left, - round($t1) - $this->depth + $this->move->top - ); - - $p2 = new awPoint( - round($barStop) + $this->depth + $this->move->left, - round($t2) - $this->depth + $this->move->top - ); - - $this->drawBar($driver, $p1, $p2); - - } - - } - - // Draw labels - foreach($this->datay as $key => $value) { - - if($value !== NULL) { - - $position = awAxis::toPosition( - $this->xAxis, - $this->yAxis, - new awPoint($key, $value) - ); - - $point = new awPoint( - $barPosition + ($this->identifier - 1) * $this->barSpace + $position->x + $barSize / 2 + 1 + $this->depth, - $position->y - $this->depth - ); - - $this->label->draw($driver, $point, $key); - - } - - } - - } - - public function getXAxisNumber() { - return count($this->datay) + 1; - } - // ça bidouille à fond ici ! - public function getXMax() { - return array_max($this->datax) + 1; - } - - public function getXCenter() { - return TRUE; - } - - protected function drawBar(awDriver $driver, awPoint $p1, awPoint $p2) { - - // Draw shadow - $this->barShadow->draw( - $driver, - $p1, - $p2, - awShadow::OUT - ); - - if(abs($p2->y - $p1->y) > 1) { - - $this->barBorder->rectangle( - $driver, - $p1, - $p2 - ); - - if($this->barBackground !== NULL) { - - $size = $this->barBorder->visible() ? 1 : 0; - - $b1 = $p1->move($size, $size); - $b2 = $p2->move(-1 * $size, -1 * $size); - - // Draw background - $driver->filledRectangle( - $this->barBackground, - new awLine($b1, $b2) - ); - - } - - } - } - -} - -registerClass('BarPlot'); - diff --git a/modules/graphartichow/artichow/Component.class.php b/modules/graphartichow/artichow/Component.class.php deleted file mode 100644 index 2a683d67c..000000000 --- a/modules/graphartichow/artichow/Component.class.php +++ /dev/null @@ -1,415 +0,0 @@ -components = array(); - } - - /** - * Add a component to the group - * - * @param awComponent $component A component - */ - public function add(awComponent $component) { - $this->components[] = $component; - } - -} - -registerClass('ComponentGroup', TRUE); - -abstract class awComponent { - - /** - * Component driver - * - * @var Driver - */ - protected $driver; - - /** - * Component width - * - * @var float - */ - public $width = 1.0; - - /** - * Component height - * - * @var float - */ - public $height = 1.0; - - /** - * Position X of the center the graph (from 0 to 1) - * - * @var float - */ - public $x = 0.5; - - /** - * Position Y of the center the graph (from 0 to 1) - * - * @var float - */ - public $y = 0.5; - - /** - * Component absolute width (in pixels) - * - * - * @var int - */ - public $w; - - /** - * Component absolute height (in pixels) - * - * - * @var int - */ - public $h; - - /** - * Left-top corner Y position - * - * @var float - */ - public $top; - - /** - * Left-top corner X position - * - * @var float - */ - public $left; - - /** - * Component background color - * - * @var Color - */ - protected $background; - - /** - * Component padding - * - * @var Side - */ - protected $padding; - - /** - * Component space - * - * @var Side - */ - protected $space; - - /** - * Component title - * - * @var Label - */ - public $title; - - /** - * Adjust automatically the component ? - * - * @var bool - */ - protected $auto = TRUE; - - /** - * Legend - * - * @var Legend - */ - public $legend; - - /** - * Build the component - */ - public function __construct() { - - // Component legend - $this->legend = new awLegend(); - - $this->padding = new awSide(25, 25, 25, 25); - $this->space = new awSide(0, 0, 0, 0); - - // Component title - $this->title = new awLabel( - NULL, - new awTuffy(10), - NULL, - 0 - ); - $this->title->setAlign(awLabel::CENTER, awLabel::TOP); - - } - - /** - * Adjust automatically the component ? - * - * @param bool $auto - */ - public function auto($auto) { - $this->auto = (bool)$auto; - } - - /** - * Change the size of the component - * - * @param int $width Component width (from 0 to 1) - * @param int $height Component height (from 0 to 1) - */ - public function setSize($width, $height) { - - $this->width = (float)$width; - $this->height = (float)$height; - - } - - /** - * Change the absolute size of the component - * - * @param int $w Component width (in pixels) - * @param int $h Component height (in pixels) - */ - public function setAbsSize($w, $h) { - - $this->w = (int)$w; - $this->h = (int)$h; - - } - - /** - * Change component background color - * - * @param awColor $color (can be null) - */ - public function setBackgroundColor($color) { - if($color === NULL or $color instanceof awColor) { - $this->background = $color; - } - } - - /** - * Change component background gradient - * - * @param awGradient $gradient (can be null) - */ - public function setBackgroundGradient($gradient) { - if($gradient === NULL or $gradient instanceof awGradient) { - $this->background = $gradient; - } - } - - /** - * Change component background image - * - * @param awImage $image (can be null) - */ - public function setBackgroundImage($image) { - if($image === NULL or $image instanceof awImage) { - $this->background = $image; - } - } - - /** - * Return the component background - * - * @return Color, Gradient - */ - public function getBackground() { - return $this->background; - } - - /** - * Change component padding - * - * @param int $left Padding in pixels (NULL to keep old value) - * @param int $right Padding in pixels (NULL to keep old value) - * @param int $top Padding in pixels (NULL to keep old value) - * @param int $bottom Padding in pixels (NULL to keep old value) - */ - public function setPadding($left = NULL, $right = NULL, $top = NULL, $bottom = NULL) { - $this->padding->set($left, $right, $top, $bottom); - } - - /** - * Change component space - * - * @param float $left Space in % (NULL to keep old value) - * @param float $right Space in % (NULL to keep old value) - * @param float $bottom Space in % (NULL to keep old value) - * @param float $top Space in % (NULL to keep old value) - */ - public function setSpace($left = NULL, $right = NULL, $bottom = NULL, $top = NULL) { - $this->space->set($left, $right, $bottom, $top); - } - - /** - * Change the absolute position of the component on the graph - * - * @var int $x Left-top corner X position - * @var int $y Left-top corner Y position - */ - public function setAbsPosition($left, $top) { - - $this->left = (int)$left; - $this->top = (int)$top; - - } - - /** - * Set the center of the component - * - * @param int $x Position X of the center of the component - * @param int $y Position Y of the center of the component - */ - public function setCenter($x, $y) { - - $this->x = (float)$x; - $this->y = (float)$y; - - } - - /** - * Get component coords with its padding - * - * @return array Coords of the component - */ - public function getPosition() { - - // Get component coords - $x1 = $this->padding->left; - $y1 = $this->padding->top; - $x2 = $this->w - $this->padding->right; - $y2 = $this->h - $this->padding->bottom; - - return array($x1, $y1, $x2, $y2); - - } - - /** - * Init the drawing of the component - */ - public function init(awDriver $driver) { - - // Set component background - $background = $this->getBackground(); - - if($background !== NULL) { - - $p1 = new awPoint(0, 0); - $p2 = new awPoint($this->w - 1, $this->h - 1); - - if($background instanceof awImage) { - - $driver->copyImage( - $background, - $p1, - $p2 - ); - - } else { - - $driver->filledRectangle( - $background, - new awLine($p1, $p2) - ); - - } - - } - } - - /** - * Finalize the drawing of the component - */ - public function finalize(awDriver $driver) { - - // Draw component title - $point = new awPoint( - $this->w / 2, - $this->padding->top - 8 - ); - $this->title->draw($driver, $point); - - // Draw legend - $this->legend->draw($driver); - - } - - /** - * Draw the grid around your component - * - * @param Driver A driver - * @return array Coords for the component - */ - abstract public function drawEnvelope(awDriver $driver); - - /** - * Draw the component on the graph - * Component should be drawed into specified coords - * - * @param Driver A driver - * @param int $x1 - * @param int $y1 - * @param int $x2 - * @param int $y2 - * @param bool $aliasing Use anti-aliasing to draw the component ? - */ - abstract public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing); - - /** - * Get space width in pixels - * - * @param int $width Component width - * @param int $height Component height - * @return array - */ - protected function getSpace($width, $height) { - - $left = (int)($width * $this->space->left / 100); - $right = (int)($width * $this->space->right / 100); - $top = (int)($height * $this->space->top / 100); - $bottom = (int)($height * $this->space->bottom / 100); - - return array($left, $right, $top, $bottom); - - } - -} - -registerClass('Component', TRUE); - diff --git a/modules/graphartichow/artichow/Graph.class.php b/modules/graphartichow/artichow/Graph.class.php deleted file mode 100644 index bf018a518..000000000 --- a/modules/graphartichow/artichow/Graph.class.php +++ /dev/null @@ -1,412 +0,0 @@ -setSize($width, $height); - - if(ARTICHOW_CACHE) { - - $this->name = $name; - $this->timeout = $timeout; - - // Clean sometimes all the cache - if(mt_rand(0, 5000) === 0) { - awGraph::cleanCache(); - } - - // Take the graph from the cache if possible - if($this->name !== NULL) { - - $this->fileCache = ARTICHOW_CACHE_DIRECTORY."/".$this->name; - $this->fileCacheTime = $this->fileCache."-time"; - - if(is_file($this->fileCache)) { - - $type = awGraph::cleanGraphCache($this->fileCacheTime); - - if($type === NULL) { - awGraph::deleteFromCache($this->name); - } else { - header("Content-Type: image/".$type); - echo file_get_contents($this->fileCache); - exit; - } - - } - - } - - } - - $this->title = new awLabel( - NULL, - new awTuffy(16), - NULL, - 0 - ); - $this->title->setAlign(awLabel::CENTER, awLabel::BOTTOM); - - } - - /** - * Delete a graph from the cache - * - * @param string $name Graph name - * @return bool TRUE on success, FALSE on failure - */ - public static function deleteFromCache($name) { - - if(ARTICHOW_CACHE) { - - if(is_file(ARTICHOW_CACHE_DIRECTORY."/".$name."-time")) { - unlink(ARTICHOW_CACHE_DIRECTORY."/".$name.""); - unlink(ARTICHOW_CACHE_DIRECTORY."/".$name."-time"); - } - - } - - } - - /** - * Delete all graphs from the cache - */ - public static function deleteAllCache() { - - if(ARTICHOW_CACHE) { - - $dp = opendir(ARTICHOW_CACHE_DIRECTORY); - - while($file = readdir($dp)) { - if($file !== '.' and $file != '..') { - unlink(ARTICHOW_CACHE_DIRECTORY."/".$file); - } - } - - } - - } - - /** - * Clean cache - */ - public static function cleanCache() { - - if(ARTICHOW_CACHE) { - - $glob = glob(ARTICHOW_CACHE_DIRECTORY."/*-time"); - - foreach($glob as $file) { - - $type = awGraph::cleanGraphCache($file); - - if($type === NULL) { - $name = preg_replace('!.*/(.*)\-time!', "\\1", $file); - awGraph::deleteFromCache($name); - } - - } - - } - - } - - /** - * Enable/Disable Graph timing - * - * @param bool $timing - */ - public function setTiming($timing) { - $this->timing = (bool)$timing; - } - - /** - * Add a component to the graph - * - * @param awComponent $component - */ - public function add(awComponent $component) { - - $this->components[] = $component; - - } - - /** - * Add a label to the component - * - * @param awLabel $label - * @param int $x Position on X axis of the center of the text - * @param int $y Position on Y axis of the center of the text - */ - public function addLabel(awLabel $label, $x, $y) { - - $this->labels[] = array( - $label, $x, $y - ); - - } - - /** - * Add a label to the component with absolute position - * - * @param awLabel $label - * @param awPoint $point Text position - */ - public function addAbsLabel(awLabel $label, awPoint $point) { - - $this->labels[] = array( - $label, $point - ); - - } - - /** - * Build the graph and draw component on it - * - * @param string $mode Display mode (can be a file name) - */ - public function draw($mode = Graph::DRAW_DISPLAY) { - - if($this->timing) { - $time = microtimeFloat(); - } - - $this->create(); - - foreach($this->components as $component) { - - $this->drawComponent($component); - - } - - $this->drawTitle(); - $this->drawShadow(); - $this->drawLabels(); - - if($this->timing) { - $this->drawTiming(microtimeFloat() - $time); - } - - // Create graph - $data = $this->get(); - - // Put the graph in the cache if needed - $this->cache($data); - - switch($mode) { - - case Graph::DRAW_DISPLAY : - $this->sendHeaders(); - echo $data; - break; - - case Graph::DRAW_RETURN : - return $data; - - default : - if(is_string($mode)) { - file_put_contents($mode, $data); - } else { - awImage::drawError("Class Graph: Unable to draw the graph."); - } - - } - - } - - private function drawLabels() { - - $driver = $this->getDriver(); - - foreach($this->labels as $array) { - - if(count($array) === 3) { - - // Text in relative position - list($label, $x, $y) = $array; - - $point = new awPoint( - $x * $this->width, - $y * $this->height - ); - - } else { - - // Text in absolute position - list($label, $point) = $array; - - } - - $label->draw($driver, $point); - - } - - } - - private function drawTitle() { - - $driver = $this->getDriver(); - - $point = new awPoint( - $this->width / 2, - 10 - ); - - $this->title->draw($driver, $point); - - } - - private function drawTiming($time) { - - $driver = $this->getDriver(); - - $label = new awLabel; - $label->set("(".sprintf("%.3f", $time)." s)"); - $label->setAlign(awLabel::LEFT, awLabel::TOP); - $label->border->show(); - $label->setPadding(1, 0, 0, 0); - $label->setBackgroundColor(new awColor(230, 230, 230, 25)); - - $label->draw($driver, new awPoint(5, $driver->imageHeight - 5)); - - } - - private function cache($data) { - if(ARTICHOW_CACHE and $this->name !== NULL) { - - if(is_writable(ARTICHOW_CACHE_DIRECTORY) === FALSE) { - awImage::drawError("Class Graph: Cache directory is not writable."); - } - - file_put_contents($this->fileCache, $data); - file_put_contents($this->fileCacheTime, $this->timeout."\n".$this->getFormatString()); - - } - } - - private static function cleanGraphCache($file) { - - list( - $time, - $type - ) = explode("\n", file_get_contents($file)); - - $time = (int)$time; - - if($time !== 0 and $time < time()) { - return NULL; - } else { - return $type; - } - - - } - -} - -registerClass('Graph'); - -/* - * To preserve PHP 4 compatibility - */ -function microtimeFloat() { - list($usec, $sec) = explode(" ", microtime()); - return (float)$usec + (float)$sec; -} - diff --git a/modules/graphartichow/artichow/Image.class.php b/modules/graphartichow/artichow/Image.class.php deleted file mode 100644 index 129508e3f..000000000 --- a/modules/graphartichow/artichow/Image.class.php +++ /dev/null @@ -1,606 +0,0 @@ -background = new awColor(255, 255, 255); - $this->shadow = new awShadow(awShadow::RIGHT_BOTTOM); - $this->border = new awBorder; - - } - - /** - * Get driver of the image - * - * @param int $w Driver width (from 0 to 1) (default to 1) - * @param int $h Driver height (from 0 to 1) (default to 1) - * @param float $x Position on X axis of the center of the driver (default to 0.5) - * @param float $y Position on Y axis of the center of the driver (default to 0.5) - * @return Driver - */ - public function getDriver($w = 1, $h = 1, $x = 0.5, $y = 0.5) { - $this->create(); - $this->driver->setSize($w, $h); - $this->driver->setPosition($x, $y); - return $this->driver; - } - - /** - * Sets the driver that will be used to draw the graph - * - * @param string $driverString - */ - public function setDriver($driverString) { - $this->driver = $this->selectDriver($driverString); - - $this->driver->init($this); - } - - /** - * Change the image size - * - * @var int $width Image width - * @var int $height Image height - */ - public function setSize($width, $height) { - - if($width !== NULL) { - $this->width = (int)$width; - } - if($height !== NULL) { - $this->height = (int)$height; - } - - } - - /** - * Change image background - * - * @param mixed $background - */ - public function setBackground($background) { - if($background instanceof awColor) { - $this->setBackgroundColor($background); - } elseif($background instanceof awGradient) { - $this->setBackgroundGradient($background); - } - } - - /** - * Change image background color - * - * @param awColor $color - */ - public function setBackgroundColor(awColor $color) { - $this->background = $color; - } - - /** - * Change image background gradient - * - * @param awGradient $gradient - */ - public function setBackgroundGradient(awGradient $gradient) { - $this->background = $gradient; - } - - /** - * Return image background, whether a Color or a Gradient - * - * @return mixed - */ - public function getBackground() { - return $this->background; - } - - /** - * Turn antialiasing on or off - * - * @var bool $bool - */ - public function setAntiAliasing($bool) { - $this->antiAliasing = (bool)$bool; - } - - /** - * Return the antialiasing setting - * - * @return bool - */ - public function getAntiAliasing() { - return $this->antiAliasing; - } - - /** - * Change image format - * - * @var int $format New image format - */ - public function setFormat($format) { - if($format === awImage::JPEG or $format === awImage::PNG or $format === awImage::GIF) { - $this->format = $format; - } - } - - /** - * Returns the image format as an integer - * - * @return unknown - */ - public function getFormat() { - return $this->format; - } - - /** - * Returns the image format as a string - * - * @return string - */ - public function getFormatString() { - - switch($this->format) { - case awImage::JPEG : - return 'jpeg'; - case awImage::PNG : - return 'png'; - case awImage::GIF : - return 'gif'; - } - - } - - /** - * Create a new awimage - */ - public function create() { - - if($this->driver === NULL) { - $driver = $this->selectDriver($this->driverString); - - $driver->init($this); - - $this->driver = $driver; - } - - } - - /** - * Select the correct driver - * - * @param string $driver The desired driver - * @return mixed - */ - protected function selectDriver($driver) { - $drivers = array('gd'); - $driver = strtolower((string)$driver); - - if(in_array($driver, $drivers, TRUE)) { - $string = $driver; - } else { - $string = ARTICHOW_DRIVER; - } - - switch ($string) { - case 'gd': - require_once ARTICHOW.'/inc/drivers/gd.class.php'; - $this->driverString = $string; - return new awGDDriver(); - - default: - // We should never get here, unless the wrong string is used AND the ARTICHOW_DRIVER - // global has been messed with. - awImage::drawError('Class Image: Unknown driver type (\''.$string.'\')'); - break; - } - } - - /** - * Draw a component on the image - * - * @var awComponent $component A component - */ - public function drawComponent(awComponent $component) { - - $shadow = $this->shadow->getSpace(); // Image shadow - $border = $this->border->visible() ? 1 : 0; // Image border size - - $driver = clone $this->driver; - $driver->setImageSize( - $this->width - $shadow->left - $shadow->right - $border * 2, - $this->height - $shadow->top - $shadow->bottom - $border * 2 - ); - - // No absolute size specified - if($component->w === NULL and $component->h === NULL) { - - list($width, $height) = $driver->setSize($component->width, $component->height); - - // Set component size in pixels - $component->setAbsSize($width, $height); - - } else { - - $driver->setAbsSize($component->w, $component->h); - - } - - if($component->top !== NULL and $component->left !== NULL) { - $driver->setAbsPosition( - $border + $shadow->left + $component->left, - $border + $shadow->top + $component->top - ); - } else { - $driver->setPosition($component->x, $component->y); - } - - $driver->movePosition($border + $shadow->left, $border + $shadow->top); - - list($x1, $y1, $x2, $y2) = $component->getPosition(); - - $component->init($driver); - - $component->drawComponent($driver, $x1, $y1, $x2, $y2, $this->antiAliasing); - $component->drawEnvelope($driver, $x1, $y1, $x2, $y2); - - $component->finalize($driver); - - } - - protected function drawShadow() { - - $driver = $this->getDriver(); - - $this->shadow->draw( - $driver, - new awPoint(0, 0), - new awPoint($this->width, $this->height), - awShadow::IN - ); - - } - - /** - * Send the image into a file or to the user browser - * - */ - public function send() { - $this->driver->send($this); - } - - /** - * Return the image content as binary data - * - */ - public function get() { - return $this->driver->get($this); - } - - /** - * Send the correct HTTP header according to the image type - * - */ - public function sendHeaders() { - - if(headers_sent() === FALSE) { - - switch ($this->driverString) { - case 'gd' : - header('Content-type: image/'.$this->getFormatString()); - break; - - } - - } - - } - - - private static $errorWriting = FALSE; - - - /* - * Display an error image and exit - * - * @param string $message Error message - */ - public static function drawError($message) { - - - if(self::$errorWriting) { - return; - } - - self::$errorWriting = TRUE; - - $message = wordwrap($message, 40, "\n", TRUE); - - $width = 400; - $height = max(100, 40 + 22.5 * (substr_count($message, "\n") + 1)); - - $image = new awImage(); - $image->setSize($width, $height); - $image->setDriver('gd'); - - $driver = $image->getDriver(); - $driver->init($image); - - // Display title - $driver->filledRectangle( - new awWhite, - new awLine( - new awPoint(0, 0), - new awPoint($width, $height) - ) - ); - - $driver->filledRectangle( - new awRed, - new awLine( - new awPoint(0, 0), - new awPoint(110, 25) - ) - ); - - $text = new awText( - "Artichow error", - new awFont3, - new awWhite, - 0 - ); - - $driver->string($text, new awPoint(5, 6)); - - // Display red box - $driver->rectangle( - new awRed, - new awLine( - new awPoint(0, 25), - new awPoint($width - 90, $height - 1) - ) - ); - - // Display error image - $file = ARTICHOW_IMAGE.DIRECTORY_SEPARATOR.'error.png'; - - $imageError = new awFileImage($file); - $driver->copyImage( - $imageError, - new awPoint($width - 81, $height - 81), - new awPoint($width - 1, $height - 1) - ); - - // Draw message - $text = new awText( - strip_tags($message), - new awFont2, - new awBlack, - 0 - ); - - $driver->string($text, new awPoint(10, 40)); - - $image->send(); - - exit; - - } - - /* - * Display an error image located in a file and exit - * - * @param string $error Error name - */ - public static function drawErrorFile($error) { - - $file = ARTICHOW_IMAGE.DIRECTORY_SEPARATOR.'errors'.DIRECTORY_SEPARATOR.$error.'.png'; - - header("Content-Type: image/png"); - readfile($file); - exit; - - } - -} - -registerClass('Image'); - - -/** - * Load an image from a file - * - * @package Artichow - */ -class awFileImage extends awImage { - - /** - * Build a new awimage - * - * @param string $file Image file name - */ - public function __construct($file) { - - $driver = $this->selectDriver($this->driverString); - - $driver->initFromFile($this, $file); - - $this->driver = $driver; - - } - -} - -registerClass('FileImage'); - - diff --git a/modules/graphartichow/artichow/LinePlot.class.php b/modules/graphartichow/artichow/LinePlot.class.php deleted file mode 100644 index e2a494c39..000000000 --- a/modules/graphartichow/artichow/LinePlot.class.php +++ /dev/null @@ -1,585 +0,0 @@ -mark = new awMark; - $this->label = new awLabel; - - $this->lineMode = (int)$mode; - - $this->setValues($values); - - } - - /** - * Hide line - * - * @param bool $hide - */ - public function hideLine($hide) { - $this->lineHide = (bool)$hide; - } - - /** - * Add a filled area - * - * @param int $start Begining of the area - * @param int $end End of the area - * @param mixed $background Background color or gradient of the area - */ - public function setFilledArea($start, $stop, $background) { - - if($stop <= $start) { - awImage::drawError("Class LinePlot: End position can not be greater than begin position in setFilledArea()."); - } - - $this->areas[] = array((int)$start, (int)$stop, $background); - - } - - /** - * Change line color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->lineColor = $color; - } - - /** - * Change line style - * - * @param int $style - */ - public function setStyle($style) { - $this->lineStyle = (int)$style; - } - - /** - * Change line tickness - * - * @param int $tickness - */ - public function setThickness($tickness) { - $this->lineThickness = (int)$tickness; - } - - /** - * Change line background color - * - * @param awColor $color - */ - public function setFillColor(awColor $color) { - $this->lineBackground = $color; - } - - /** - * Change line background gradient - * - * @param awGradient $gradient - */ - public function setFillGradient(awGradient $gradient) { - $this->lineBackground = $gradient; - } - - /** - * Get the line thickness - * - * @return int - */ - public function getLegendLineThickness() { - return $this->lineThickness; - } - - /** - * Get the line type - * - * @return int - */ - public function getLegendLineStyle() { - return $this->lineStyle; - } - - /** - * Get the color of line - * - * @return Color - */ - public function getLegendLineColor() { - return $this->lineColor; - } - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground() { - return $this->lineBackground; - } - - /** - * Get a mark object - * - * @return Mark - */ - public function getLegendMark() { - return $this->mark; - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - $max = $this->getRealYMax(); - $min = $this->getRealYMin(); - - // Get start and stop values - list($start, $stop) = $this->getLimit(); - - if($this->lineMode === awLinePlot::MIDDLE) { - $inc = $this->xAxis->getDistance(0, 1) / 2; - } else { - $inc = 0; - } - - // Build the polygon - $polygon = new awPolygon; - - for($key = $start; $key <= $stop; $key++) { - - $value = $this->datay[$key]; - - if($value !== NULL) { - - $p = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($key, $value)); - $p = $p->move($inc, 0); - $polygon->set($key, $p); - - } - - } - - // Draw backgrounds - if($this->lineBackground instanceof awColor or $this->lineBackground instanceof awGradient) { - - $backgroundPolygon = new awPolygon; - - $p = $this->xAxisPoint($start); - $p = $p->move($inc, 0); - $backgroundPolygon->append($p); - - // Add others points - foreach($polygon->all() as $point) { - $backgroundPolygon->append(clone $point); - } - - $p = $this->xAxisPoint($stop); - $p = $p->move($inc, 0); - $backgroundPolygon->append($p); - - // Draw polygon background - $driver->filledPolygon($this->lineBackground, $backgroundPolygon); - - } - - $this->drawArea($driver, $polygon); - - // Draw line - $prev = NULL; - - // Line color - if($this->lineHide === FALSE) { - - if($this->lineColor === NULL) { - $this->lineColor = new awColor(0, 0, 0); - } - - foreach($polygon->all() as $point) { - - if($prev !== NULL) { - $driver->line( - $this->lineColor, - new awLine( - $prev, - $point, - $this->lineStyle, - $this->lineThickness - ) - ); - } - $prev = $point; - - } - - } - - // Draw marks and labels - foreach($polygon->all() as $key => $point) { - - $this->mark->draw($driver, $point); - $this->label->draw($driver, $point, $key); - - } - - } - - protected function drawArea(awDriver $driver, awPolygon $polygon) { - - $starts = array(); - foreach($this->areas as $area) { - list($start) = $area; - $starts[$start] = TRUE; - } - - // Draw filled areas - foreach($this->areas as $area) { - - list($start, $stop, $background) = $area; - - $polygonArea = new awPolygon; - - $p = $this->xAxisPoint($start); - $polygonArea->append($p); - - for($i = $start; $i <= $stop; $i++) { - $p = clone $polygon->get($i); - if($i === $stop and array_key_exists($stop, $starts)) { - $p = $p->move(-1, 0); - } - $polygonArea->append($p); - } - - $p = $this->xAxisPoint($stop); - if(array_key_exists($stop, $starts)) { - $p = $p->move(-1, 0); - } - $polygonArea->append($p); - - // Draw area - $driver->filledPolygon($background, $polygonArea); - - } - - } - - public function getXAxisNumber() { - if($this->lineMode === awLinePlot::MIDDLE) { - return count($this->datay) + 1; - } else { - return count($this->datay); - } - } - - protected function xAxisPoint($position) { - $y = $this->xAxisZero ? 0 : $this->getRealYMin(); - return awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($position, $y)); - } - - public function getXCenter() { - return ($this->lineMode === awLinePlot::MIDDLE); - } - -} - -registerClass('LinePlot'); - - -/** - * Simple LinePlot - * Useful to draw simple horizontal lines - * - * @package Artichow - */ -class awSimpleLinePlot extends awPlot implements awLegendable { - - /** - * Line color - * - * @var Color - */ - protected $lineColor; - - /** - * Line start - * - * @var int - */ - protected $lineStart; - - /** - * Line stop - * - * @var int - */ - protected $lineStop; - - /** - * Line value - * - * @var flaot - */ - protected $lineValue; - - /** - * Line mode - * - * @var int - */ - protected $lineMode = awLinePlot::LINE; - - /** - * Line type - * - * @var int - */ - protected $lineStyle = awLine::SOLID; - - /** - * Line thickness - * - * @var int - */ - protected $lineThickness = 1; - - /** - * Line mode - * - * @var int - */ - const LINE = 0; - - /** - * Line in the middle - * - * @var int - */ - const MIDDLE = 1; - - /** - * Construct a new awLinePlot - * - * @param float $value A Y value - * @param int $start Line start index - * @param int $stop Line stop index - * @param int $mode Line mode - */ - public function __construct($value, $start, $stop, $mode = awLinePlot::LINE) { - - parent::__construct(); - - $this->lineMode = (int)$mode; - - $this->lineStart = (int)$start; - $this->lineStop = (int)$stop; - $this->lineValue = (float)$value; - - $this->lineColor = new awColor(0, 0, 0); - - } - - /** - * Change line color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->lineColor = $color; - } - - /** - * Change line style - * - * @param int $style - */ - public function setStyle($style) { - $this->lineStyle = (int)$style; - } - - /** - * Change line tickness - * - * @param int $tickness - */ - public function setThickness($tickness) { - $this->lineThickness = (int)$tickness; - } - - /** - * Get the line thickness - * - * @return int - */ - public function getLegendLineThickness() { - return $this->lineThickness; - } - - /** - * Get the line type - * - * @return int - */ - public function getLegendLineStyle() { - return $this->lineStyle; - } - - /** - * Get the color of line - * - * @return Color - */ - public function getLegendLineColor() { - return $this->lineColor; - } - - public function getLegendBackground() { - return NULL; - } - - public function getLegendMark() { - return NULL; - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - if($this->lineMode === awLinePlot::MIDDLE) { - $inc = $this->xAxis->getDistance(0, 1) / 2; - } else { - $inc = 0; - } - - $p1 = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($this->lineStart, $this->lineValue)); - $p2 = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($this->lineStop, $this->lineValue)); - - $driver->line( - $this->lineColor, - new awLine( - $p1->move($inc, 0), - $p2->move($inc, 0), - $this->lineStyle, - $this->lineThickness - ) - ); -} - - public function getXAxisNumber() { - if($this->lineMode === awLinePlot::MIDDLE) { - return count($this->datay) + 1; - } else { - return count($this->datay); - } - } - - protected function xAxisPoint($position) { - $y = $this->xAxisZero ? 0 : $this->getRealYMin(); - return awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($position, $y)); - } - - public function getXCenter() { - return ($this->lineMode === awLinePlot::MIDDLE); - } - -} - -registerClass('SimpleLinePlot'); - diff --git a/modules/graphartichow/artichow/MathPlot.class.php b/modules/graphartichow/artichow/MathPlot.class.php deleted file mode 100644 index 7d318207d..000000000 --- a/modules/graphartichow/artichow/MathPlot.class.php +++ /dev/null @@ -1,438 +0,0 @@ -f = (string)$f; - $this->fromX = is_null($fromX) ? NULL : (float)$fromX; - $this->toX = is_null($toX) ? NULL : (float)$toX; - - $this->line = new awLine; - $this->mark = new awMark; - $this->color = new awBlack; - - } - - /** - * Change line color - * - * @param awColor $color A new awcolor - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Get line color - * - * @return Color - */ - public function getColor() { - return $this->color; - } - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground() { - } - - /** - * Get the line thickness - * - * @return NULL - */ - public function getLegendLineThickness() { - return $this->line->getThickness(); - } - - /** - * Get the line type - * - * @return NULL - */ - public function getLegendLineStyle() { - return $this->line->getStyle(); - } - - /** - * Get the color of line - * - * @return NULL - */ - public function getLegendLineColor() { - return $this->color; - } - - /** - * Get a mark object - * - * @return NULL - */ - public function getLegendMark() { - return $this->mark; - } - -} - -registerClass('MathFunction'); - -/** - * For mathematics functions - * - * @package Artichow - */ -class awMathPlot extends awComponent { - - /** - * Functions - * - * @var array - */ - protected $functions = array(); - - /** - * Grid properties - * - * @var Grid - */ - public $grid; - - /** - * X axis - * - * @var Axis - */ - public $xAxis; - - /** - * Y axis - * - * @var Axis - */ - public $yAxis; - - /** - * Extremum - * - * @var Side - */ - private $extremum = NULL; - - /** - * Interval - * - * @var float - */ - private $interval = 1; - - /** - * Build the plot - * - * @param int $xMin Minimum X value - * @param int $xMax Maximum X value - * @param int $yMax Maximum Y value - * @param int $yMin Minimum Y value - */ - public function __construct($xMin, $xMax, $yMax, $yMin) { - - parent::__construct(); - - $this->setPadding(8, 8, 8, 8); - - $this->grid = new awGrid; - - // Hide grid by default - $this->grid->hide(TRUE); - - // Set extremum - $this->extremum = new awSide($xMin, $xMax, $yMax, $yMin); - - // Create axis - $this->xAxis = new awAxis; - $this->xAxis->setTickStyle(awTick::IN); - $this->xAxis->label->hideValue(0); - $this->initAxis($this->xAxis); - - $this->yAxis = new awAxis; - $this->yAxis->setTickStyle(awTick::IN); - $this->yAxis->label->hideValue(0); - $this->initAxis($this->yAxis); - - } - - protected function initAxis(awAxis $axis) { - - $axis->setLabelPrecision(1); - $axis->addTick('major', new awTick(0, 5)); - $axis->addTick('minor', new awTick(0, 3)); - $axis->addTick('micro', new awTick(0, 1)); - $axis->setNumberByTick('minor', 'major', 1); - $axis->setNumberByTick('micro', 'minor', 4); - $axis->label->setFont(new awTuffy(7)); - - } - - /** - * Interval to calculate values - * - * @param float $interval - */ - public function setInterval($interval) { - $this->interval = (float)$interval; - } - - /** - * Add a formula f(x) - * - * @param awMathFunction $function - * @param string $name Name for the legend (can be NULL if you don't want to set a legend) - * @param int $type Type for the legend - */ - public function add(awMathFunction $function, $name = NULL, $type = awLegend::LINE) { - - $this->functions[] = $function; - - if($name !== NULL) { - $this->legend->add($function, $name, $type); - } - - } - - public function init(awDriver $driver) { - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - $this->xAxis->line->setX($x1, $x2); - $this->xAxis->label->setAlign(NULL, awLabel::BOTTOM); - $this->xAxis->label->move(0, 3); - $this->xAxis->setRange($this->extremum->left, $this->extremum->right); - - $this->yAxis->line->setY($y2, $y1); - $this->yAxis->label->setAlign(awLabel::RIGHT); - $this->yAxis->label->move(-6, 0); - $this->yAxis->reverseTickStyle(); - $this->yAxis->setRange($this->extremum->bottom, $this->extremum->top); - - - $this->xAxis->setYCenter($this->yAxis, 0); - $this->yAxis->setXCenter($this->xAxis, 0); - - if($this->yAxis->getLabelNumber() === NULL) { - $number = $this->extremum->top - $this->extremum->bottom + 1; - $this->yAxis->setLabelNumber($number); - } - - if($this->xAxis->getLabelNumber() === NULL) { - $number = $this->extremum->right - $this->extremum->left + 1; - $this->xAxis->setLabelNumber($number); - } - - // Set ticks - - $this->xAxis->tick('major')->setNumber($this->xAxis->getLabelNumber()); - $this->yAxis->tick('major')->setNumber($this->yAxis->getLabelNumber()); - - - // Set axis labels - $labels = array(); - for($i = 0, $count = $this->xAxis->getLabelNumber(); $i < $count; $i++) { - $labels[] = $i; - } - $this->xAxis->label->set($labels); - - $labels = array(); - for($i = 0, $count = $this->yAxis->getLabelNumber(); $i < $count; $i++) { - $labels[] = $i; - } - $this->yAxis->label->set($labels); - - parent::init($driver); - - // Create the grid - $this->createGrid(); - - // Draw the grid - $this->grid->draw($driver, $x1, $y1, $x2, $y2); - - } - - public function drawEnvelope(awDriver $driver) { - - // Draw axis - $this->xAxis->draw($driver); - $this->yAxis->draw($driver); - - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - foreach($this->functions as $function) { - - $f = $function->f; - $fromX = is_null($function->fromX) ? $this->extremum->left : $function->fromX; - $toX = is_null($function->toX) ? $this->extremum->right : $function->toX; - - $old = NULL; - - for($i = $fromX; $i <= $toX; $i += $this->interval) { - - $p = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($i, $f($i))); - - if($p->y >= $y1 and $p->y <= $y2) { - $function->mark->draw($driver, $p); - } - - if($old !== NULL) { - - $line = $function->line; - $line->setLocation($old, $p); - - if( - ($line->p1->y >= $y1 and $line->p1->y <= $y2) or - ($line->p2->y >= $y1 and $line->p2->y <= $y2) - ) { - $driver->line( - $function->getColor(), - $line - ); - } - - } - - $old = $p; - - } - - // Draw last point if needed - if($old !== NULL and $i - $this->interval != $toX) { - - $p = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($toX, $f($toX))); - - if($p->y >= $y1 and $p->y <= $y2) { - $function->mark->draw($driver, $p); - } - - - $line = $function->line; - $line->setLocation($old, $p); - - if( - ($line->p1->y >= $y1 and $line->p1->y <= $y2) or - ($line->p2->y >= $y1 and $line->p2->y <= $y2) - ) { - $driver->line( - $function->getColor(), - $line - ); - } - - } - - } - - } - - protected function createGrid() { - - // Horizontal lines of the grid - - $major = $this->yAxis->tick('major'); - $interval = $major->getInterval(); - $number = $this->yAxis->getLabelNumber() - 1; - - $h = array(); - if($number > 0) { - for($i = 0; $i <= $number; $i++) { - $h[] = $i / $number; - } - } - - // Vertical lines - - $major = $this->xAxis->tick('major'); - $interval = $major->getInterval(); - $number = $this->xAxis->getLabelNumber() - 1; - - $w = array(); - if($number > 0) { - for($i = 0; $i <= $number; $i++) { - if($i%$interval === 0) { - $w[] = $i / $number; - } - } - } - - $this->grid->setGrid($w, $h); - - } - -} - -registerClass('MathPlot'); diff --git a/modules/graphartichow/artichow/Pattern.class.php b/modules/graphartichow/artichow/Pattern.class.php deleted file mode 100644 index 0eee7e1ee..000000000 --- a/modules/graphartichow/artichow/Pattern.class.php +++ /dev/null @@ -1,96 +0,0 @@ -args[$name] = $value; - } - } - - /** - * Get an argument - * - * @param string $name - * @param mixed $default Default value if the argument does not exist (default to NULL) - * @return mixed Argument value - */ - protected function getArg($name, $default = NULL) { - if(array_key_exists($name, $this->args)) { - return $this->args[$name]; - } else { - return $default; - } - } - - /** - * Change several arguments - * - * @param array $args New arguments - */ - public function setArgs($args) { - if(is_array($args)) { - foreach($args as $name => $value) { - $this->setArg($name, $value); - } - } - } - -} - -registerClass('Pattern', TRUE); diff --git a/modules/graphartichow/artichow/Pie.class.php b/modules/graphartichow/artichow/Pie.class.php deleted file mode 100644 index 8dec47825..000000000 --- a/modules/graphartichow/artichow/Pie.class.php +++ /dev/null @@ -1,694 +0,0 @@ -setValues($values); - - if(is_array($colors)) { - $this->colors = $colors; - } else { - - switch($colors) { - - case awPie::AQUA : - $this->colors = array( - new awColor(131, 220, 215), - new awColor(131, 190, 215), - new awColor(131, 160, 215), - new awColor(160, 140, 215), - new awColor(190, 131, 215), - new awColor(220, 131, 215) - ); - break; - - case awPie::EARTH : - $this->colors = array( - new awColor(97, 179, 110), - new awColor(130, 179, 97), - new awColor(168, 179, 97), - new awColor(179, 147, 97), - new awColor(179, 108, 97), - new awColor(99, 107, 189), - new awColor(99, 165, 189) - ); - break; - - case awPie::DARK : - $this->colors = array( - new awColor(140, 100, 170), - new awColor(130, 170, 100), - new awColor(160, 160, 120), - new awColor(150, 110, 140), - new awColor(130, 150, 160), - new awColor(90, 170, 140) - ); - break; - - default : - $this->colors = array( - new awColor(187, 213, 151), - new awColor(223, 177, 151), - new awColor(111, 186, 132), - new awColor(197, 160, 230), - new awColor(165, 169, 63), - new awColor(218, 177, 89), - new awColor(116, 205, 121), - new awColor(200, 201, 78), - new awColor(127, 205, 177), - new awColor(205, 160, 160), - new awColor(190, 190, 190) - ); - break; - - } - - } - - parent::__construct(); - - $this->label = new awLabel; - $this->label->setCallbackFunction('callbackPerCent'); - - } - - /** - * Change legend values - * - * @param array $legend An array of values for each part of the pie - */ - public function setLegend($legend) { - - $this->legendValues = (array)$legend; - - } - - /** - * Set a border all around the pie - * - * @param awColor $color A color for the border - */ - public function setBorderColor(awColor $color) { - $this->border = $color; - } - - /** - * Set a border all around the pie - * - * @param awColor $color A color for the border - */ - public function setBorder(awColor $color) { - if(ARTICHOW_DEPRECATED === TRUE) { - awImage::drawError('Class Pie: Method setBorder() has been deprecated since Artichow 1.0.9. Please use setBorderColor() instead.'); - } else { - $this->setBorderColor($color); - } - } - - /** - * Change 3D effect intensity - * - * @param int $size Effect size - */ - public function set3D($size) { - $this->size = (int)$size; - } - - /** - * Change initial angle - * - * @param int $angle New angle in degrees - */ - public function setStartAngle($angle) { - $this->angle = (int)$angle; - } - - /** - * Change label precision - * - * @param int $precision New precision - */ - public function setLabelPrecision($precision) { - $this->precision = (int)$precision; - } - - /** - * Change label position - * - * @param int $position New position in pixels - */ - public function setLabelPosition($position) { - $this->position = (int)$position; - } - - /** - * Change label number - * - * @param int $number New number - */ - public function setLabelNumber($number) { - $this->number = is_null($number) ? $number : (int)$number; - } - - /** - * Change label minimum - * - * @param int $minimum New minimum - */ - public function setLabelMinimum($minimum) { - $this->minimum = is_null($minimum) ? $minimum : (int)$minimum; - } - - /** - * Change Pie explode - * - * @param array $explode - */ - public function explode($explode) { - $this->explode = (array)$explode; - } - - public function drawEnvelope(awDriver $driver) { - - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - $count = count($this->values); - $sum = array_sum($this->values); - - $width = $x2 - $x1; - $height = $y2 - $y1; - - if($aliasing) { - $x = $width / 2; - $y = $height / 2; - } else { - $x = $width / 2 + $x1; - $y = $height / 2 + $y1; - } - - $position = $this->angle; - $values = array(); - $parts = array(); - $angles = 0; - - if($aliasing) { - $side = new awSide(0, 0, 0, 0); - } - - foreach($this->values as $key => $value) { - - $angle = ($value / $sum * 360); - - if($key === $count - 1) { - $angle = 360 - $angles; - } - - $angles += $angle; - - if(array_key_exists($key, $this->explode)) { - $middle = 360 - ($position + $angle / 2); - $posX = $this->explode[$key] * cos($middle * M_PI / 180); - $posY = $this->explode[$key] * sin($middle * M_PI / 180) * -1; - - if($aliasing) { - $explode = new awPoint( - $posX * 2, - $posY * 2 - ); - $side->set( - max($side->left, $posX * -2), - max($side->right, $posX * 2), - max($side->top, $posY * -2), - max($side->bottom, $posY * 2) - ); - } else { - $explode = new awPoint( - $posX, - $posY - ); - } - - } else { - $explode = new awPoint(0, 0); - } - - $values[$key] = array( - $position, ($position + $angle), $explode - ); - - $color = $this->colors[$key % count($this->colors)]; - $parts[$key] = new awPiePart($color); - - // Add part to the legend - $legend = array_key_exists($key, $this->legendValues) ? $this->legendValues[$key] : $key; - $this->legend->add($parts[$key], $legend, awLegend::BACKGROUND); - - $position += $angle; - - } - - if($aliasing) { - - $mainDriver = $driver; - - $x *= 2; - $y *= 2; - $width *= 2; - $height *= 2; - $this->size *= 2; - - $image = new awImage; - $image->border->hide(); - - // Adds support for antialiased pies on non-white background - $background = $this->getBackground(); - - if($background instanceof awColor) { - $image->setBackgroundColor($background); - } -// elseif($background instanceof awGradient) { -// $image->setBackgroundColor(new White(100)); -// } - - $image->setSize( - $width + $side->left + $side->right, - $height + $side->top + $side->bottom + $this->size + 1 /* bugs.php.net ! */ - ); - - $driver = $image->getDriver( - $width / $image->width, - $height / $image->height, - ($width / 2 + $side->left) / $image->width, - ($height / 2 + $side->top) / $image->height - ); - - } - - // Draw 3D effect - for($i = $this->size; $i > 0; $i--) { - - foreach($values as $key => $value) { - - $color = clone $this->colors[$key % count($this->colors)]; - $color->brightness(-50); - - list($from, $to, $explode) = $value; - - $driver->filledArc($color, $explode->move($x, $y + $i), $width, $height, $from, $to); - - unset($color); - - if($this->border instanceof awColor) { - - $point = $explode->move($x, $y); - - if($i === $this->size) { - - $driver->arc($this->border, $point->move(0, $this->size), $width, $height, $from, $to); - - } - - } - - } - - } - - foreach($values as $key => $value) { - - $color = $this->colors[$key % count($this->colors)]; - - list($from, $to, $explode) = $value; - - $driver->filledArc($color, $explode->move($x, $y), $width, $height, $from, $to); - - if($this->border instanceof awColor) { - - $point = $explode->move($x, $y); - $driver->arc($this->border, $point, $width, $height, $from, $to); - } - - } - - if($aliasing) { - - $x = $x / 2 + $x1; - $y = $y / 2 + $y1; - $width /= 2; - $height /= 2; - $this->size /= 2; - - foreach($values as $key => $value) { - $old = $values[$key][2]; - $values[$key][2] = new awPoint( - $old->x / 2, $old->y / 2 - ); - } - - $mainDriver->copyResizeImage( - $image, - new awPoint($x1 - $side->left / 2, $y1 - $side->top / 2), - new awPoint($x1 - $side->left / 2 + $image->width / 2, $y1 - $side->top / 2 + $image->height/ 2), - new awPoint(0, 0), - new awPoint($image->width, $image->height), - TRUE - ); - - $driver = $mainDriver; - - } - - // Get labels values - $pc = array(); - foreach($this->values as $key => $value) { - $pc[$key] = round($value / $sum * 100, $this->precision); - } - if($this->label->count() === 0) { // Check that there is no user defined values - $this->label->set($pc); - } - - $position = 0; - - foreach($pc as $key => $value) { - - // Limit number of labels to display - if($position === $this->number) { - break; - } - - if(is_null($this->minimum) === FALSE and $value < $this->minimum) { - continue; - } - - $position++; - - list($from, $to, $explode) = $values[$key]; - - $angle = $from + ($to - $from) / 2; - $angleRad = (360 - $angle) * M_PI / 180; - - $point = new awPoint( - $x + $explode->x + cos($angleRad) * ($width / 2 + $this->position), - $y + $explode->y - sin($angleRad) * ($height / 2 + $this->position) - ); - - $angle %= 360; - - // We don't display labels on the 3D effect - if($angle > 0 and $angle < 180) { - $point = $point->move(0, -1 * sin($angleRad) * $this->size); - } - - if($angle >= 45 and $angle < 135) { - $this->label->setAlign(awLabel::CENTER, awLabel::BOTTOM); - } else if($angle >= 135 and $angle < 225) { - $this->label->setAlign(awLabel::RIGHT, awLabel::MIDDLE); - } else if($angle >= 225 and $angle < 315) { - $this->label->setAlign(awLabel::CENTER, awLabel::TOP); - } else { - $this->label->setAlign(awLabel::LEFT, awLabel::MIDDLE); - } - - $this->label->draw( - $driver, - $point, - $key - ); - - } - - } - - /** - * Return margins around the component - * - * @return array Left, right, top and bottom margins - */ - public function getMargin() { - - // Get axis informations - - $leftAxis = $this->padding->left; - $rightAxis = $this->padding->right; - $topAxis = $this->padding->top; - $bottomAxis = $this->padding->bottom; - - return array($leftAxis, $rightAxis, $topAxis, $bottomAxis); - - } - - - /** - * Change values of Y axis - * This method ignores not numeric values - * - * @param array $values - */ - public function setValues($values) { - - $this->checkArray($values); - $this->values = $values; - - } - - - /** - * Return values of Y axis - * - * @return array - */ - public function getValues() { - return $this->values; - } - - private function checkArray(&$array) { - - if(is_array($array) === FALSE) { - awImage::drawError("Class Pie: You tried to set values that are not an array."); - } - - foreach($array as $key => $value) { - if(is_numeric($value) === FALSE) { - unset($array[$key]); - } - } - - if(count($array) < 1) { - awImage::drawError("Class Pie: Your graph must have at least 1 value."); - } - - } - -} - -registerClass('Pie'); - -/** - * Pie - * - * @package Artichow - */ -class awPiePart implements awLegendable { - - /** - * Pie part color - * - * @var Color - */ - protected $color; - - /** - * Build a new awPiePart - * - * @param awColor $color Pie part color - */ - public function __construct(awColor $color) { - - $this->color = $color; - - } - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground() { - return $this->color; - } - - /** - * Get the line thickness - * - * @return NULL - */ - public function getLegendLineThickness() { - } - - /** - * Get the line type - * - * @return NULL - */ - public function getLegendLineStyle() { - } - - /** - * Get the color of line - * - * @return NULL - */ - public function getLegendLineColor() { - } - - /** - * Get a mark object - * - * @return NULL - */ - public function getLegendMark() { - } - -} - -registerClass('PiePart'); - -function callbackPerCent($value) { - return $value.'%'; -} diff --git a/modules/graphartichow/artichow/Plot.class.php b/modules/graphartichow/artichow/Plot.class.php deleted file mode 100644 index 614b68efb..000000000 --- a/modules/graphartichow/artichow/Plot.class.php +++ /dev/null @@ -1,1463 +0,0 @@ -grid = new awGrid; - $this->grid->setBackgroundColor(new awWhite); - - $this->padding->add(20, 0, 0, 20); - - $this->xAxis = new awAxis; - $this->xAxis->addTick('major', new awTick(0, 5)); - $this->xAxis->addTick('minor', new awTick(0, 3)); - $this->xAxis->setTickStyle(awTick::OUT); - $this->xAxis->label->setFont(new awTuffy(7)); - - $this->yAxis = new awAxis; - $this->yAxis->auto(TRUE); - $this->yAxis->addTick('major', new awTick(0, 5)); - $this->yAxis->addTick('minor', new awTick(0, 3)); - $this->yAxis->setTickStyle(awTick::OUT); - $this->yAxis->setNumberByTick('minor', 'major', 3); - $this->yAxis->label->setFont(new awTuffy(7)); - $this->yAxis->title->setAngle(90); - - } - - /** - * Get plot values - * - * @return array - */ - public function getValues() { - return $this->datay; - } - - /** - * Reduce number of values in the plot - * - * @param int $number Reduce number of values to $number - */ - public function reduce($number) { - - $count = count($this->datay); - $ratio = ceil($count / $number); - - if($ratio > 1) { - - $tmpy = $this->datay; - $datay = array(); - - $datax = array(); - $cbLabel = $this->xAxis->label->getCallbackFunction(); - - for($i = 0; $i < $count; $i += $ratio) { - - $slice = array_slice($tmpy, $i, $ratio); - $datay[] = array_sum($slice) / count($slice); - - // Reduce data on X axis if needed - if($cbLabel !== NULL) { - $datax[] = $cbLabel($i + round($ratio / 2)); - } - - } - - $this->setValues($datay); - - if($cbLabel !== NULL) { - $this->xAxis->setLabelText($datax); - } - - - } - - } - - /** - * Count values in the plot - * - * @return int - */ - public function getXAxisNumber() { - list($min, $max) = $this->xAxis->getRange(); - return ($max - $min + 1); - } - - /** - * Change X axis - * - * @param int $axis - */ - public function setXAxis($axis) { - $this->xAxisPosition = $axis; - } - - /** - * Get X axis - * - * @return int - */ - public function getXAxis() { - return $this->xAxisPosition; - } - - /** - * Set X axis on zero - * - * @param bool $zero - */ - public function setXAxisZero($zero) { - $this->xAxisZero = (bool)$zero; - } - - /** - * Set Y axis on zero - * - * @param bool $zero - */ - public function setYAxisZero($zero) { - $this->yAxisZero = (bool)$zero; - } - - /** - * Change Y axis - * - * @param int $axis - */ - public function setYAxis($axis) { - $this->yAxisPosition = $axis; - } - - /** - * Get Y axis - * - * @return int - */ - public function getYAxis() { - return $this->yAxisPosition; - } - - /** - * Change min value for Y axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setYMin($value) { - $this->yMin = $value; - $this->yAxis->auto(FALSE); - $this->updateAxis(); - } - - /** - * Change max value for Y axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setYMax($value) { - $this->yMax = $value; - $this->yAxis->auto(FALSE); - $this->updateAxis(); - } - - /** - * Change min value for X axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setXMin($value) { - $this->xMin = $value; - $this->updateAxis(); - } - - /** - * Change max value for X axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setXMax($value) { - $this->xMax = $value; - $this->updateAxis(); - } - - /** - * Get min value for Y axis - * - * @return float $value - */ - public function getYMin() { - if($this->auto) { - if(is_null($this->yMin)) { - $min = array_min($this->datay); - if($min > 0) { - return 0; - } - } - } - return is_null($this->yMin) ? array_min($this->datay) : (float)$this->yMin; - } - - /** - * Get max value for Y axis - * - * @return float $value - */ - public function getYMax() { - if($this->auto) { - if(is_null($this->yMax)) { - $max = array_max($this->datay); - if($max < 0) { - return 0; - } - } - } - return is_null($this->yMax) ? array_max($this->datay) : (float)$this->yMax; - } - - /** - * Get min value for X axis - * - * @return float $value - */ - public function getXMin() { - return floor(is_null($this->xMin) ? array_min($this->datax) : $this->xMin); - } - - /** - * Get max value for X axis - * - * @return float $value - */ - public function getXMax() { - return (ceil(is_null($this->xMax) ? array_max($this->datax) : (float)$this->xMax)) + ($this->getXCenter() ? 1 : 0); - } - - /** - * Get min value with spaces for Y axis - * - * @return float $value - */ - public function getRealYMin() { - $min = $this->getYMin(); - if($this->space->bottom !== NULL) { - $interval = ($this->getYMax() - $min) * $this->space->bottom / 100; - return $min - $interval; - } else { - return is_null($this->yMin) ? $min : (float)$this->yMin; - } - } - - /** - * Get max value with spaces for Y axis - * - * @return float $value - */ - public function getRealYMax() { - $max = $this->getYMax(); - if($this->space->top !== NULL) { - $interval = ($max - $this->getYMin()) * $this->space->top / 100; - return $max + $interval; - } else { - return is_null($this->yMax) ? $max : (float)$this->yMax; - } - } - - public function init(awDriver $driver) { - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - // Get space informations - list($leftSpace, $rightSpace, $topSpace, $bottomSpace) = $this->getSpace($x2 - $x1, $y2 - $y1); - - $this->xAxis->setPadding($leftSpace, $rightSpace); - - if($this->space->bottom > 0 or $this->space->top > 0) { - - list($min, $max) = $this->yAxis->getRange(); - $interval = $max - $min; - - $this->yAxis->setRange( - $min - $interval * $this->space->bottom / 100, - $max + $interval * $this->space->top / 100 - ); - - } - - // Auto-scaling mode - $this->yAxis->autoScale(); - - // Number of labels is not specified - if($this->yAxis->getLabelNumber() === NULL) { - $number = round(($y2 - $y1) / 75) + 2; - $this->yAxis->setLabelNumber($number); - } - - $this->xAxis->line->setX($x1, $x2); - $this->yAxis->line->setY($y2, $y1); - - // Set ticks - - $this->xAxis->tick('major')->setNumber($this->getXAxisNumber()); - $this->yAxis->tick('major')->setNumber($this->yAxis->getLabelNumber()); - - - // Center X axis on zero - if($this->xAxisZero) { - $this->xAxis->setYCenter($this->yAxis, 0); - } - - // Center Y axis on zero - if($this->yAxisZero) { - $this->yAxis->setXCenter($this->xAxis, 0); - } - - // Set axis labels - $labels = array(); - - list($xMin, $xMax) = $this->xAxis->getRange(); - for($i = $xMin; $i <= $xMax; $i++) { - $labels[] = $i; - } - $this->xAxis->label->set($labels); - - parent::init($driver); - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - list($leftSpace, $rightSpace) = $this->getSpace($x2 - $x1, $y2 - $y1); - - // Create the grid - $this->createGrid(); - - // Draw the grid - $this->grid->setSpace($leftSpace, $rightSpace, 0, 0); - $this->grid->draw($driver, $x1, $y1, $x2, $y2); - - } - - public function drawEnvelope(awDriver $driver) { - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - if($this->getXCenter()) { - $size = $this->xAxis->getDistance(0, 1); - $this->xAxis->label->move($size / 2, 0); - $this->xAxis->label->hideLast(TRUE); - } - - // Draw top axis - if($this->xAxisPosition === awPlot::TOP or $this->xAxisPosition === awPlot::BOTH) { - $top = clone $this->xAxis; - if($this->xAxisZero === FALSE) { - $top->line->setY($y1, $y1); - } - $top->label->setAlign(NULL, awLabel::TOP); - $top->label->move(0, -3); - $top->title->move(0, -25); - $top->draw($driver); - } - - // Draw bottom axis - if($this->xAxisPosition === awPlot::BOTTOM or $this->xAxisPosition === awPlot::BOTH) { - $bottom = clone $this->xAxis; - if($this->xAxisZero === FALSE) { - $bottom->line->setY($y2, $y2); - } - $bottom->label->setAlign(NULL, awLabel::BOTTOM); - $bottom->label->move(0, 3); - $bottom->reverseTickStyle(); - $bottom->title->move(0, 25); - $bottom->draw($driver); - } - - // Draw left axis - if($this->yAxisPosition === awPlot::LEFT or $this->yAxisPosition === awPlot::BOTH) { - $left = clone $this->yAxis; - if($this->yAxisZero === FALSE) { - $left->line->setX($x1, $x1); - } - $left->label->setAlign(awLabel::RIGHT); - $left->label->move(-6, 0); - $left->title->move(-25, 0); - $left->draw($driver); - } - - // Draw right axis - if($this->yAxisPosition === awPlot::RIGHT or $this->yAxisPosition === awPlot::BOTH) { - $right = clone $this->yAxis; - if($this->yAxisZero === FALSE) { - $right->line->setX($x2, $x2); - } - $right->label->setAlign(awLabel::LEFT); - $right->label->move(6, 0); - $right->reverseTickStyle(); - $right->title->move(25, 0); - $right->draw($driver); - } - - } - - protected function createGrid() { - - $max = $this->getRealYMax(); - $min = $this->getRealYMin(); - - $number = $this->yAxis->getLabelNumber() - 1; - - if($number < 1) { - return; - } - - // Horizontal lines of the grid - - $h = array(); - for($i = 0; $i <= $number; $i++) { - $h[] = $i / $number; - } - - // Vertical lines - - $major = $this->yAxis->tick('major'); - $interval = $major->getInterval(); - $number = $this->getXAxisNumber() - 1; - - $w = array(); - - if($number > 0) { - - for($i = 0; $i <= $number; $i++) { - if($i%$interval === 0) { - $w[] = $i / $number; - } - } - - } - - $this->grid->setGrid($w, $h); - - } - - /** - * Change values of Y axis - * This method ignores not numeric values - * - * @param array $datay - * @param array $datax - */ - public function setValues($datay, $datax = NULL) { - - $this->checkArray($datay); - - foreach($datay as $key => $value) { - unset($datay[$key]); - $datay[(int)$key] = $value; - } - - if($datax === NULL) { - $datax = array(); - for($i = 0; $i < count($datay); $i++) { - $datax[] = $i; - } - } else { - foreach($datax as $key => $value) { - unset($datax[$key]); - $datax[(int)$key] = $value; - } - } - - $this->checkArray($datax); - - if(count($datay) === count($datax)) { - - // Set values - $this->datay = $datay; - $this->datax = $datax; - // Update axis with the new awvalues - $this->updateAxis(); - } else { - awImage::drawError("Class Plot: Plots must have the same number of X and Y points."); - } - - } - - /** - * Return begin and end values - * - * @return array - */ - protected function getLimit() { - - $i = 0; - while(array_key_exists($i, $this->datay) and $this->datay[$i] === NULL) { - $i++; - } - $start = $i; - $i = count($this->datay) - 1; - while(array_key_exists($i, $this->datay) and $this->datay[$i] === NULL) { - $i--; - } - $stop = $i; - - return array($start, $stop); - - } - - /** - * Return TRUE if labels must be centered on X axis, FALSE otherwise - * - * @return bool - */ - abstract public function getXCenter(); - - private function updateAxis() { - - $this->xAxis->setRange( - $this->getXMin(), - $this->getXMax() - ); - $this->yAxis->setRange( - $this->getRealYMin(), - $this->getRealYMax() - ); - - } - - private function checkArray(&$array) { - - if(is_array($array) === FALSE) { - awImage::drawError("Class Plot: You tried to set a value that is not an array."); - } - - foreach($array as $key => $value) { - if(is_numeric($value) === FALSE and is_null($value) === FALSE) { - awImage::drawError("Class Plot: Expected numeric values for the plot."); - } - } - - if(count($array) < 1) { - awImage::drawError("Class Plot: Your plot must have at least 1 value."); - } - - } - -} - -registerClass('Plot', TRUE); - -class awPlotAxis { - - /** - * Left axis - * - * @var Axis - */ - public $left; - - /** - * Right axis - * - * @var Axis - */ - public $right; - - /** - * Top axis - * - * @var Axis - */ - public $top; - - /** - * Bottom axis - * - * @var Axis - */ - public $bottom; - - /** - * Build the group of axis - */ - public function __construct() { - - $this->left = new awAxis; - $this->left->auto(TRUE); - $this->left->label->setAlign(awLabel::RIGHT); - $this->left->label->move(-6, 0); - $this->yAxis($this->left); - $this->left->setTickStyle(awTick::OUT); - $this->left->title->move(-25, 0); - - $this->right = new awAxis; - $this->right->auto(TRUE); - $this->right->label->setAlign(awLabel::LEFT); - $this->right->label->move(6, 0); - $this->yAxis($this->right); - $this->right->setTickStyle(awTick::IN); - $this->right->title->move(25, 0); - - $this->top = new awAxis; - $this->top->label->setAlign(NULL, awLabel::TOP); - $this->top->label->move(0, -3); - $this->xAxis($this->top); - $this->top->setTickStyle(awTick::OUT); - $this->top->title->move(0, -25); - - $this->bottom = new awAxis; - $this->bottom->label->setAlign(NULL, awLabel::BOTTOM); - $this->bottom->label->move(0, 3); - $this->xAxis($this->bottom); - $this->bottom->setTickStyle(awTick::IN); - $this->bottom->title->move(0, 25); - - } - - protected function xAxis(awAxis $axis) { - - $axis->addTick('major', new awTick(0, 5)); - $axis->addTick('minor', new awTick(0, 3)); - $axis->label->setFont(new awTuffy(7)); - - } - - protected function yAxis(awAxis $axis) { - - $axis->addTick('major', new awTick(0, 5)); - $axis->addTick('minor', new awTick(0, 3)); - $axis->setNumberByTick('minor', 'major', 3); - $axis->label->setFont(new awTuffy(7)); - $axis->title->setAngle(90); - - } - -} - -registerClass('PlotAxis'); - -/** - * A graph with axis can contain some groups of components - * - * @package Artichow - */ -class awPlotGroup extends awComponentGroup { - - /** - * Grid properties - * - * @var Grid - */ - public $grid; - - /** - * Left, right, top and bottom axis - * - * @var PlotAxis - */ - public $axis; - - /** - * Set the X axis on zero - * - * @var bool - */ - protected $xAxisZero = TRUE; - - /** - * Set the Y axis on zero - * - * @var bool - */ - protected $yAxisZero = FALSE; - - /** - * Real axis used for Y axis - * - * @var string - */ - private $yRealAxis = awPlot::LEFT; - - /** - * Real axis used for X axis - * - * @var string - */ - private $xRealAxis = awPlot::BOTTOM; - - /** - * Change min value for Y axis - * - * @var mixed - */ - private $yMin = NULL; - - /** - * Change max value for Y axis - * - * @var mixed - */ - private $yMax = NULL; - - /** - * Change min value for X axis - * - * @var mixed - */ - private $xMin = NULL; - - /** - * Change max value for X axis - * - * @var mixed - */ - private $xMax = NULL; - - /** - * Build the PlotGroup - * - */ - public function __construct() { - - parent::__construct(); - - $this->grid = new awGrid; - $this->grid->setBackgroundColor(new awWhite); - - $this->axis = new awPlotAxis; - - } - - /** - * Set the X axis on zero or not - * - * @param bool $zero - */ - public function setXAxisZero($zero) { - $this->xAxisZero = (bool)$zero; - } - - /** - * Set the Y axis on zero or not - * - * @param bool $zero - */ - public function setYAxisZero($zero) { - $this->yAxisZero = (bool)$zero; - } - - /** - * Change min value for Y axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setYMin($value) { - $this->axis->left->auto(FALSE); - $this->axis->right->auto(FALSE); - $this->yMin = $value; - } - - /** - * Change max value for Y axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setYMax($value) { - $this->axis->left->auto(FALSE); - $this->axis->right->auto(FALSE); - $this->yMax = $value; - } - - /** - * Change min value for X axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setXMin($value) { - $this->xMin = $value; - } - - /** - * Change max value for X axis - * Set NULL for auto selection. - * - * @param float $value - */ - public function setXMax($value) { - $this->xMax = $value; - } - - /** - * Get min value for X axis - * - * @return float $value - */ - public function getXMin() { - - return $this->getX('min'); - - } - - /** - * Get max value for X axis - * - * @return float $value - */ - public function getXMax() { - - return $this->getX('max'); - - } - - private function getX($type) { - - switch($type) { - case 'max' : - if($this->xMax !== NULL) { - return $this->xMax; - } - break; - case 'min' : - if($this->xMin !== NULL) { - return $this->xMin; - } - break; - } - - $value = NULL; - $get = 'getX'.ucfirst($type); - - for($i = 0; $i < count($this->components); $i++) { - - $component = $this->components[$i]; - - if($value === NULL) { - $value = $component->$get(); - } else { - $value = $type($value, $component->$get()); - } - - } - - return $value; - - } - - /** - * Get min value with spaces for Y axis - * - * @param string $axis Axis name - * @return float $value - */ - public function getRealYMin($axis = NULL) { - - if($axis === NULL) { - return NULL; - } - - $min = $this->getRealY('min', $axis); - $max = $this->getRealY('max', $axis); - - if($this->space->bottom !== NULL) { - $interval = ($min - $max) * $this->space->bottom / 100; - return $min + $interval; - } else { - return $min; - } - - } - - /** - * Get max value with spaces for Y axis - * - * @param string $axis Axis name - * @return float $value - */ - public function getRealYMax($axis = NULL) { - - if($axis === NULL) { - return NULL; - } - - $min = $this->getRealY('min', $axis); - $max = $this->getRealY('max', $axis); - - if($this->space->top !== NULL) { - $interval = ($max - $min) * $this->space->top / 100; - return $max + $interval; - } else { - return $max; - } - - } - - private function getRealY($type, $axis) { - - switch($type) { - case 'max' : - if($this->yMax !== NULL) { - return $this->yMax; - } - break; - case 'min' : - if($this->yMin !== NULL) { - return $this->yMin; - } - break; - } - - $value = NULL; - $get = 'getY'.ucfirst($type); - - for($i = 0; $i < count($this->components); $i++) { - - $component = $this->components[$i]; - - switch($axis) { - - case awPlot::LEFT : - case awPlot::RIGHT : - $test = ($component->getYAxis() === $axis); - break; - default : - $test = FALSE; - - } - - if($test) { - - $auto = $component->yAxis->isAuto(); - $this->axis->{$axis}->auto($auto); - - if($value === NULL) { - $value = $component->$get(); - } else { - $value = $type($value, $component->$get()); - } - - } - - } - - return $value; - - } - - public function init(awDriver $driver) { - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - // Get PlotGroup space - list($leftSpace, $rightSpace, $topSpace, $bottomSpace) = $this->getSpace($x2 - $x1, $y2 - $y1); - - // Count values in the group - $values = $this->getXAxisNumber(); - - // Init the PlotGroup - $this->axis->top->line->setX($x1, $x2); - $this->axis->bottom->line->setX($x1, $x2); - $this->axis->left->line->setY($y2, $y1); - $this->axis->right->line->setY($y2, $y1); - - $this->axis->top->setPadding($leftSpace, $rightSpace); - $this->axis->bottom->setPadding($leftSpace, $rightSpace); - - $xMin = $this->getXMin(); - $xMax = $this->getXMax(); - - $this->axis->top->setRange($xMin, $xMax); - $this->axis->bottom->setRange($xMin, $xMax); - - for($i = 0; $i < count($this->components); $i++) { - - - $component = $this->components[$i]; - - $component->auto($this->auto); - - // Copy space to the component - - $component->setSpace($this->space->left, $this->space->right, $this->space->top, $this->space->bottom); - - $component->xAxis->setPadding($leftSpace, $rightSpace); - $component->xAxis->line->setX($x1, $x2); - - $component->yAxis->line->setY($y2, $y1); - - } - - // Set Y axis range - foreach(array('left', 'right') as $axis) { - - if($this->isAxisUsed($axis)) { - - $min = $this->getRealYMin($axis); - $max = $this->getRealYMax($axis); - - $interval = $max - $min; - - $this->axis->{$axis}->setRange( - $min - $interval * $this->space->bottom / 100, - $max + $interval * $this->space->top / 100 - ); - - // Auto-scaling mode - if($this->axis->{$axis}->isAuto()) { - $this->axis->{$axis}->autoScale(); - } - - } - - } - - if($this->axis->left->getLabelNumber() === NULL) { - $number = round(($y2 - $y1) / 75) + 2; - $this->axis->left->setLabelNumber($number); - } - - if($this->axis->right->getLabelNumber() === NULL) { - $number = round(($y2 - $y1) / 75) + 2; - $this->axis->right->setLabelNumber($number); - } - - // Center labels on X axis if needed - $test = array(awPlot::TOP => FALSE, awPlot::BOTTOM => FALSE); - - for($i = 0; $i < count($this->components); $i++) { - - - $component = $this->components[$i]; - - - if($component->getValues() !== NULL) { - - $axis = $component->getXAxis(); - - if($test[$axis] === FALSE) { - - // Center labels for bar plots - if($component->getXCenter()) { - $size = $this->axis->{$axis}->getDistance(0, 1); - $this->axis->{$axis}->label->move($size / 2, 0); - $this->axis->{$axis}->label->hideLast(TRUE); - $test[$axis] = TRUE; - } - - } - - } - - - } - - // Set axis labels - $labels = array(); - for($i = $xMin; $i <= $xMax; $i++) { - $labels[] = $i; - } - if($this->axis->top->label->count() === 0) { - $this->axis->top->label->set($labels); - } - if($this->axis->bottom->label->count() === 0) { - $this->axis->bottom->label->set($labels); - } - - // Set ticks - - $this->axis->top->tick('major')->setNumber($values); - $this->axis->bottom->tick('major')->setNumber($values); - $this->axis->left->tick('major')->setNumber($this->axis->left->getLabelNumber()); - $this->axis->right->tick('major')->setNumber($this->axis->right->getLabelNumber()); - - - // Set X axis on zero - if($this->xAxisZero) { - $axis = $this->selectYAxis(); - $this->axis->bottom->setYCenter($axis, 0); - $this->axis->top->setYCenter($axis, 0); - } - - // Set Y axis on zero - if($this->yAxisZero) { - $axis = $this->selectXAxis(); - $this->axis->left->setXCenter($axis, 1); - $this->axis->right->setXCenter($axis, 1); - } - - parent::init($driver); - - list($leftSpace, $rightSpace, $topSpace, $bottomSpace) = $this->getSpace($x2 - $x1, $y2 - $y1); - - // Create the grid - $this->createGrid(); - - // Draw the grid - $this->grid->setSpace($leftSpace, $rightSpace, 0, 0); - $this->grid->draw($driver, $x1, $y1, $x2, $y2); - - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - $xMin = $this->getXMin(); - $xMax = $this->getXMax(); - - $maxLeft = $this->getRealYMax(awPlot::LEFT); - $maxRight = $this->getRealYMax(awPlot::RIGHT); - - $minLeft = $this->getRealYMin(awPlot::LEFT); - $minRight = $this->getRealYMin(awPlot::RIGHT); - - foreach($this->components as $component) { - - $min = $component->getYMin(); - $max = $component->getYMax(); - - // Set component minimum and maximum - if($component->getYAxis() === awPlot::LEFT) { - - list($min, $max) = $this->axis->left->getRange(); - - $component->setYMin($min); - $component->setYMax($max); - - } else { - - list($min, $max) = $this->axis->right->getRange(); - - $component->setYMin($min); - $component->setYMax($max); - - } - - $component->setXAxisZero($this->xAxisZero); - $component->setYAxisZero($this->yAxisZero); - - $component->xAxis->setRange($xMin, $xMax); - - $component->drawComponent( - $driver, - $x1, $y1, - $x2, $y2, - $aliasing - ); - - $component->setYMin($min); - $component->setYMax($max); - - } - - } - - public function drawEnvelope(awDriver $driver) { - - list($x1, $y1, $x2, $y2) = $this->getPosition(); - - // Hide unused axis - foreach(array(awPlot::LEFT, awPlot::RIGHT, awPlot::TOP, awPlot::BOTTOM) as $axis) { - if($this->isAxisUsed($axis) === FALSE) { - $this->axis->{$axis}->hide(TRUE); - } - } - - // Draw top axis - $top = $this->axis->top; - if($this->xAxisZero === FALSE) { - $top->line->setY($y1, $y1); - } - $top->draw($driver); - - // Draw bottom axis - $bottom = $this->axis->bottom; - if($this->xAxisZero === FALSE) { - $bottom->line->setY($y2, $y2); - } - $bottom->draw($driver); - - // Draw left axis - $left = $this->axis->left; - if($this->yAxisZero === FALSE) { - $left->line->setX($x1, $x1); - } - $left->draw($driver); - - // Draw right axis - $right = $this->axis->right; - if($this->yAxisZero === FALSE) { - $right->line->setX($x2, $x2); - } - $right->draw($driver); - - } - - /** - * Is the specified axis used ? - * - * @param string $axis Axis name - * @return bool - */ - protected function isAxisUsed($axis) { - - for($i = 0; $i < count($this->components); $i++) { - - $component = $this->components[$i]; - - switch($axis) { - - case awPlot::LEFT : - case awPlot::RIGHT : - if($component->getYAxis() === $axis) { - return TRUE; - } - break; - - case awPlot::TOP : - case awPlot::BOTTOM : - if($component->getXAxis() === $axis) { - return TRUE; - } - break; - - } - - } - - return FALSE; - - } - - protected function createGrid() { - - $max = $this->getRealYMax(awPlot::LEFT); - $min = $this->getRealYMin(awPlot::RIGHT); - - // Select axis (left if possible, right otherwise) - $axis = $this->selectYAxis(); - - $number = $axis->getLabelNumber() - 1; - - if($number < 1) { - return; - } - - // Horizontal lines of grid - - $h = array(); - for($i = 0; $i <= $number; $i++) { - $h[] = $i / $number; - } - - // Vertical lines - - $major = $axis->tick('major'); - $interval = $major->getInterval(); - $number = $this->getXAxisNumber() - 1; - - $w = array(); - - if($number > 0) { - - for($i = 0; $i <= $number; $i++) { - if($i%$interval === 0) { - $w[] = $i / $number; - } - } - - } - - $this->grid->setGrid($w, $h); - - } - - protected function selectYAxis(){ - - // Select axis (left if possible, right otherwise) - if($this->isAxisUsed(awPlot::LEFT)) { - $axis = $this->axis->left; - } else { - $axis = $this->axis->right; - } - - return $axis; - - } - - protected function selectXAxis(){ - - // Select axis (bottom if possible, top otherwise) - if($this->isAxisUsed(awPlot::BOTTOM)) { - $axis = $this->axis->bottom; - } else { - $axis = $this->axis->top; - } - - return $axis; - - } - - protected function getXAxisNumber() { - $offset = $this->components[0]; - $max = $offset->getXAxisNumber(); - for($i = 1; $i < count($this->components); $i++) { - $offset = $this->components[$i]; - $max = max($max, $offset->getXAxisNumber()); - } - return $max; - } - -} - -registerClass('PlotGroup'); diff --git a/modules/graphartichow/artichow/ScatterPlot.class.php b/modules/graphartichow/artichow/ScatterPlot.class.php deleted file mode 100644 index 7e01c1425..000000000 --- a/modules/graphartichow/artichow/ScatterPlot.class.php +++ /dev/null @@ -1,300 +0,0 @@ -mark = new awMark; - $this->mark->setType(awMark::CIRCLE); - $this->mark->setSize(7); - $this->mark->border->show(); - - $this->label = new awLabel; - - $this->setValues($datay, $datax); - $this->setColor(new awBlack); - - } - - /** - * Display plot as impulses - * - * @param awColor $impulse Impulses color (or NULL to disable impulses) - */ - public function setImpulse($color) { - $this->impulse = $color; - } - - /** - * Link scatter plot points - * - * @param bool $link - * @param awColor $color Line color (default to black) - */ - public function link($link, $color = NULL) { - $this->link = (bool)$link; - if($color instanceof awColor) { - $this->setColor($color); - } - } - - /** - * Ignore null values for Y data and continue linking - * - * @param bool $link - */ - public function linkNull($link) { - $this->linkNull = (bool)$link; - } - - /** - * Change line color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->lineColor = $color; - } - - /** - * Change line style - * - * @param int $style - */ - public function setStyle($style) { - $this->lineStyle = (int)$style; - } - - /** - * Change line tickness - * - * @param int $tickness - */ - public function setThickness($tickness) { - $this->lineThickness = (int)$tickness; - } - - /** - * Get the line thickness - * - * @return int - */ - public function getLegendLineThickness() { - return $this->lineThickness; - } - - /** - * Get the line type - * - * @return int - */ - public function getLegendLineStyle() { - return $this->lineStyle; - } - - /** - * Get the color of line - * - * @return Color - */ - public function getLegendLineColor() { - return $this->lineColor; - } - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground() { - return NULL; - } - - /** - * Get a mark object - * - * @return Mark - */ - public function getLegendMark() { - return $this->mark; - } - - public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) { - - $count = count($this->datay); - - // Get start and stop values - list($start, $stop) = $this->getLimit(); - - // Build the polygon - $polygon = new awPolygon; - - for($key = 0; $key < $count; $key++) { - - $x = $this->datax[$key]; - $y = $this->datay[$key]; - - if($y !== NULL) { - $p = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($x, $y)); - $polygon->set($key, $p); - } else if($this->linkNull === FALSE) { - $polygon->set($key, NULL); - } - - } - - // Link points if needed - if($this->link) { - - $prev = NULL; - - foreach($polygon->all() as $point) { - - if($prev !== NULL and $point !== NULL) { - $driver->line( - $this->lineColor, - new awLine( - $prev, - $point, - $this->lineStyle, - $this->lineThickness - ) - ); - } - $prev = $point; - - } - } - - // Draw impulses - if($this->impulse instanceof awColor) { - - foreach($polygon->all() as $key => $point) { - - if($point !== NULL) { - - $zero = awAxis::toPosition( - $this->xAxis, - $this->yAxis, - new awPoint($key, 0) - ); - - $driver->line( - $this->impulse, - new awLine( - $zero, - $point, - awLine::SOLID, - 1 - ) - ); - - } - - } - - } - - // Draw marks and labels - foreach($polygon->all() as $key => $point) { - - $this->mark->draw($driver, $point); - $this->label->draw($driver, $point, $key); - - } - - } - - protected function xAxisPoint($position) { - $y = $this->xAxisZero ? 0 : $this->getRealYMin(); - return awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($position, $y)); - } - - public function getXCenter() { - return FALSE; - } - -} - -registerClass('ScatterPlot'); - diff --git a/modules/graphartichow/artichow/cache/Abel b/modules/graphartichow/artichow/cache/Abel deleted file mode 100644 index 82538a61245451da65c5188198e03a074a3685c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15596 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 diff --git a/modules/graphartichow/artichow/cache/Abel-time b/modules/graphartichow/artichow/cache/Abel-time deleted file mode 100644 index a730f38b1..000000000 --- a/modules/graphartichow/artichow/cache/Abel-time +++ /dev/null @@ -1,2 +0,0 @@ -1166203484 -png \ No newline at end of file diff --git a/modules/graphartichow/artichow/cache/Albert b/modules/graphartichow/artichow/cache/Albert deleted file mode 100644 index a40f424419122eb9ffca1cfd4b4db79ed72bd768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14816 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 Z4!L0LH4#=F1l|gQk`|X2s{k1W{TJdi;z$4h diff --git a/modules/graphartichow/artichow/cache/Example-006-time b/modules/graphartichow/artichow/cache/Example-006-time deleted file mode 100644 index 615edc04f..000000000 --- a/modules/graphartichow/artichow/cache/Example-006-time +++ /dev/null @@ -1,2 +0,0 @@ -1204776421 -png \ No newline at end of file diff --git a/modules/graphartichow/artichow/cache/index.php b/modules/graphartichow/artichow/cache/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/cache/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/common.php b/modules/graphartichow/artichow/common.php deleted file mode 100644 index f4e6e042f..000000000 --- a/modules/graphartichow/artichow/common.php +++ /dev/null @@ -1,96 +0,0 @@ - 0) { - - do { - $min = array_pop($array); - if(is_numeric($min) === FALSE) { - $min = NULL; - } - } while(count($array) > 0 and $min === NULL); - - if($min !== NULL) { - $min = (float)$min; - } - - foreach($array as $value) { - if(is_numeric($value) and (float)$value < $min) { - $min = (float)$value; - } - } - - return $min; - - } - - return NULL; - -} - -/* - * Get the maximum of an array and ignore non numeric values - */ -function array_max($array) { - - if(is_array($array) and count($array) > 0) { - - do { - $max = array_pop($array); - if(is_numeric($max) === FALSE) { - $max = NULL; - } - } while(count($array) > 0 and $max === NULL); - - if($max !== NULL) { - $max = (float)$max; - } - - foreach($array as $value) { - if(is_numeric($value) and (float)$value > $max) { - $max = (float)$value; - } - } - - return $max; - - } - - return NULL; - -} -/* - * Define file_put_contents() if needed - */ -if(function_exists('file_put_contents') === FALSE) { - - function file_put_contents($file, $content) { - $fp = fopen($file, 'w'); - if($fp) { - fwrite($fp, $content); - fclose($fp); - } - } - -} - -/* - * Change error handler - */ -set_error_handler('errorHandlerArtichow'); - -function errorHandlerArtichow($level, $message, $file, $line) { - awImage::drawError($message.' in '.$file.' on line '.$line.'.'); -} - diff --git a/modules/graphartichow/artichow/font/Tuffy.ttf b/modules/graphartichow/artichow/font/Tuffy.ttf deleted file mode 100644 index 8151817be0cd6ef44548420de0f34450bbd78fb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19300 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 diff --git a/modules/graphartichow/artichow/font/TuffyBoldItalic.ttf b/modules/graphartichow/artichow/font/TuffyBoldItalic.ttf deleted file mode 100644 index 554faf20211288e69e37514ccb8ca844875c0628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18068 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 diff --git a/modules/graphartichow/artichow/font/TuffyItalic.ttf b/modules/graphartichow/artichow/font/TuffyItalic.ttf deleted file mode 100644 index 5f972ec086f38a46c661439c0cb7889b1adad372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18904 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 Z>_#B7C6b&bB>Aj^WVTAOxCC-X{x{8C&Y}PS diff --git a/modules/graphartichow/artichow/font/index.php b/modules/graphartichow/artichow/font/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/font/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/images/book.png b/modules/graphartichow/artichow/images/book.png deleted file mode 100644 index da188510059e706fefc435bf908e30e00658f059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmV+&1LFLNP)PTS(J!6vxl+zpI;T z=oB+yZZ3spQMLsdh*V%vVM1t9*h2*MB$6=@ddZ+de9C$-iY|&^h!y3KP&CvrFWE(L zssG$&D($Az{pW7~|NrzL357~lkA0ud`J8h&=X(JDYaNj-MJHbs03qbUS%b15PnTL= zVi>0=ir*4^SAK1>PNPbv?OvN$Bw(v64p(JmB%cyXgffZ{p+YW60RZL5=T zIS|;isqBI}>U!OqBmIN+w=Pd0#IhW3n{qksH(AXb$K!fpSq`o5oVHtcx(pkF3(FeR zUAv5pj0j&pc?hUeV;#P(OhmHd~W!*LT^LmO~pRyS)td zSZL%nsSu5_d}r^Z`C`>G^$)h7qS90;ixZz&^oKyJPF!~~xl9c4atZVg+Ci&U0U@ia z@+}5o@{0#P(;oOb?K_|!n+5;Uin97<`^2a5d9+Qra5H%qg7~sy z440Ne_@ZMBEkh3UEd-GXMlcrRkmnIOj>ob~jSD>%`ZNIm7<}(6?&_u6@{H-^piu)N zkzlQBL;%|E1-Fj@Llt}*=tMF`~QW~@RTUYK_JK%bQYJGLt!7Gt5ikA||#O;B32mnVd{L?Xdt zVuEZ|m#(6BYE(`|yu_i?Bu(>(zO_52?H>KTM;7b(QllaoWg!%ffjTV#wkf3W+&l_B z78<2e(VS8tbs&Jhs8HWrkf&?;Z4))M4&PV~M6T(yD#$ZvprO$U10&9GrZ%bLWTF0P z&hE5MS)4fVNA_O{MdD30?H?o(p)M4TdG_x~ds0@suRdNbo%tuvW?;m5y!G`*6B7(4 b|1Ik~?(WlL=xAxB00000NkvXXu0mjf`fOpE diff --git a/modules/graphartichow/artichow/images/error.png b/modules/graphartichow/artichow/images/error.png deleted file mode 100644 index e5addb1107c770e1daa86924375a03df224d1fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6066 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 z -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/images/errors/missing-anti-aliasing.png b/modules/graphartichow/artichow/images/errors/missing-anti-aliasing.png deleted file mode 100644 index f020d263f1dbf41bb183c10d7d6479564e4d89be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7634 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 -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/images/paperclip.png b/modules/graphartichow/artichow/images/paperclip.png deleted file mode 100644 index 12188f90cd9e0b0f7213dc840b13aba94aee64e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)rQ+b=DmV$^AL8cZsDsYZKfu*h2dU6tX~0Dg6dEYBwd7ZGE)`>v zV*1_g-reWE_ueC9s9vuhX^qC7>v32h8_5R$UqUy_s9znM6}s#o>-Q3I&hpD0E%gvZ($IWvH+ByT1qTH;#pN)J|AHV$YjiQ4MZsFT zaU}y5Y!!=>q!=3eLeeH}ZgTIr_qgarr2)_GIsEu69)6EOpLg%h>qaW=`$EdNzO!@k z_Wbu}=FEP;`1$FSpOWtwIx4rD`^!LbR!;N-viYIn;85Xx*K@8vHZ|e*%bf|_y78hR zoPlf7&s|7moY#nhC;m6^#+6Clnz{5y%5!g;xnW^uv%?uTnp^z%ap%k(EX_YNIbF;a zv3()!42fYH(g|P2c8ZzY1j_2-xbdsw{?Y6YpUS^TVx&N$3AgI}Zh8)*ank+3N!d?X zg9Ra-0>bq3UT(m(Opu<9UC0&AT^zlg^i+`a4pHs6*KV+qcKF=1r23_Ma`=tw1)q7@ zk?G9%2+}HGx)G>{2z@|yA}##<*hJWB(B5w9_7SU5%vbpgb@|20LGF)H2u#85Mx{>^BTZTvamKbG?85N@NC{pZqzwoPj>TZ#Dr*=sO$J(f5bV=Un*1px z^oA)~Ib1EthnhlPz|c$*kaVil!WQ?BS}Ym@W2noUUYo0KLQ%j}U%(NhRhy+yv9P_z z>dajl0HrxLo-Xp8YcZ=L{&g4fpTi3mXbiY~yIJGGdkdU&I;a1op9r3Rls`P1A2({0 emwrBl0saQPHuzyOqY|+I0000 'toProportionalValue', - 'toPosition' => 'toProportionalPosition' - ); - - /** - * Build the axis - * - * @param float $min Begin of the range of the axis - * @param float $max End of the range of the axis - */ - public function __construct($min = NULL, $max = NULL) { - - $this->line = new awVector( - new awPoint(0, 0), - new awPoint(0, 0) - ); - - $this->label = new awLabel; - $this->padding = new awSide; - - $this->title = new awLabel( - NULL, - NULL, - NULL, - 0 - ); - - $this->setColor(new awBlack); - - if($min !== NULL and $max !== NULL) { - $this->setRange($min, $max); - } - - } - - /** - * Enable/disable auto-scaling mode - * - * @param bool $auto - */ - public function auto($auto) { - $this->auto = (bool)$auto; - } - - /** - * Get auto-scaling mode status - * - * @return bool - */ - public function isAuto() { - return $this->auto; - } - - /** - * Hide axis - * - * @param bool $hide - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show axis - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = !(bool)$show; - } - - /** - * Return a tick object from its name - * - * @param string $name Tick object name - * @return Tick - */ - public function tick($name) { - - return array_key_exists($name, $this->ticks) ? $this->ticks[$name] : NULL; - - } - - /** - * Add a tick object - * - * @param string $name Tick object name - * @param awTick $tick Tick object - */ - public function addTick($name, awTick $tick) { - - $this->ticks[$name] = $tick; - - } - - /** - * Delete a tick object - * - * @param string $name Tick object name - */ - public function deleteTick($name) { - if(array_key_exists($name, $this->ticks)) { - unset($this->ticks[$name]); - } - } - - /** - * Hide all ticks - * - * @param bool $hide Hide or not ? - */ - public function hideTicks($hide = TRUE) { - - foreach($this->ticks as $tick) { - $tick->hide($hide); - } - - } - - /** - * Change ticks style - * - * @param int $style Ticks style - */ - public function setTickStyle($style) { - - foreach($this->ticks as $tick) { - $tick->setStyle($style); - } - - } - - /** - * Change ticks interval - * - * @param int $interval Ticks interval - */ - public function setTickInterval($interval) { - - foreach($this->ticks as $tick) { - $tick->setInterval($interval); - } - - } - - /** - * Change number of ticks relative to others ticks - * - * @param awTick $to Change number of theses ticks - * @param awTick $from Ticks reference - * @param float $number Number of ticks by the reference - */ - public function setNumberByTick($to, $from, $number) { - $this->ticks[$to]->setNumberByTick($this->ticks[$from], $number); - } - - /** - * Reverse ticks style - */ - public function reverseTickStyle() { - - foreach($this->ticks as $tick) { - if($tick->getStyle() === awTick::IN) { - $tick->setStyle(awTick::OUT); - } else if($tick->getStyle() === awTick::OUT) { - $tick->setStyle(awTick::IN); - } - } - - } - - /** - * Change interval of labels - * - * @param int $interval Interval - */ - public function setLabelInterval($interval) { - $this->auto(FALSE); - $this->setTickInterval($interval); - $this->label->setInterval($interval); - } - - /** - * Change number of labels - * - * @param int $number Number of labels to display (can be NULL) - */ - public function setLabelNumber($number) { - $this->auto(FALSE); - $this->labelNumber = is_null($number) ? NULL : (int)$number; - } - - /** - * Get number of labels - * - * @return int - */ - public function getLabelNumber() { - return $this->labelNumber; - } - - /** - * Change precision of labels - * - * @param int $precision Precision - */ - public function setLabelPrecision($precision) { - $this->auto(FALSE); - $function = 'axis'.time().'_'.(microtime() * 1000000); - eval('function '.$function.'($value) { - return sprintf("%.'.(int)$precision.'f", $value); - }'); - $this->label->setCallbackFunction($function); - } - - /** - * Change text of labels - * - * @param array $texts Some texts - */ - public function setLabelText($texts) { - if(is_array($texts)) { - $this->auto(FALSE); - $function = 'axis'.time().'_'.(microtime() * 1000000); - eval('function '.$function.'($value) { - $texts = '.var_export($texts, TRUE).'; - return isset($texts[$value]) ? $texts[$value] : \'?\'; - }'); - $this->label->setCallbackFunction($function); - } - } - - /** - * Get the position of a point - * - * @param awAxis $xAxis X axis - * @param awAxis $yAxis Y axis - * @param awPoint $p Position of the point - * @return Point Position on the axis - */ - public static function toPosition(awAxis $xAxis, awAxis $yAxis, awPoint $p) { - - $p1 = $xAxis->getPointFromValue($p->x); - $p2 = $yAxis->getPointFromValue($p->y); - - return new awPoint( - round($p1->x), - round($p2->y) - ); - - } - - /** - * Change title alignment - * - * @param int $alignment New Alignment - */ - public function setTitleAlignment($alignment) { - - switch($alignment) { - - case awLabel::TOP : - $this->setTitlePosition(1); - $this->title->setAlign(NULL, awLabel::BOTTOM); - break; - - case awLabel::BOTTOM : - $this->setTitlePosition(0); - $this->title->setAlign(NULL, awLabel::TOP); - break; - - case awLabel::LEFT : - $this->setTitlePosition(0); - $this->title->setAlign(awLabel::LEFT); - break; - - case awLabel::RIGHT : - $this->setTitlePosition(1); - $this->title->setAlign(awLabel::RIGHT); - break; - - } - - } - - /** - * Change title position on the axis - * - * @param float $position A new awposition between 0 and 1 - */ - public function setTitlePosition($position) { - $this->titlePosition = (float)$position; - } - - /** - * Change axis and axis title color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - $this->title->setColor($color); - } - - /** - * Change axis padding - * - * @param int $left Left padding in pixels - * @param int $right Right padding in pixels - */ - public function setPadding($left, $right) { - $this->padding->set($left, $right); - } - - /** - * Get axis padding - * - * @return Side - */ - public function getPadding() { - return $this->padding; - } - - /** - * Change axis range - * - * @param float $min - * @param float $max - */ - public function setRange($min, $max) { - if($min !== NULL) { - $this->range[0] = (float)$min; - } - if($max !== NULL) { - $this->range[1] = (float)$max; - } - } - - /** - * Get axis range - * - * @return array - */ - public function getRange() { - return $this->range; - } - - /** - * Change axis range callback function - * - * @param string $toValue Transform a position between 0 and 1 to a value - * @param string $toPosition Transform a value to a position between 0 and 1 on the axis - */ - public function setRangeCallback($toValue, $toPosition) { - $this->rangeCallback = array( - 'toValue' => (string)$toValue, - 'toPosition' => (string)$toPosition - ); - } - - /** - * Center X values of the axis - * - * @param awAxis $axis An axis - * @param float $value The reference value on the axis - */ - public function setXCenter(awAxis $axis, $value) { - - // Check vector angle - if($this->line->isVertical() === FALSE) { - awImage::drawError("Class Axis: setXCenter() can only be used on vertical axes."); - } - - $p = $axis->getPointFromValue($value); - - $this->line->setX( - $p->x, - $p->x - ); - - } - - /** - * Center Y values of the axis - * - * @param awAxis $axis An axis - * @param float $value The reference value on the axis - */ - public function setYCenter(awAxis $axis, $value) { - - // Check vector angle - if($this->line->isHorizontal() === FALSE) { - awImage::drawError("Class Axis: setYCenter() can only be used on horizontal axes."); - } - - $p = $axis->getPointFromValue($value); - - $this->line->setY( - $p->y, - $p->y - ); - - } - - /** - * Get the distance between to values on the axis - * - * @param float $from The first value - * @param float $to The last value - * @return Point - */ - public function getDistance($from, $to) { - - $p1 = $this->getPointFromValue($from); - $p2 = $this->getPointFromValue($to); - - return $p1->getDistance($p2); - - } - - /** - * Get a point on the axis from a value - * - * @param float $value - * @return Point - */ - protected function getPointFromValue($value) { - - $callback = $this->rangeCallback['toPosition']; - - list($min, $max) = $this->range; - $position = $callback($value, $min, $max); - - return $this->getPointFromPosition($position); - - } - - /** - * Get a point on the axis from a position - * - * @param float $position A position between 0 and 1 - * @return Point - */ - protected function getPointFromPosition($position) { - - $vector = $this->getVector(); - - $angle = $vector->getAngle(); - $size = $vector->getSize(); - - return $vector->p1->move( - cos($angle) * $size * $position, - -1 * sin($angle) * $size * $position - ); - - } - - /** - * Draw axis - * - * @param awDriver $driver A driver - */ - public function draw(awDriver $driver) { - - if($this->hide) { - return; - } - - $vector = $this->getVector(); - - // Draw axis ticks - $this->drawTicks($driver, $vector); - - // Draw axis line - $this->line($driver); - - // Draw labels - $this->drawLabels($driver); - - // Draw axis title - $p = $this->getPointFromPosition($this->titlePosition); - $this->title->draw($driver, $p); - - } - - public function autoScale() { - - if($this->isAuto() === FALSE) { - return; - } - - list($min, $max) = $this->getRange(); - $interval = $max - $min; - - if($interval > 0) { - $partMax = $max / $interval; - $partMin = $min / $interval; - } else { - $partMax = 0; - $partMin = 0; - } - - $difference = log($interval) / log(10); - $difference = floor($difference); - - $pow = pow(10, $difference); - - if($pow > 0) { - $intervalNormalize = $interval / $pow; - } else { - $intervalNormalize = 0; - } - - if($difference <= 0) { - - $precision = $difference * -1 + 1; - - if($intervalNormalize > 2) { - $precision--; - } - - } else { - $precision = 0; - } - - if($min != 0 and $max != 0) { - $precision++; - } - - if($this->label->getCallbackFunction() === NULL) { - $this->setLabelPrecision($precision); - } - - if($intervalNormalize <= 1.5) { - $intervalReal = 1.5; - $labelNumber = 4; - } else if($intervalNormalize <= 2) { - $intervalReal = 2; - $labelNumber = 5; - } else if($intervalNormalize <= 3) { - $intervalReal = 3; - $labelNumber = 4; - } else if($intervalNormalize <= 4) { - $intervalReal = 4; - $labelNumber = 5; - } else if($intervalNormalize <= 5) { - $intervalReal = 5; - $labelNumber = 6; - } else if($intervalNormalize <= 8) { - $intervalReal = 8; - $labelNumber = 5; - } else if($intervalNormalize <= 10) { - $intervalReal = 10; - $labelNumber = 6; - } - - if($min == 0) { - - $this->setRange( - $min, - $intervalReal * $pow - ); - - } else if($max == 0) { - - $this->setRange( - $intervalReal * $pow * -1, - 0 - ); - - } - - $this->setLabelNumber($labelNumber); - - } - - protected function line(awDriver $driver) { - - $driver->line( - $this->color, - $this->line - ); - - } - - protected function drawTicks(awDriver $driver, awVector $vector) { - - foreach($this->ticks as $tick) { - $tick->setColor($this->color); - $tick->draw($driver, $vector); - } - - } - - protected function drawLabels($driver) { - - if($this->labelNumber !== NULL) { - list($min, $max) = $this->range; - $number = $this->labelNumber - 1; - if($number < 1) { - return; - } - $function = $this->rangeCallback['toValue']; - $labels = array(); - for($i = 0; $i <= $number; $i++) { - $labels[] = $function($i / $number, $min, $max); - } - $this->label->set($labels); - } - - $labels = $this->label->count(); - - for($i = 0; $i < $labels; $i++) { - - $p = $this->getPointFromValue($this->label->get($i)); - $this->label->draw($driver, $p, $i); - - } - - } - - protected function getVector() { - - $angle = $this->line->getAngle(); - - // Compute paddings - $vector = new awVector( - $this->line->p1->move( - cos($angle) * $this->padding->left, - -1 * sin($angle) * $this->padding->left - ), - $this->line->p2->move( - -1 * cos($angle) * $this->padding->right, - -1 * -1 * sin($angle) * $this->padding->right - ) - ); - - return $vector; - - } - - public function __clone() { - - $this->label = clone $this->label; - $this->line = clone $this->line; - $this->title = clone $this->title; - - foreach($this->ticks as $name => $tick) { - $this->ticks[$name] = clone $tick; - } - - } - -} - -registerClass('Axis'); - -function toProportionalValue($position, $min, $max) { - return $min + ($max - $min) * $position; -} - -function toProportionalPosition($value, $min, $max) { - if($max - $min == 0) { - return 0; - } - return ($value - $min) / ($max - $min); -} diff --git a/modules/graphartichow/artichow/inc/Border.class.php b/modules/graphartichow/artichow/inc/Border.class.php deleted file mode 100644 index 6e8fc41fc..000000000 --- a/modules/graphartichow/artichow/inc/Border.class.php +++ /dev/null @@ -1,197 +0,0 @@ -setStyle($style); - - if($color instanceof awColor) { - $this->setColor($color); - } else { - $this->setColor(new awBlack); - } - - } - - /** - * Change border color - * This method automatically shows the border if it is hidden - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - $this->show(); - } - - /** - * Change border style - * - * @param int $style - */ - public function setStyle($style) { - $this->style = (int)$style; - } - - /** - * Hide border ? - * - * @param bool $hide - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show border ? - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = (bool)!$show; - } - - /** - * Is the border visible ? - * - * @return bool - */ - public function visible() { - return !$this->hide; - } - - /** - * Draw border as a rectangle - * - * @param awDriver $driver - * @param awPoint $p1 Top-left corner - * @param awPoint $p2 Bottom-right corner - */ - public function rectangle(awDriver $driver, awPoint $p1, awPoint $p2) { - - // Border is hidden - if($this->hide) { - return; - } - - $line = new awLine; - $line->setStyle($this->style); - $line->setLocation($p1, $p2); - - $driver->rectangle($this->color, $line); - - } - - /** - * Draw border as an ellipse - * - * @param awDriver $driver - * @param awPoint $center Ellipse center - * @param int $width Ellipse width - * @param int $height Ellipse height - */ - public function ellipse(awDriver $driver, awPoint $center, $width, $height) { - - // Border is hidden - if($this->hide) { - return; - } - - switch($this->style) { - - case awLine::SOLID : - $driver->ellipse($this->color, $center, $width, $height); - break; - - default : - awImage::drawError("Class Border: Dashed and dotted borders and not yet implemented on ellipses."); - break; - - } - - - } - - /** - * Draw border as a polygon - * - * @param awDriver $driver A Driver object - * @param awPolygon $polygon A Polygon object - */ - public function polygon(awDriver $driver, awPolygon $polygon) { - - // Border is hidden - if($this->hide) { - return; - } - - $polygon->setStyle($this->style); - $driver->polygon($this->color, $polygon); - - // In case of Line::SOLID, Driver::polygon() uses imagepolygon() - // which automatically closes the shape. In any other case, - // we have to do it manually here. - if($this->style !== Line::SOLID) { - $this->closePolygon($driver, $polygon); - } - } - - /** - * Draws the last line of a Polygon, between the first and last point - * - * @param awDriver $driver A Driver object - * @param awPolygon $polygon The polygon object to close - */ - private function closePolygon(awDriver $driver, awPolygon $polygon) { - $first = $polygon->get(0); - $last = $polygon->get($polygon->count() - 1); - - $line = new awLine($first, $last, $this->style, $polygon->getThickness()); - $driver->line($this->color, $line); - } - -} - -registerClass('Border'); diff --git a/modules/graphartichow/artichow/inc/Color.class.php b/modules/graphartichow/artichow/inc/Color.class.php deleted file mode 100644 index 40a7a93fb..000000000 --- a/modules/graphartichow/artichow/inc/Color.class.php +++ /dev/null @@ -1,165 +0,0 @@ -red = (int)$red; - $this->green = (int)$green; - $this->blue = (int)$blue; - $this->alpha = (int)round($alpha * 127 / 100); - - } - - /** - * Get RGB and alpha values of your color - * - * @return array - */ - public function getColor() { - return $this->rgba(); - } - - /** - * Change color brightness - * - * @param int $brightness Add this intensity to the color (betweeen -255 and +255) - */ - public function brightness($brightness) { - - $brightness = (int)$brightness; - - $this->red = min(255, max(0, $this->red + $brightness)); - $this->green = min(255, max(0, $this->green + $brightness)); - $this->blue = min(255, max(0, $this->blue + $brightness)); - - } - - /** - * Get RGB and alpha values of your color - * - * @return array - */ - public function rgba() { - - return array($this->red, $this->green, $this->blue, $this->alpha); - - } - -} - -registerClass('Color'); - -$colors = array( - 'Black' => array(0, 0, 0), - 'AlmostBlack' => array(48, 48, 48), - 'VeryDarkGray' => array(88, 88, 88), - 'DarkGray' => array(128, 128, 128), - 'MidGray' => array(160, 160, 160), - 'LightGray' => array(195, 195, 195), - 'VeryLightGray' => array(220, 220, 220), - 'White' => array(255, 255, 255), - 'VeryDarkRed' => array(64, 0, 0), - 'DarkRed' => array(128, 0, 0), - 'MidRed' => array(192, 0, 0), - 'Red' => array(255, 0, 0), - 'LightRed' => array(255, 192, 192), - 'VeryDarkGreen' => array(0, 64, 0), - 'DarkGreen' => array(0, 128, 0), - 'MidGreen' => array(0, 192, 0), - 'Green' => array(0, 255, 0), - 'LightGreen' => array(192, 255, 192), - 'VeryDarkBlue' => array(0, 0, 64), - 'DarkBlue' => array(0, 0, 128), - 'MidBlue' => array(0, 0, 192), - 'Blue' => array(0, 0, 255), - 'LightBlue' => array(192, 192, 255), - 'VeryDarkYellow' => array(64, 64, 0), - 'DarkYellow' => array(128, 128, 0), - 'MidYellow' => array(192, 192, 0), - 'Yellow' => array(255, 255, 2), - 'LightYellow' => array(255, 255, 192), - 'VeryDarkCyan' => array(0, 64, 64), - 'DarkCyan' => array(0, 128, 128), - 'MidCyan' => array(0, 192, 192), - 'Cyan' => array(0, 255, 255), - 'LightCyan' => array(192, 255, 255), - 'VeryDarkMagenta' => array(64, 0, 64), - 'DarkMagenta' => array(128, 0, 128), - 'MidMagenta' => array(192, 0, 192), - 'Magenta' => array(255, 0, 255), - 'LightMagenta' => array(255, 192, 255), - 'DarkOrange' => array(192, 88, 0), - 'Orange' => array(255, 128, 0), - 'LightOrange' => array(255, 168, 88), - 'VeryLightOrange' => array(255, 220, 168), - 'DarkPink' => array(192, 0, 88), - 'Pink' => array(255, 0, 128), - 'LightPink' => array(255, 88, 168), - 'VeryLightPink' => array(255, 168, 220), - 'DarkPurple' => array(88, 0, 192), - 'Purple' => array(128, 0, 255), - 'LightPurple' => array(168, 88, 255), - 'VeryLightPurple' => array(220, 168, 255), -); - - - -$php = ''; - -foreach($colors as $name => $color) { - - list($red, $green, $blue) = $color; - - $php .= ' - class aw'.$name.' extends awColor { - - public function __construct($alpha = 0) { - parent::__construct('.$red.', '.$green.', '.$blue.', $alpha); - } - - } - '; - - if(ARTICHOW_PREFIX !== 'aw') { - $php .= ' - class '.ARTICHOW_PREFIX.$name.' extends aw'.$name.' { - - } - '; - } - -} - -eval($php); - - - - diff --git a/modules/graphartichow/artichow/inc/Driver.class.php b/modules/graphartichow/artichow/inc/Driver.class.php deleted file mode 100644 index 345b01698..000000000 --- a/modules/graphartichow/artichow/inc/Driver.class.php +++ /dev/null @@ -1,724 +0,0 @@ -phpFontDriver = new awPHPFontDriver(); - $this->fileFontDriver = new awFileFontDriver(); - } - - /** - * Initialize the driver for a particular awImage object - * - * @param awImage $image - */ - abstract public function init(awImage $image); - - /** - * Initialize the Driver for a particular FileImage object - * - * @param awFileImage $fileImage The FileImage object to work on - * @param string $file Image filename - */ - abstract public function initFromFile(awFileImage $fileImage, $file); - - /** - * Change the image size - * - * @param int $width Image width - * @param int $height Image height - */ - abstract public function setImageSize($width, $height); - - /** - * Inform the driver of the position of your image - * - * @param float $x Position on X axis of the center of the component - * @param float $y Position on Y axis of the center of the component - */ - abstract public function setPosition($x, $y); - - /** - * Inform the driver of the position of your image - * This method need absolutes values - * - * @param int $x Left-top corner X position - * @param int $y Left-top corner Y position - */ - abstract public function setAbsPosition($x, $y); - - /** - * Move the position of the image - * - * @param int $x Add this value to X axis - * @param int $y Add this value to Y axis - */ - abstract public function movePosition($x, $y); - - /** - * Inform the driver of the size of your image - * Height and width must be between 0 and 1. - * - * @param int $w Image width - * @param int $h Image height - * @return array Absolute width and height of the image - */ - abstract public function setSize($w, $h); - - /** - * Inform the driver of the size of your image - * You can set absolute size with this method. - * - * @param int $w Image width - * @param int $h Image height - */ - abstract public function setAbsSize($w, $h); - - /** - * Get the size of the component handled by the driver - * - * @return array Absolute width and height of the component - */ - abstract public function getSize(); - - /** - * Turn antialiasing on or off - * - * @var bool $bool - */ - abstract public function setAntiAliasing($bool); - - /** - * When passed a Color object, returns the corresponding - * color identifier (driver dependant). - * - * @param awColor $color A Color object - * @return int $rgb A color identifier representing the color composed of the given RGB components - */ - abstract public function getColor(awColor $color); - - /** - * Draw an image here - * - * @param awImage $image Image - * @param int $p1 Image top-left point - * @param int $p2 Image bottom-right point - */ - abstract public function copyImage(awImage $image, awPoint $p1, awPoint $p2); - - /** - * Draw an image here - * - * @param awImage $image Image - * @param int $d1 Destination top-left position - * @param int $d2 Destination bottom-right position - * @param int $s1 Source top-left position - * @param int $s2 Source bottom-right position - * @param bool $resample Resample image ? (default to TRUE) - */ - abstract public function copyResizeImage(awImage $image, awPoint $d1, awPoint $d2, awPoint $s1, awPoint $s2, $resample = TRUE); - - /** - * Draw a string - * - * @var awText $text Text to print - * @param awPoint $point Draw the text at this point - * @param int $width Text max width - */ - abstract public function string(awText $text, awPoint $point, $width = NULL); - - /** - * Draw a pixel - * - * @param awColor $color Pixel color - * @param awPoint $p - */ - abstract public function point(awColor $color, awPoint $p); - - /** - * Draw a colored line - * - * @param awColor $color Line color - * @param awLine $line - * @param int $thickness Line tickness - */ - abstract public function line(awColor $color, awLine $line); - - /** - * Draw a color arc - - * @param awColor $color Arc color - * @param awPoint $center Point center - * @param int $width Ellipse width - * @param int $height Ellipse height - * @param int $from Start angle - * @param int $to End angle - */ - abstract public function arc(awColor $color, awPoint $center, $width, $height, $from, $to); - - /** - * Draw an arc with a background color - * - * @param awColor $color Arc background color - * @param awPoint $center Point center - * @param int $width Ellipse width - * @param int $height Ellipse height - * @param int $from Start angle - * @param int $to End angle - */ - abstract public function filledArc(awColor $color, awPoint $center, $width, $height, $from, $to); - - /** - * Draw a colored ellipse - * - * @param awColor $color Ellipse color - * @param awPoint $center Ellipse center - * @param int $width Ellipse width - * @param int $height Ellipse height - */ - abstract public function ellipse(awColor $color, awPoint $center, $width, $height); - - /** - * Draw an ellipse with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param awPoint $center Ellipse center - * @param int $width Ellipse width - * @param int $height Ellipse height - */ - abstract public function filledEllipse($background, awPoint $center, $width, $height); - - /** - * Draw a colored rectangle - * - * @param awColor $color Rectangle color - * @param awLine $line Rectangle diagonale - * @param awPoint $p2 - */ - abstract public function rectangle(awColor $color, awLine $line); - - /** - * Draw a rectangle with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param awLine $line Rectangle diagonale - */ - abstract public function filledRectangle($background, awLine $line); - - /** - * Draw a polygon - * - * @param awColor $color Polygon color - * @param Polygon A polygon - */ - abstract public function polygon(awColor $color, awPolygon $polygon); - - /** - * Draw a polygon with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param Polygon A polygon - */ - abstract public function filledPolygon($background, awPolygon $polygon); - - /** - * Sends the image, as well as the correct HTTP headers, to the browser - * - * @param awImage $image The Image object to send - */ - abstract public function send(awImage $image); - - /** - * Get the image as binary data - * - * @param awImage $image - */ - abstract public function get(awImage $image); - - /** - * Return the width of some text - * - * @param awText $text - */ - abstract public function getTextWidth(awText $text); - - /** - * Return the height of some text - * - * @param awText $text - */ - abstract public function getTextHeight(awText $text); - - /** - * Return the string representing the type of driver - * - * @return string - */ - public function getDriverString() { - return $this->driverString; - } - - /** - * Returns whether or not the driver is compatible with the given font type - * - * @param awFont $font - * @return bool - */ - abstract protected function isCompatibleWithFont(awFont $font); - -// abstract private function drawImage(awImage $image, $return = FALSE, $header = TRUE); - -} - -registerClass('Driver', TRUE); - -/** - * Abstract class for font drivers. - * Those are used to do all the grunt work on fonts. - * - * @package Artichow - */ - -abstract class awFontDriver { - - public function __construct() { - - } - - /** - * Draw the actual text. - * - * @param awDriver $driver The Driver object to draw upon - * @param awText $text The Text object - * @param awPoint $point Where to draw the text - * @param float $width The width of the area containing the text - */ - abstract public function string(awDriver $driver, awText $text, awPoint $point, $width = NULL); - - /** - * Calculate the width of a given Text. - * - * @param awText $text The Text object - * @param awDriver $driver The awDriver object used to draw the graph - */ - abstract public function getTextWidth(awText $text, awDriver $driver); - - /** - * Calculate the height of a given Text. - * - * @param awText $text The Text object - * @param awDriver $driver The awDriver object used to draw the graph - */ - abstract public function getTextHeight(awText $text, awDriver $driver); - -} - -registerClass('FontDriver', TRUE); - -/** - * Class to handle calculations on PHPFont objects - * - * @package Artichow - */ -class awPHPFontDriver extends awFontDriver { - - public function __construct() { - parent::__construct(); - } - - public function string(awDriver $driver, awText $text, awPoint $point, $width = NULL) { - - switch ($driver->getDriverString()) { - case 'gd': - $this->gdString($driver, $text, $point, $width); - break; - - default: - awImage::drawError('Class PHPFontDriver: Incompatibility between driver and font - You should never see this error message: have you called awDriver::isCompatibleWithFont() properly?'); - break; - - } - } - - /** - * Draw a string onto a GDDriver object - * - * @param awGDDriver $driver The GDDriver to draw the text upon - * @param awText $text The awText object containing the string to draw - * @param awPoint $point Where to draw the text - * @param float $width The width of the text - */ - private function gdString(awGDDriver $driver, awText $text, awPoint $point, $width = NULL) { - - $angle = $text->getAngle(); - if($angle !== 90 and $angle !== 0) { - awImage::drawError("Class PHPFontDriver: You can only use 0° and 90° angles."); - } - - if($angle === 90) { - $function = 'imagestringup'; - $addAngle = $this->getGDTextHeight($text); - } else { - $function = 'imagestring'; - $addAngle = 0; - } - - $color = $text->getColor(); - $rgb = $driver->getColor($color); - - $textString = $text->getText(); - $textString = str_replace("\r", "", $textString); - - $textHeight = $this->getGDTextHeight($text); - - // Split text if needed - if($width !== NULL) { - - $characters = floor($width / ($this->getGDTextWidth($text) / strlen($textString))); - - if($characters > 0) { - $textString = wordwrap($textString, $characters, "\n", TRUE); - } - - } - - $font = $text->getFont(); - $lines = explode("\n", $textString); - - foreach($lines as $i => $line) { - - // Line position handling - if($angle === 90) { - $addX = $i * $textHeight; - $addY = 0; - } else { - $addX = 0; - $addY = $i * $textHeight; - } - - $function( - $driver->resource, - $font->font, - $driver->x + $point->x + $addX, - $driver->y + $point->y + $addY + $addAngle, - $line, - $rgb - ); - - } - } - - public function getTextWidth(awText $text, awDriver $driver) { - - switch ($driver->getDriverString()) { - case 'gd': - return $this->getGDTextWidth($text); - - default: - awImage::drawError('Class PHPFontDriver: Cannot get text width - incompatibility between driver and font'); - break; - } - - } - - public function getTextHeight(awText $text, awDriver $driver) { - - switch ($driver->getDriverString()) { - case 'gd': - return $this->getGDTextHeight($text); - - default: - awImage::drawError('Class PHPFontDriver: Cannot get text height - incompatibility between driver and font'); - break; - } - - } - - /** - * Return the width of a text for a GDDriver - * - * @param awText $text - * @return int $fontWidth - */ - private function getGDTextWidth(awText $text) { - $font = $text->getFont(); - - if($text->getAngle() === 90) { - $text->setAngle(45); - return $this->getGDTextHeight($text); - } else if($text->getAngle() === 45) { - $text->setAngle(90); - } - - $fontWidth = imagefontwidth($font->font); - - if($fontWidth === FALSE) { - awImage::drawError("Class PHPFontDriver: Unable to get font size."); - } - - return (int)$fontWidth * strlen($text->getText()); - } - - /** - * Return the height of a text for a GDDriver - * - * @param awText $text - * @return int $fontHeight - */ - private function getGDTextHeight(awText $text) { - $font = $text->getFont(); - - if($text->getAngle() === 90) { - $text->setAngle(45); - return $this->getGDTextWidth($text); - } else if($text->getAngle() === 45) { - $text->setAngle(90); - } - - $fontHeight = imagefontheight($font->font); - - if($fontHeight === FALSE) { - awImage::drawError("Class PHPFontDriver: Unable to get font size."); - } - - return (int)$fontHeight; - } -} - -registerClass('PHPFontDriver'); - -/** - * Class to handle calculations on FileFont objects - * - * @package Artichow - */ -class awFileFontDriver extends awFontDriver { - - public function __construct() { - parent::__construct(); - } - - public function string(awDriver $driver, awText $text, awPoint $point, $width = NULL) { - - switch ($driver->getDriverString()) { - case 'gd': - $this->gdString($driver, $text, $point, $width); - break; - - default: - awImage::drawError('Class fileFontDriver: Incompatibility between driver and font - You should never see this error message: have you called awDriver::isCompatibleWithFont() properly?'); - break; - } - } - - /** - * Draw an awFileFont object on a GD ressource - * - * @param awGDDriver $driver The awGDDriver object containing the ressource to draw upon - * @param awText $text The awText object containing the string to draw - * @param awPoint $point Where to draw the string from - * @param float $width The width of the area containing the text - */ - private function gdString(awGDDriver $driver, awText $text, awPoint $point, $width = NULL) { - // Make easier font positionment - $text->setText($text->getText()." "); - - $font = $text->getFont(); - if($font instanceof awTTFFont === FALSE and $font->getExtension() === NULL) { - $font->setExtension('ttf'); - } - - $filePath = $font->getName().'.'.$font->getExtension(); - - $box = imagettfbbox($font->getSize(), $text->getAngle(), $filePath, $text->getText()); - $textHeight = - $box[5]; - - $box = imagettfbbox($font->getSize(), 90, $filePath, $text->getText()); - $textWidth = abs($box[6] - $box[2]); - - // Restore old text - $text->setText(substr($text->getText(), 0, strlen($text->getText()) - 1)); - - $textString = $text->getText(); - - // Split text if needed - if($width !== NULL) { - - $characters = floor($width / $this->getGDAverageWidth($font)); - $textString = wordwrap($textString, $characters, "\n", TRUE); - - } - - $color = $text->getColor(); - $rgb = $driver->getColor($color); - - imagettftext( - $driver->resource, - $font->getSize(), - $text->getAngle(), - $driver->x + $point->x + $textWidth * sin($text->getAngle() / 180 * M_PI), - $driver->y + $point->y + $textHeight, - $rgb, - $filePath, - $textString - ); - } - - public function getTextWidth(awText $text, awDriver $driver) { - switch ($driver->getDriverString()) { - case 'gd': - return $this->getGDTextWidth($text); - - default: - awImage::drawError('Class FileFontDriver: Cannot get text width - incompatibility between driver and font'); - break; - } - } - - public function getTextHeight(awText $text, awDriver $driver) { - switch ($driver->getDriverString()) { - case 'gd': - return $this->getGDTextHeight($text); - - default: - awImage::drawError('Class FileFontDriver: Cannot get text height - incompatibility between driver and font'); - break; - } - } - - private function getGDTextWidth(awText $text) { - $font = $text->getFont(); - if($font->getExtension() === NULL) { - $font->setExtension('ttf'); - } - - $filePath = $font->getName().'.'.$font->getExtension(); - - $box = imagettfbbox($font->getSize(), $text->getAngle(), $filePath, $text->getText()); - - if($box === FALSE) { - awImage::drawError("Class FileFontDriver: Unable to get font width (GD)."); - } - - list(, , $x2, , , , $x1, ) = $box; - - return abs($x2 - $x1); - } - - private function getGDTextHeight(awText $text) { - $font = $text->getFont(); - if($font->getExtension() === NULL) { - $font->setExtension('ttf'); - } - - $filePath = $font->getName().'.'.$font->getExtension(); - - $box = imagettfbbox($font->getSize(), $text->getAngle(), $filePath, $text->getText()); - - if($box === FALSE) { - awImage::drawError("Class FileFontDriver: Unable to get font height (GD)."); - } - - list(, , , $y2, , , , $y1) = $box; - - return abs($y2 - $y1); - } - - private function getGDAverageWidth(awFileFont $font) { - - $text = "azertyuiopqsdfghjklmmmmmmmwxcvbbbn,;:!?."; - - $box = imagettfbbox($font->getSize(), 0, $font->getName().'.'.$font->getExtension(), $text); - - if($box === FALSE) { - awImage::drawError("Class FileFontDriver: Unable to get font average width."); - } - - list(, , $x2, $y2, , , $x1, $y1) = $box; - - return abs($x2 - $x1) / strlen($text); - - } - -} - -registerClass('FileFontDriver'); - -// Include ARTICHOW_DRIVER by default to preserve backward compatibility. -require_once dirname(__FILE__).'/drivers/'.ARTICHOW_DRIVER.'.class.php'; - diff --git a/modules/graphartichow/artichow/inc/Font.class.php b/modules/graphartichow/artichow/inc/Font.class.php deleted file mode 100644 index 79267bde4..000000000 --- a/modules/graphartichow/artichow/inc/Font.class.php +++ /dev/null @@ -1,262 +0,0 @@ -string($this, $text, $point, $width); - - } - -} - -registerClass('Font', TRUE); - -/** - * Class for fonts that cannot be transformed, - * like the built-in PHP fonts for example. - * - * @package Artichow - */ -class awPHPFont extends awFont { - - /** - * The used font identifier - * - * @var int - */ - public $font; - - public function __construct($font = NULL) { - parent::__construct(); - - if($font !== NULL) { - $this->font = (int)$font; - } - } - -} - -registerClass('PHPFont'); - -/** - * Class for fonts that can be transformed (rotated, skewed, etc.), - * like TTF or FDB fonts for example. - * - * @package Artichow - */ -class awFileFont extends awFont { - - /** - * The name of the font, without the extension - * - * @var string - */ - protected $name; - - /** - * The size of the font - * - * @var int - */ - protected $size; - - /** - * The font filename extension - * - * @var string - */ - protected $extension; - - public function __construct($name, $size) { - parent::__construct(); - - $this->setName($name); - $this->setSize($size); - } - - /** - * Set the name of the font. The $name variable can contain the full path, - * or just the filename. Artichow will try to do The Right Thing, - * as well as set the extension property correctly if possible. - * - * @param string $name - */ - public function setName($name) { - $fontInfo = pathinfo((string)$name); - - if(strpos($fontInfo['dirname'], '/') !== 0) { - // Path is not absolute, use ARTICHOW_FONT - $name = ARTICHOW_FONT.DIRECTORY_SEPARATOR.$fontInfo['basename']; - $fontInfo = pathinfo($name); - } - - $this->name = $fontInfo['dirname'].DIRECTORY_SEPARATOR.$fontInfo['basename']; - - if(array_key_exists('extension', $fontInfo) and $fontInfo['extension'] !== '') { - $this->setExtension($fontInfo['extension']); - } - } - - /** - * Return the name of the font, i.e. the absolute path and the filename, without the extension. - * - * @return string - */ - public function getName() { - return $this->name; - } - - /** - * Set the size of the font, in pixels - * - * @param int $size - */ - public function setSize($size) { - $this->size = (int)$size; - } - - /** - * Return the size of the font, in pixels - * - * @return int - */ - public function getSize() { - return $this->size; - } - - /** - * Set the extension, without the dot - * - * @param string $extension - */ - public function setExtension($extension) { - $this->extension = (string)$extension; - } - - /** - * Get the filename extension for that font - * - * @return string - */ - public function getExtension() { - return $this->extension; - } - -} - -registerClass('FileFont'); - -/** - * Class representing TTF fonts - * - * @package Artichow - */ -class awTTFFont extends awFileFont { - - public function __construct($name, $size) { - parent::__construct($name, $size); - - if($this->getExtension() === NULL) { - $this->setExtension('ttf'); - } - } - -} - -registerClass('TTFFont'); - - - -$php = ''; - -for($i = 1; $i <= 5; $i++) { - - $php .= ' - class awFont'.$i.' extends awPHPFont { - - public function __construct() { - parent::__construct('.$i.'); - } - - } - '; - - if(ARTICHOW_PREFIX !== 'aw') { - $php .= ' - class '.ARTICHOW_PREFIX.'Font'.$i.' extends awFont'.$i.' { - } - '; - } - -} - -eval($php); - -$php = ''; - -foreach($fonts as $font) { - - $php .= ' - class aw'.$font.' extends awFileFont { - - public function __construct($size) { - parent::__construct(\''.$font.'\', $size); - } - - } - '; - - if(ARTICHOW_PREFIX !== 'aw') { - $php .= ' - class '.ARTICHOW_PREFIX.$font.' extends aw'.$font.' { - } - '; - } - -} - -eval($php); - - - -/* - * Environment modification for GD2 and TTF fonts - */ -if(function_exists('putenv')) { - putenv('GDFONTPATH='.ARTICHOW_FONT); -} - diff --git a/modules/graphartichow/artichow/inc/Gradient.class.php b/modules/graphartichow/artichow/inc/Gradient.class.php deleted file mode 100644 index d9d95ed1d..000000000 --- a/modules/graphartichow/artichow/inc/Gradient.class.php +++ /dev/null @@ -1,135 +0,0 @@ -from = $from; - $this->to = $to; - - } - -} - -registerClass('Gradient', TRUE); - - -/** - * Create a linear gradient - * - * @package Artichow - */ -class awLinearGradient extends awGradient { - - /** - * Gradient angle - * - * @var int - */ - public $angle; - - /** - * Build the linear gradient - * - * @param awColor $from From color - * @param awColor $to To color - * @param int $angle Gradient angle - */ - public function __construct($from, $to, $angle) { - - parent::__construct( - $from, $to - ); - - $this->angle = (int)$angle; - - } - -} - -registerClass('LinearGradient'); - - -/** - * Create a bilinear gradient - * - * @package Artichow - */ -class awBilinearGradient extends awLinearGradient { - - /** - * Gradient center - * - * @var float Center between 0 and 1 - */ - public $center; - - /** - * Build the bilinear gradient - * - * @param awColor $from From color - * @param awColor $to To color - * @param int $angle Gradient angle - * @param int $center Gradient center - */ - public function __construct($from, $to, $angle, $center = 0.5) { - - parent::__construct( - $from, $to, $angle - ); - - $this->center = (float)$center; - - } - -} - -registerClass('BilinearGradient'); - -/** - * Create a radial gradient - * - * @package Artichow - */ -class awRadialGradient extends awGradient { - -} - -registerClass('RadialGradient'); - diff --git a/modules/graphartichow/artichow/inc/Grid.class.php b/modules/graphartichow/artichow/inc/Grid.class.php deleted file mode 100644 index 2b02a53ee..000000000 --- a/modules/graphartichow/artichow/inc/Grid.class.php +++ /dev/null @@ -1,290 +0,0 @@ -color = new awColor(210, 210, 210); - $this->background = new awColor(255, 255, 255, 100); - - } - - /** - * Hide grid ? - * - * @param bool $hide - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Hide horizontal lines ? - * - * @param bool $hideHorizontal - */ - public function hideHorizontal($hide = TRUE) { - $this->hideHorizontal = (bool)$hide; - } - - /** - * Hide vertical lines ? - * - * @param bool $hideVertical - */ - public function hideVertical($hide = TRUE) { - $this->hideVertical = (bool)$hide; - } - - /** - * Change grid color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Remove grid background - */ - public function setNoBackground() { - $this->background = NULL; - } - - /** - * Change grid background color - * - * @param awColor $color - */ - public function setBackgroundColor(awColor $color) { - $this->background = $color; - } - - /** - * Change line type - * - * @param int $type - */ - public function setType($type) { - $this->type = (int)$type; - } - - /** - * Change grid interval - * - * @param int $hInterval - * @param int $vInterval - */ - public function setInterval($hInterval, $vInterval) { - $this->interval = array((int)$hInterval, (int)$vInterval); - } - - /** - * Set grid space - * - * @param int $left Left space in pixels - * @param int $right Right space in pixels - * @param int $top Top space in pixels - * @param int $bottom Bottom space in pixels - */ - public function setSpace($left, $right, $top, $bottom) { - $this->space = array((int)$left, (int)$right, (int)$top, (int)$bottom); - } - - /** - * Change the current grid - * - * @param array $xgrid Vertical lines - * @param array $ygrid Horizontal lines - */ - public function setGrid($xgrid, $ygrid) { - - if(empty($this->xgrid)) { - $this->xgrid = $xgrid; - } - if(empty($this->ygrid)) { - $this->ygrid = $ygrid; - } - - } - - /** - * Draw grids - * - * @param awDriver $driver A driver object - * @param int $x1 - * @param int $y1 - * @param int $x2 - * @param int $y2 - */ - public function draw(awDriver $driver, $x1, $y1, $x2, $y2) { - - if($this->background instanceof awColor) { - - // Draw background color - $driver->filledRectangle( - $this->background, - awLine::build($x1, $y1, $x2, $y2) - ); - - } - - if($this->hide === FALSE) { - - $this->drawGrid( - $driver, - $this->color, - $this->hideVertical ? array() : $this->xgrid, - $this->hideHorizontal ? array() : $this->ygrid, - $x1, $y1, $x2, $y2, - $this->type, - $this->space, - $this->interval[0], - $this->interval[1] - ); - - } - - } - - private function drawGrid( - awDriver $driver, awColor $color, - $nx, $ny, $x1, $y1, $x2, $y2, - $type, $space, $hInterval, $vInterval - ) { - - list($left, $right, $top, $bottom) = $space; - - $width = $x2 - $x1 - $left - $right; - $height = $y2 - $y1 - $top - $bottom; - - foreach($nx as $key => $n) { - - if(($key % $vInterval) === 0) { - - $pos = (int)round($x1 + $left + $n * $width); - $driver->line( - $color, - new awLine( - new awPoint($pos, $y1), - new awPoint($pos, $y2), - $type - ) - ); - - } - - } - - foreach($ny as $key => $n) { - - if(($key % $hInterval) === 0) { - - $pos = (int)round($y1 + $top + $n * $height); - $driver->line( - $color, - new awLine( - new awPoint($x1, $pos), - new awPoint($x2, $pos), - $type - ) - ); - - } - - } - - } - -} - -registerClass('Grid'); diff --git a/modules/graphartichow/artichow/inc/Label.class.php b/modules/graphartichow/artichow/inc/Label.class.php deleted file mode 100644 index 43bbae5af..000000000 --- a/modules/graphartichow/artichow/inc/Label.class.php +++ /dev/null @@ -1,587 +0,0 @@ -set($label); - } else if(is_string($label)) { - $this->set(array($label)); - } - - if($font === NULL) { - $font = new awFont2; - } - - $this->setFont($font); - $this->setAngle($angle); - - if($color instanceof awColor) { - $this->setColor($color); - } else { - $this->setColor(new awColor(0, 0, 0)); - } - - $this->move = new awPoint(0, 0); - - $this->border = new awBorder; - $this->border->hide(); - - } - - /** - * Get an element of the label from its key - * - * @param int $key Element key - * @return string A value - */ - public function get($key) { - return array_key_exists($key, $this->texts) ? $this->texts[$key] : NULL; - } - - /** - * Get all labels - * - * @return array - */ - public function all() { - return $this->texts; - } - - /** - * Set one or several labels - * - * @param array $labels Array of string or a string - */ - public function set($labels) { - - if(is_array($labels)) { - $this->texts = $labels; - } else { - $this->texts = array((string)$labels); - } - - } - - /** - * Count number of texts in the label - * - * @return int - */ - public function count() { - return is_array($this->texts) ? count($this->texts) : 0; - } - - /** - * Set a callback function for labels - * - * @param string $function - */ - public function setCallbackFunction($function) { - $this->function = is_null($function) ? $function : (string)$function; - } - - /** - * Return the callback function for labels - * - * @return string - */ - public function getCallbackFunction() { - return $this->function; - } - - /** - * Change labels format - * - * @param string $format New format (printf style: %.2f for example) - */ - public function setFormat($format) { - $function = 'label'.time().'_'.(microtime() * 1000000); - eval('function '.$function.'($value) { - return sprintf("'.addcslashes($format, '"').'", $value); - }'); - $this->setCallbackFunction($function); - } - - /** - * Change font for label - * - * @param awFont $font New font - * @param awColor $color Font color (can be NULL) - */ - public function setFont(awFont $font, $color = NULL) { - $this->font = $font; - if($color instanceof awColor) { - $this->setColor($color); - } - } - - /** - * Change font angle - * - * @param int $angle New angle - */ - public function setAngle($angle) { - $this->angle = (int)$angle; - } - - /** - * Change font color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Change text background - * - * @param mixed $background - */ - public function setBackground($background) { - $this->background = $background; - } - - /** - * Change text background color - * - * @param Color - */ - public function setBackgroundColor(awColor $color) { - $this->background = $color; - } - - /** - * Change text background gradient - * - * @param Gradient - */ - public function setBackgroundGradient(awGradient $gradient) { - $this->background = $gradient; - } - - /** - * Change padding - * - * @param int $left Left padding - * @param int $right Right padding - * @param int $top Top padding - * @param int $bottom Bottom padding - */ - public function setPadding($left, $right, $top, $bottom) { - $this->padding = array((int)$left, (int)$right, (int)$top, (int)$bottom); - } - - /** - * Hide all labels ? - * - * @param bool $hide - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show all labels ? - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = (bool)!$show; - } - - /** - * Hide a key - * - * @param int $key The key to hide - */ - public function hideKey($key) { - $this->hideKey[$key] = TRUE; - } - - /** - * Hide a value - * - * @param int $value The value to hide - */ - public function hideValue($value) { - $this->hideValue[] = $value; - } - - /** - * Hide first label - * - * @param bool $hide - */ - public function hideFirst($hide) { - $this->hideFirst = (bool)$hide; - } - - /** - * Hide last label - * - * @param bool $hide - */ - public function hideLast($hide) { - $this->hideLast = (bool)$hide; - } - - /** - * Set label interval - * - * @param int - */ - public function setInterval($interval) { - - $this->interval = (int)$interval; - - } - - /** - * Change label position - * - * @param int $x Add this interval to X coord - * @param int $y Add this interval to Y coord - */ - public function move($x, $y) { - - $this->move = $this->move->move($x, $y); - - } - - /** - * Change alignment - * - * @param int $h Horizontal alignment - * @param int $v Vertical alignment - */ - public function setAlign($h = NULL, $v = NULL) { - if($h !== NULL) { - $this->hAlign = (int)$h; - } - if($v !== NULL) { - $this->vAlign = (int)$v; - } - } - - /** - * Get a text from the labele - * - * @param mixed $key Key in the array text - * @return Text - */ - public function getText($key) { - - if(is_array($this->texts) and array_key_exists($key, $this->texts)) { - - $value = $this->texts[$key]; - - if(is_string($this->function)) { - $value = call_user_func($this->function, $value); - } - - $text = new awText($value); - $text->setFont($this->font); - $text->setAngle($this->angle); - $text->setColor($this->color); - - if($this->background instanceof awColor) { - $text->setBackgroundColor($this->background); - } else if($this->background instanceof awGradient) { - $text->setBackgroundGradient($this->background); - } - - $text->border = $this->border; - - if($this->padding !== NULL) { - call_user_func_array(array($text, 'setPadding'), $this->padding); - } - - return $text; - - } else { - return NULL; - } - - } - - /** - * Get max width of all texts - * - * @param awDriver $driver A driver - * @return int - */ - public function getMaxWidth(awDriver $driver) { - - return $this->getMax($driver, 'getTextWidth'); - - } - - /** - * Get max height of all texts - * - * @param awDriver $driver A driver - * @return int - */ - public function getMaxHeight(awDriver $driver) { - - return $this->getMax($driver, 'getTextHeight'); - - } - - /** - * Draw the label - * - * @param awDriver $driver - * @param awPoint $p Label center - * @param int $key Text position in the array of texts (default to zero) - */ - public function draw(awDriver $driver, awPoint $p, $key = 0) { - - if(($key % $this->interval) !== 0) { - return; - } - - // Hide all labels - if($this->hide) { - return; - } - - // Key is hidden - if(array_key_exists($key, $this->hideKey)) { - return; - } - - // Hide first label - if($key === 0 and $this->hideFirst) { - return; - } - - // Hide last label - if($key === count($this->texts) - 1 and $this->hideLast) { - return; - } - - $text = $this->getText($key); - - if($text !== NULL) { - - // Value must be hidden - if(in_array($text->getText(), $this->hideValue)) { - return; - } - - $x = $p->x; - $y = $p->y; - - // Get padding - list($left, $right, $top, $bottom) = $text->getPadding(); - -// $font = $text->getFont(); - $width = $driver->getTextWidth($text); - $height = $driver->getTextHeight($text); - - switch($this->hAlign) { - - case awLabel::RIGHT : - $x -= ($width + $right); - break; - - case awLabel::CENTER : - $x -= ($width - $left + $right) / 2; - break; - - case awLabel::LEFT : - $x += $left; - break; - - } - - switch($this->vAlign) { - - case awLabel::TOP : - $y -= ($height + $bottom); - break; - - case awLabel::MIDDLE : - $y -= ($height - $top + $bottom) / 2; - break; - - case awLabel::BOTTOM : - $y += $top; - break; - - } - - $driver->string($text, $this->move->move($x, $y)); - - } - - } - - protected function getMax(awDriver $driver, $function) { - - $max = NULL; - - foreach($this->texts as $key => $text) { - - $text = $this->getText($key); - $font = $text->getFont(); - - if(is_null($max)) { - $max = $font->{$function}($text); - } else { - $max = max($max, $font->{$function}($text)); - } - - } - - return $max; - - } - -} - -registerClass('Label'); diff --git a/modules/graphartichow/artichow/inc/Legend.class.php b/modules/graphartichow/artichow/inc/Legend.class.php deleted file mode 100644 index bbfd64a03..000000000 --- a/modules/graphartichow/artichow/inc/Legend.class.php +++ /dev/null @@ -1,709 +0,0 @@ -shadow = new awShadow(awShadow::LEFT_BOTTOM); - $this->border = new awBorder; - - $this->textMargin = new awSide(4); - $this->setModel($model); - - } - - /** - * Set a predefined model for the legend - * - * @param int $model - */ - public function setModel($model) { - - $this->setBackgroundColor(new awColor(255, 255, 255, 15)); - $this->setPadding(8, 8, 8, 8); - $this->setTextFont(new awFont2); - $this->shadow->setSize(3); - - switch($model) { - - case awLegend::MODEL_RIGHT : - - $this->setColumns(1); - $this->setAlign(awLegend::RIGHT, awLegend::MIDDLE); - $this->setPosition(0.96, 0.50); - - break; - - case awLegend::MODEL_BOTTOM : - - $this->setRows(1); - $this->setAlign(awLegend::CENTER, awLegend::TOP); - $this->setPosition(0.50, 0.92); - - break; - - default : - - $this->setPosition(0.5, 0.5); - - break; - - } - - } - - /** - * Hide legend ? - * - * @param bool $hide TRUE to hide legend, FALSE otherwise - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show legend ? - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = (bool)!$show; - } - - - /** - * Add a Legendable object to the legend - * - * @param awLegendable $legendable - * @param string $title Legend title - * @param int $type Legend type (default to awLegend::LINE) - */ - public function add(awLegendable $legendable, $title, $type = awLegend::LINE) { - - $legend = array($legendable, $title, $type); - - $this->legends[] = $legend; - - } - - /** - * Change legend padding - * - * @param int $left - * @param int $right - * @param int $top - * @param int $bottom - */ - public function setPadding($left, $right, $top, $bottom) { - $this->padding = array((int)$left, (int)$right, (int)$top, (int)$bottom); - } - - /** - * Change space between each legend - * - * @param int $space - */ - public function setSpace($space) { - $this->space = (int)$space; - } - - /** - * Change alignment - * - * @param int $h Horizontal alignment - * @param int $v Vertical alignment - */ - public function setAlign($h = NULL, $v = NULL) { - if($h !== NULL) { - $this->hAlign = (int)$h; - } - if($v !== NULL) { - $this->vAlign = (int)$v; - } - } - - /** - * Change number of columns - * - * @param int $columns - */ - public function setColumns($columns) { - $this->rows = NULL; - $this->columns = (int)$columns; - } - - /** - * Change number of rows - * - * @param int $rows - */ - public function setRows($rows) { - $this->columns = NULL; - $this->rows = (int)$rows; - } - - /** - * Change legend position - * X and Y positions must be between 0 and 1. - * - * @param float $x - * @param float $y - */ - public function setPosition($x = NULL, $y = NULL) { - $x = (is_null($x) and !is_null($this->position)) ? $this->position->x : $x; - $y = (is_null($y) and !is_null($this->position)) ? $this->position->y : $y; - - $this->position = new awPoint($x, $y); - } - - /** - * Get legend position - * - * @return Point - */ - public function getPosition() { - return $this->position; - } - - /** - * Change text font - * - * @param awFont $font - */ - public function setTextFont(awFont $font) { - $this->textFont = $font; - } - - /** - * Change text margin - * - * @param int $left - * @param int $right - */ - public function setTextMargin($left, $right) { - $this->textMargin->set($left, $right); - } - - /** - * Change text color - * - * @param awColor $color - */ - public function setTextColor(awColor $color) { - $this->textColor = $color; - } - - /** - * Change background - * - * @param mixed $background - */ - public function setBackground($background) { - $this->background = $background; - } - - /** - * Change background color - * - * @param awColor $color - */ - public function setBackgroundColor(awColor $color) { - $this->background = $color; - } - - /** - * Change background gradient - * - * @param awGradient $gradient - */ - public function setBackgroundGradient(awGradient $gradient) { - $this->background = $gradient; - } - - /** - * Count the number of Legendable objects in the legend - * - * @return int - */ - public function count() { - return count($this->legends); - } - - public function draw(awDriver $driver) { - - if($this->hide) { - return; - } - - $count = $this->count(); - - // No legend to print - if($count === 0) { - return; - } - - // Get text widths and heights of each element of the legend - $widths = array(); - $heights = array(); - $texts = array(); - for($i = 0; $i < $count; $i++) { - list(, $title, ) = $this->legends[$i]; - $text = new awText( - $title, - $this->textFont, - $this->textColor, - 0 - ); -// $font = $text->getFont(); - $widths[$i] = $driver->getTextWidth($text) + $this->textMargin->left + $this->textMargin->right; - $heights[$i] = $driver->getTextHeight($text); - $texts[$i] = $text; - } - - // Maximum height of the font used - $heightMax = array_max($heights); - - // Get number of columns - if($this->columns !== NULL) { - $columns = $this->columns; - } else if($this->rows !== NULL) { - $columns = ceil($count / $this->rows); - } else { - $columns = $count; - } - - // Number of rows - $rows = (int)ceil($count / $columns); - - // Get maximum with of each column - $widthMax = array(); - for($i = 0; $i < $count; $i++) { - // Get column width - $column = $i % $columns; - if(array_key_exists($column, $widthMax) === FALSE) { - $widthMax[$column] = $widths[$i]; - } else { - $widthMax[$column] = max($widthMax[$column], $widths[$i]); - } - } - - $width = $this->padding[0] + $this->padding[1] - $this->space; - for($i = 0; $i < $columns; $i++) { - $width += $this->space + 5 + 10 + $widthMax[$i]; - } - - $height = ($heightMax + $this->space) * $rows - $this->space + $this->padding[2] + $this->padding[3]; - - // Look for legends position - list($x, $y) = $driver->getSize(); - - $p = new awPoint( - $this->position->x * $x, - $this->position->y * $y - ); - - switch($this->hAlign) { - - case awLegend::CENTER : - $p->x -= $width / 2; - break; - - case awLegend::RIGHT : - $p->x -= $width; - break; - - } - - switch($this->vAlign) { - - case awLegend::MIDDLE : - $p->y -= $height / 2; - break; - - case awLegend::BOTTOM : - $p->y -= $height; - break; - - } - - // Draw legend shadow - $this->shadow->draw( - $driver, - $p, - $p->move($width, $height), - awShadow::OUT - ); - - // Draw legends base - $this->drawBase($driver, $p, $width, $height); - - // Draw each legend - for($i = 0; $i < $count; $i++) { - - list($component, $title, $type) = $this->legends[$i]; - - $column = $i % $columns; - $row = (int)floor($i / $columns); - - // Get width of all previous columns - $previousColumns = 0; - for($j = 0; $j < $column; $j++) { - $previousColumns += $this->space + 10 + 5 + $widthMax[$j]; - } - - // Draw legend text - $driver->string( - $texts[$i], - $p->move( - $this->padding[0] + $previousColumns + 10 + 5 + $this->textMargin->left, - $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - $heights[$i] / 2 - ) - ); - - // Draw legend icon - switch($type) { - - case awLegend::LINE : - case awLegend::MARK : - case awLegend::MARKONLY : - - // Get vertical position - $x = $this->padding[0] + $previousColumns; - $y = $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - $component->getLegendLineThickness(); - - // Draw two lines - if($component->getLegendLineColor() !== NULL) { - - $color = $component->getLegendLineColor(); - - if($color instanceof awColor and $type !== awLegend::MARKONLY) { - - $driver->line( - $color, - new awLine( - $p->move( - $x, // YaPB ?? - $y + $component->getLegendLineThickness() / 2 - ), - $p->move( - $x + 10, - $y + $component->getLegendLineThickness() / 2 - ), - $component->getLegendLineStyle(), - $component->getLegendLineThickness() - ) - ); - - unset($color); - - } - - } - - if($type === awLegend::MARK or $type === awLegend::MARKONLY) { - - $mark = $component->getLegendMark(); - - if($mark !== NULL) { - $mark->draw( - $driver, - $p->move( - $x + 5.5, - $y + $component->getLegendLineThickness() / 2 - ) - ); - } - - unset($mark); - - } - - break; - - case awLegend::BACKGROUND : - - // Get vertical position - $x = $this->padding[0] + $previousColumns; - $y = $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - 5; - - $from = $p->move( - $x, - $y - ); - - $to = $p->move( - $x + 10, - $y + 10 - ); - - $background = $component->getLegendBackground(); - - if($background !== NULL) { - - $driver->filledRectangle( - $component->getLegendBackground(), - new awLine($from, $to) - ); - - // Draw rectangle border - $this->border->rectangle( - $driver, - $from->move(0, 0), - $to->move(0, 0) - ); - - } - - unset($background, $from, $to); - - break; - - } - - } - - } - - private function drawBase(awDriver $driver, awPoint $p, $width, $height) { - - $this->border->rectangle( - $driver, - $p, - $p->move($width, $height) - ); - - $size = $this->border->visible() ? 1 : 0; - - $driver->filledRectangle( - $this->background, - new awLine( - $p->move($size, $size), - $p->move($width - $size, $height - $size) - ) - ); - - } - -} - -registerClass('Legend'); - -/** - * You can add a legend to components which implements this interface - * - * @package Artichow - */ -interface awLegendable { - - /** - * Get the line type - * - * @return int - */ - public function getLegendLineStyle(); - - /** - * Get the line thickness - * - * @return int - */ - public function getLegendLineThickness(); - - /** - * Get the color of line - * - * @return Color - */ - public function getLegendLineColor(); - - /** - * Get the background color or gradient of an element of the component - * - * @return Color, Gradient - */ - public function getLegendBackground(); - - /** - * Get a Mark object - * - * @return Mark - */ - public function getLegendMark(); - -} - -registerInterface('Legendable'); diff --git a/modules/graphartichow/artichow/inc/Mark.class.php b/modules/graphartichow/artichow/inc/Mark.class.php deleted file mode 100644 index d89437f24..000000000 --- a/modules/graphartichow/artichow/inc/Mark.class.php +++ /dev/null @@ -1,489 +0,0 @@ -fill = new awColor(255, 0, 0, 0); - $this->border = new awBorder; - $this->border->hide(); - - $this->move = new awPoint(0, 0); - - } - - /** - * Change mark position - * - * @param int $x Add this interval to X coord - * @param int $y Add this interval to Y coord - */ - public function move($x, $y) { - - $this->move = $this->move->move($x, $y); - - } - - /** - * Hide marks ? - * - * @param bool $hide TRUE to hide marks, FALSE otherwise - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show marks ? - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = (bool)!$show; - } - - /** - * Change mark type - * - * @param int $size Size in pixels - */ - public function setSize($size) { - $this->size = (int)$size; - } - - /** - * Change mark type - * - * @param int $type New mark type - * @param int $size Mark size (can be NULL) - */ - public function setType($type, $size = NULL) { - $this->type = (int)$type; - if($size !== NULL) { - $this->setSize($size); - } - } - - /** - * Fill the mark with a color or a gradient - * - * @param mixed $fill A color or a gradient - */ - public function setFill($fill) { - if($fill instanceof awColor or $fill instanceof awGradient) { - $this->fill = $fill; - } - } - - /** - * Set an image - * Only for awMark::IMAGE type. - * - * @param Image An image - */ - public function setImage(awImage $image) { - $this->image = $image; - } - - /** - * Draw the mark - * - * @param awDriver $driver - * @param awPoint $point Mark center - */ - public function draw(awDriver $driver, awPoint $point) { - - // Hide marks ? - if($this->hide) { - return; - } - - // Check if we can print marks - if($this->type !== NULL) { - - $this->driver = $driver; - $realPoint = $this->move->move($point->x, $point->y); - - switch($this->type) { - - case awMark::CIRCLE : - $this->drawCircle($realPoint); - break; - - case awMark::SQUARE : - $this->drawSquare($realPoint); - break; - - case awMark::TRIANGLE : - $this->drawTriangle($realPoint); - break; - - case awMark::INVERTED_TRIANGLE : - $this->drawTriangle($realPoint, TRUE); - break; - - case awMark::RHOMBUS : - $this->drawRhombus($realPoint); - break; - - case awMark::CROSS : - $this->drawCross($realPoint); - break; - - case awMark::PLUS : - $this->drawCross($realPoint, TRUE); - break; - - case awMark::IMAGE : - $this->drawImage($realPoint); - break; - - case awMark::STAR : - $this->changeType('star'); - $this->draw($driver, $point); - break; - - case awMark::PAPERCLIP : - $this->changeType('paperclip'); - $this->draw($driver, $point); - break; - - case awMark::BOOK : - $this->changeType('book'); - $this->draw($driver, $point); - break; - - } - - } - - } - - protected function changeType($image) { - $this->setType(awMARK::IMAGE); - $this->setImage(new awFileImage(ARTICHOW_IMAGE.DIRECTORY_SEPARATOR.$image.'.png')); - } - - protected function drawCircle(awPoint $point) { - - $this->driver->filledEllipse( - $this->fill, - $point, - $this->size, $this->size - ); - - $this->border->ellipse( - $this->driver, - $point, - $this->size, $this->size - ); - - } - - protected function drawSquare(awPoint $point) { - - list($x, $y) = $point->getLocation(); - - $x1 = (int)($x - $this->size / 2); - $x2 = $x1 + $this->size; - $y1 = (int)($y - $this->size / 2); - $y2 = $y1 + $this->size; - - $this->border->rectangle($this->driver, new awPoint($x1, $y1), new awPoint($x2, $y2)); - - $size = $this->border->visible() ? 1 : 0; - - $this->driver->filledRectangle( - $this->fill, - new awLine( - new awPoint($x1 + $size, $y1 + $size), - new awPoint($x2 - $size, $y2 - $size) - ) - ); - - } - - protected function drawTriangle(awPoint $point, $inverted = FALSE) { - - list($x, $y) = $point->getLocation(); - - $size = $this->size; - - $triangle = new awPolygon; - // Set default style and thickness - $triangle->setStyle(awPolygon::SOLID); - $triangle->setThickness(1); - - if($inverted === TRUE) { - // Bottom of the triangle - $triangle->append(new awPoint($x, $y + $size / sqrt(3))); - - // Upper left corner - $triangle->append(new awPoint($x - $size / 2, $y - $size / (2 * sqrt(3)))); - - // Upper right corner - $triangle->append(new awPoint($x + $size / 2, $y - $size / (2 * sqrt(3)))); - } else { - // Top of the triangle - $triangle->append(new awPoint($x, $y - $size / sqrt(3))); - - // Lower left corner - $triangle->append(new awPoint($x - $size / 2, $y + $size / (2 * sqrt(3)))); - - // Lower right corner - $triangle->append(new awPoint($x + $size / 2, $y + $size / (2 * sqrt(3)))); - } - - $this->driver->filledPolygon($this->fill, $triangle); - - if($this->border->visible()) { - $this->border->polygon($this->driver, $triangle); - } - } - - protected function drawRhombus(awPoint $point) { - - list($x, $y) = $point->getLocation(); - - $rhombus = new awPolygon; - // Set default style and thickness - $rhombus->setStyle(awPolygon::SOLID); - $rhombus->setThickness(1); - - // Top of the rhombus - $rhombus->append(new awPoint($x, $y - $this->size / 2)); - - // Right of the rhombus - $rhombus->append(new awPoint($x + $this->size / 2, $y)); - - // Bottom of the rhombus - $rhombus->append(new awPoint($x, $y + $this->size / 2)); - - // Left of the rhombus - $rhombus->append(new awPoint($x - $this->size / 2, $y)); - - $this->driver->filledPolygon($this->fill, $rhombus); - - if($this->border->visible()) { - $this->border->polygon($this->driver, $rhombus); - } - } - - protected function drawCross(awPoint $point, $upright = FALSE) { - - list($x, $y) = $point->getLocation(); - - if($upright === TRUE) { - $x11 = (int)($x); - $y11 = (int)($y - $this->size / 2); - $x12 = (int)($x); - $y12 = (int)($y + $this->size / 2); - - $y21 = (int)($y); - $y22 = (int)($y); - } else { - $x11 = (int)($x - $this->size / 2); - $y11 = (int)($y + $this->size / 2); - $x12 = (int)($x + $this->size / 2); - $y12 = (int)($y - $this->size / 2); - - $y21 = (int)($y - $this->size / 2); - $y22 = (int)($y + $this->size / 2); - } - - $x21 = (int)($x - $this->size / 2); - $x22 = (int)($x + $this->size / 2); - - $this->driver->line( - $this->fill, - new awLine( - new awPoint($x11, $y11), - new awPoint($x12, $y12) - ) - ); - - $this->driver->line( - $this->fill, - new awLine( - new awPoint($x21, $y21), - new awPoint($x22, $y22) - ) - ); - } - - protected function drawImage(awPoint $point) { - - if($this->image instanceof awImage) { - - $width = $this->image->width; - $height = $this->image->height; - - list($x, $y) = $point->getLocation(); - - $x1 = (int)($x - $width / 2); - $x2 = $x1 + $width; - $y1 = (int)($y - $width / 2); - $y2 = $y1 + $height; - - $this->border->rectangle($this->driver, new awPoint($x1 - 1, $y1 - 1), new awPoint($x2 + 1, $y2 + 1)); - - $this->driver->copyImage($this->image, new awPoint($x1, $y1), new awPoint($x2, $y2)); - - } - - } - -} - -registerClass('Mark'); diff --git a/modules/graphartichow/artichow/inc/Math.class.php b/modules/graphartichow/artichow/inc/Math.class.php deleted file mode 100644 index 0f1334b00..000000000 --- a/modules/graphartichow/artichow/inc/Math.class.php +++ /dev/null @@ -1,831 +0,0 @@ -style = (int)$style; - } - - /** - * Return shape style - * - * @return int - */ - public function getStyle() { - return $this->style; - } - - /** - * Change shape thickness - * - * @param int $thickness Shape thickness in pixels - */ - public function setThickness($thickness) { - $this->thickness = (int)$thickness; - } - - /** - * Return shape thickness - * - * @return int - */ - public function getThickness() { - return $this->thickness; - } - - /** - * Hide the shape - * - * @param bool $hide - */ - public function hide($hide) { - $this->hide = (bool)$hide; - } - - /** - * Show the shape - * - * @param bool $shape - */ - public function show($shape) { - $this->hide = (bool)!$shape; - } - - /** - * Is the line hidden ? - * - * @return bool - */ - public function isHidden() { - return $this->hide; - } - -} - -registerClass('Shape', TRUE); - -/** - * Describe a point - * - * @package Artichow - */ -class awPoint extends awShape { - - /** - * X coord - * - * @var float - */ - public $x; - - /** - * Y coord - * - * @var float - */ - public $y; - - /** - * Build a new awpoint - * - * @param float $x - * @param float $y - */ - public function __construct($x, $y) { - - $this->setLocation($x, $y); - - } - - /** - * Change X value - * - * @param float $x - */ - public function setX($x) { - $this->x = (float)$x; - } - - /** - * Change Y value - * - * @param float $y - */ - public function setY($y) { - $this->y = (float)$y; - } - - /** - * Change point location - * - * @param float $x - * @param float $y - */ - public function setLocation($x, $y) { - $this->setX($x); - $this->setY($y); - } - - /** - * Get point location - * - * @param array Point location - */ - public function getLocation() { - return array($this->x, $this->y); - } - - /** - * Get distance to another point - * - * @param awPoint $p A point - * @return float - */ - public function getDistance(awPoint $p) { - - return sqrt(pow($p->x - $this->x, 2) + pow($p->y - $this->y, 2)); - - } - - /** - * Move the point to another location - * - * @param Point A Point with the new awlocation - */ - public function move($x, $y) { - - return new awPoint( - $this->x + $x, - $this->y + $y - ); - - } - -} - -registerClass('Point'); - - -/** - * Describe a line - * - * @package Artichow - */ -class awLine extends awShape { - - /** - * Line first point - * - * @param Point - */ - public $p1; - - /** - * Line second point - * - * @param Point - */ - public $p2; - - /** - * The line slope (the m in y = mx + p) - * - * @param float - */ - private $slope; - - /** - * The y-intercept value of the line (the p in y = mx + p) - * - * @param float - */ - private $origin; - - /** - * Build a new awline - * - * @param awPoint $p1 First point - * @param awPoint $p2 Second point - * @param int $type Style of line (default to solid) - * @param int $thickness Line thickness (default to 1) - */ - public function __construct($p1 = NULL, $p2 = NULL, $type = awLine::SOLID, $thickness = 1) { - - $this->setLocation($p1, $p2); - $this->setStyle($type); - $this->setThickness($thickness); - - } - - /** - * Build a line from 4 coords - * - * @param int $x1 Left position - * @param int $y1 Top position - * @param int $x2 Right position - * @param int $y2 Bottom position - */ - public static function build($x1, $y1, $x2, $y2) { - - return new awLine( - new awPoint($x1, $y1), - new awPoint($x2, $y2) - ); - - } - - /** - * Change X values of the line - * - * @param int $x1 Begin value - * @param int $x2 End value - */ - public function setX($x1, $x2) { - $this->p1->setX($x1); - $this->p2->setX($x2); - - // Resets slope and origin values so they are - // recalculated when and if needed. - $this->slope = NULL; - $this->origin = NULL; - } - - /** - * Change Y values of the line - * - * @param int $y1 Begin value - * @param int $y2 End value - */ - public function setY($y1, $y2) { - $this->p1->setY($y1); - $this->p2->setY($y2); - - // Resets slope and origin values so they are - // recalculated when and if needed. - $this->slope = NULL; - $this->origin = NULL; - } - - /** - * Change line location - * - * @param awPoint $p1 First point - * @param awPoint $p2 Second point - */ - public function setLocation($p1, $p2) { - if(is_null($p1) or $p1 instanceof awPoint) { - $this->p1 = $p1; - } - if(is_null($p2) or $p2 instanceof awPoint) { - $this->p2 = $p2; - } - - // Resets slope and origin values so they are - // recalculated when and if needed. - $this->slope = NULL; - $this->origin = NULL; - } - - /** - * Get line location - * - * @param array Line location - */ - public function getLocation() { - return array($this->p1, $this->p2); - } - - /** - * Get the line size - * - * @return float - */ - public function getSize() { - - $square = pow($this->p2->x - $this->p1->x, 2) + pow($this->p2->y - $this->p1->y, 2); - return sqrt($square); - - } - - /** - * Calculate the line slope - * - */ - private function calculateSlope() { - if($this->isHorizontal()) { - $this->slope = 0; - } else { - $slope = ($this->p1->y - $this->p2->y) / ($this->p1->x - $this->p2->x); - - $this->slope = $slope; - } - } - - /** - * Calculate the y-intercept value of the line - * - */ - private function calculateOrigin() { - if($this->isHorizontal()) { - $this->origin = $this->p1->y; // Or p2->y - } else { - $y1 = $this->p1->y; - $y2 = $this->p2->y; - $x1 = $this->p1->x; - $x2 = $this->p2->x; - - $origin = ($y2 * $x1 - $y1 * $x2) / ($x1 - $x2); - - $this->origin = $origin; - } - } - - /** - * Calculate the slope and y-intercept value of the line - * - */ - private function calculateEquation() { - $this->calculateSlope(); - $this->calculateOrigin(); - } - - /** - * Get the line slope value - * - * @return float - */ - public function getSlope() { - if($this->isVertical()) { - return NULL; - } elseif($this->slope !== NULL) { - return $this->slope; - } else { - $this->calculateSlope(); - return $this->slope; - } - } - - /** - * Get the line y-intercept value - * - * @return float - */ - public function getOrigin() { - if($this->isVertical()) { - return NULL; - } elseif($this->origin !== NULL) { - return $this->origin; - } else { - $this->calculateOrigin(); - return $this->origin; - } - } - - /** - * Get the line equation - * - * @return array An array containing the slope and y-intercept value of the line - */ - public function getEquation() { - $slope = $this->getSlope(); - $origin = $this->getOrigin(); - - return array($slope, $origin); - } - - /** - * Return the x coordinate of a point on the line - * given its y coordinate. - * - * @param float $y The y coordinate of the Point - * @return float $x The corresponding x coordinate - */ - public function getXFrom($y) { - $x = NULL; - - if($this->isVertical()) { - list($p, ) = $this->getLocation(); - $x = $p->x; - } else { - list($slope, $origin) = $this->getEquation(); - - if($slope !== 0) { - $y = (float)$y; - $x = ($y - $origin) / $slope; - } - } - - return $x; - } - - /** - * Return the y coordinate of a point on the line - * given its x coordinate. - * - * @param float $x The x coordinate of the Point - * @return float $y The corresponding y coordinate - */ - public function getYFrom($x) { - $y = NULL; - - if($this->isHorizontal()) { - list($p, ) = $this->getLocation(); - $y = $p->y; - } else { - list($slope, $origin) = $this->getEquation(); - - if($slope !== NULL) { - $x = (float)$x; - $y = $slope * $x + $origin; - } - } - - return $y; - } - - /** - * Test if the line can be considered as a point - * - * @return bool - */ - public function isPoint() { - return ($this->p1->x === $this->p2->x and $this->p1->y === $this->p2->y); - } - - /** - * Test if the line is a vertical line - * - * @return bool - */ - public function isVertical() { - return ($this->p1->x === $this->p2->x); - } - - /** - * Test if the line is an horizontal line - * - * @return bool - */ - public function isHorizontal() { - return ($this->p1->y === $this->p2->y); - } - - /** - * Returns TRUE if the line is going all the way from the top - * to the bottom of the polygon surrounding box. - * - * @param $polygon Polygon A Polygon object - * @return bool - */ - public function isTopToBottom(awPolygon $polygon) { - list($xMin, $xMax) = $polygon->getBoxXRange(); - list($yMin, $yMax) = $polygon->getBoxYRange(); - - if($this->isHorizontal()) { - return FALSE; - } else { - if($this->p1->y < $this->p2->y) { - $top = $this->p1; - $bottom = $this->p2; - } else { - $top = $this->p2; - $bottom = $this->p1; - } - - return ( - $this->isOnBoxTopSide($top, $xMin, $xMax, $yMin) - and - $this->isOnBoxBottomSide($bottom, $xMin, $xMax, $yMax) - ); - } - } - - /** - * Returns TRUE if the line is going all the way from the left side - * to the right side of the polygon surrounding box. - * - * @param $polygon Polygon A Polygon object - * @return bool - */ - public function isLeftToRight(awPolygon $polygon) { - list($xMin, $xMax) = $polygon->getBoxXRange(); - list($yMin, $yMax) = $polygon->getBoxYRange(); - - if($this->isVertical()) { - return FALSE; - } else { - if($this->p1->x < $this->p2->x) { - $left = $this->p1; - $right = $this->p2; - } else { - $left = $this->p2; - $right = $this->p1; - } - } - - return ( - $this->isOnBoxLeftSide($left, $yMin, $yMax, $xMin) - and - $this->isOnBoxRightSide($right, $yMin, $yMax, $xMax) - ); - } - - private function isOnBoxTopSide(awPoint $point, $xMin, $xMax, $yMin) { - if( - $point->y === $yMin - and - $point->x >= $xMin - and - $point->x <= $xMax - ) { - return TRUE; - } else { - return FALSE; - } - } - - private function isOnBoxBottomSide(awPoint $point, $xMin, $xMax, $yMax) { - if( - $point->y === $yMax - and - $point->x >= $xMin - and - $point->x <= $xMax - ) { - return TRUE; - } else { - return FALSE; - } - } - - private function isOnBoxLeftSide(awPoint $point, $yMin, $yMax, $xMin) { - if( - $point->x === $xMin - and - $point->y >= $yMin - and - $point->y <= $yMax - ) { - return TRUE; - } else { - return FALSE; - } - } - - private function isOnBoxRightSide(awPoint $point, $yMin, $yMax, $xMax) { - if( - $point->x === $xMax - and - $point->y >= $yMin - and - $point->y <= $yMax - ) { - return TRUE; - } else { - return FALSE; - } - } - -} - -registerClass('Line'); - -/** - * A vector is a type of line - * The sense of the vector goes from $p1 to $p2. - * - * @package Artichow - */ -class awVector extends awLine { - - /** - * Get vector angle in radians - * - * @return float - */ - public function getAngle() { - - if($this->isPoint()) { - return 0.0; - } - - $size = $this->getSize(); - - $width = ($this->p2->x - $this->p1->x); - $height = ($this->p2->y - $this->p1->y) * -1; - - if($width >= 0 and $height >= 0) { - return acos($width / $size); - } else if($width <= 0 and $height >= 0) { - return acos($width / $size); - } else { - $height *= -1; - if($width >= 0 and $height >= 0) { - return 2 * M_PI - acos($width / $size); - } else if($width <= 0 and $height >= 0) { - return 2 * M_PI - acos($width / $size); - } - } - - } - -} - -registerClass('Vector'); - - -/** - * Describe a polygon - * - * @package Artichow - */ -class awPolygon extends awShape { - - /** - * Polygon points - * - * @var array - */ - protected $points = array(); - - /** - * Set a point in the polygon - * - * @param int $pos Point position - * @param awPoint $point - */ - public function set($pos, $point) { - if(is_null($point) or $point instanceof awPoint) { - $this->points[$pos] = $point; - } - } - - /** - * Add a point at the end of the polygon - * - * @param awPoint $point - */ - public function append($point) { - if(is_null($point) or $point instanceof awPoint) { - $this->points[] = $point; - } - } - - /** - * Get a point at a position in the polygon - * - * @param int $pos Point position - * @return Point - */ - public function get($pos) { - return $this->points[$pos]; - } - - /** - * Count number of points in the polygon - * - * @return int - */ - public function count() { - return count($this->points); - } - - /** - * Returns all points in the polygon - * - * @return array - */ - public function all() { - return $this->points; - } - - /** - * Returns the different lines formed by the polygon vertices - * - * @return array - */ - public function getLines() { - $lines = array(); - $count = $this->count(); - - for($i = 0; $i < $count - 1; $i++) { - $lines[] = new Line($this->get($i), $this->get($i + 1)); - } - - // "Close" the polygon - $lines[] = new Line($this->get($count - 1), $this->get(0)); - - return $lines; - } - - /** - * Get the upper-left and lower-right points - * of the bounding box around the polygon - * - * @return array An array of two Point objects - */ - public function getBoxPoints() { - $count = $this->count(); - $x = $y = array(); - - for($i = 0; $i < $count; $i++) { - $point = $this->get($i); - - list($x[], $y[]) = $point->getLocation(); - } - - $upperLeft = new Point(min($x), min($y)); - $lowerRight = new Point(max($x), max($y)); - - return array($upperLeft, $lowerRight); - } - - /** - * Return the range of the polygon on the y axis, - * i.e. the minimum and maximum y value of any point in the polygon - * - * @return array - */ - public function getBoxYRange() { - list($p1, $p2) = $this->getBoxPoints(); - - list(, $yMin) = $p1->getLocation(); - list(, $yMax) = $p2->getLocation(); - - return array($yMin, $yMax); - } - - /** - * Return the range of the polygon on the x axis, - * i.e. the minimum and maximum x value of any point in the polygon - * - * @return array - */ - public function getBoxXRange() { - list($p1, $p2) = $this->getBoxPoints(); - - list($xMin, ) = $p1->getLocation(); - list($xMax, ) = $p2->getLocation(); - - return array($xMin, $xMax); - } - -} - -registerClass('Polygon'); diff --git a/modules/graphartichow/artichow/inc/Shadow.class.php b/modules/graphartichow/artichow/inc/Shadow.class.php deleted file mode 100644 index 1d528db5c..000000000 --- a/modules/graphartichow/artichow/inc/Shadow.class.php +++ /dev/null @@ -1,405 +0,0 @@ -setPosition($position); - } - - /** - * Hide shadow ? - * - * @param bool $hide - */ - public function hide($hide = TRUE) { - $this->hide = (bool)$hide; - } - - /** - * Show shadow ? - * - * @param bool $show - */ - public function show($show = TRUE) { - $this->hide = (bool)!$show; - } - - /** - * Change shadow size - * - * @param int $size - * @param bool $smooth Smooth the shadow (facultative argument) - */ - public function setSize($size, $smooth = NULL) { - $this->size = (int)$size; - if($smooth !== NULL) { - $this->smooth($smooth); - } - } - - /** - * Change shadow color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Change shadow position - * - * @param int $position - */ - public function setPosition($position) { - $this->position = (int)$position; - } - - /** - * Smooth shadow ? - * - * @param bool $smooth - */ - public function smooth($smooth) { - $this->smooth = (bool)$smooth; - } - - /** - * Get the space taken by the shadow - * - * @return Side - */ - public function getSpace() { - - return new awSide( - ($this->position === awShadow::LEFT_TOP or $this->position === awShadow::LEFT_BOTTOM) ? $this->size : 0, - ($this->position === awShadow::RIGHT_TOP or $this->position === awShadow::RIGHT_BOTTOM) ? $this->size : 0, - ($this->position === awShadow::LEFT_TOP or $this->position === awShadow::RIGHT_TOP) ? $this->size : 0, - ($this->position === awShadow::LEFT_BOTTOM or $this->position === awShadow::RIGHT_BOTTOM) ? $this->size : 0 - ); - - } - - /** - * Draw shadow - * - * @param awDriver $driver - * @param awPoint $p1 Top-left point - * @param awPoint $p2 Right-bottom point - * @param int Drawing mode - */ - public function draw(awDriver $driver, awPoint $p1, awPoint $p2, $mode) { - - if($this->hide) { - return; - } - - if($this->size <= 0) { - return; - } - - $driver = clone $driver; - - $color = ($this->color instanceof awColor) ? $this->color : new awColor(125, 125, 125); - - switch($this->position) { - - case awShadow::RIGHT_BOTTOM : - - if($mode === awShadow::OUT) { - $t1 = $p1->move(0, 0); - $t2 = $p2->move($this->size + 1, $this->size + 1); - } else { // PHP 4 compatibility - $t1 = $p1->move(0, 0); - $t2 = $p2->move(0, 0); - } - - $width = $t2->x - $t1->x; - $height = $t2->y - $t1->y; - - $driver->setAbsPosition($t1->x + $driver->x, $t1->y + $driver->y); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($width - $this->size, $this->size), - new awPoint($width - 1, $height - 1) - ) - ); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($this->size, $height - $this->size), - new awPoint($width - $this->size - 1, $height - 1) - ) - ); - - $this->smoothPast($driver, $color, $width, $height); - - break; - - case awShadow::LEFT_TOP : - - if($mode === awShadow::OUT) { - $t1 = $p1->move(- $this->size, - $this->size); - $t2 = $p2->move(0, 0); - } else { // PHP 4 compatibility - $t1 = $p1->move(0, 0); - $t2 = $p2->move(0, 0); - } - - $width = $t2->x - $t1->x; - $height = $t2->y - $t1->y; - - $driver->setAbsPosition($t1->x + $driver->x, $t1->y + $driver->y); - - $height = max($height + 1, $this->size); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint(0, 0), - new awPoint($this->size - 1, $height - $this->size - 1) - ) - ); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($this->size, 0), - new awPoint($width - $this->size - 1, $this->size - 1) - ) - ); - - $this->smoothPast($driver, $color, $width, $height); - - break; - - case awShadow::RIGHT_TOP : - - if($mode === awShadow::OUT) { - $t1 = $p1->move(0, - $this->size); - $t2 = $p2->move($this->size + 1, 0); - } else { // PHP 4 compatibility - $t1 = $p1->move(0, 0); - $t2 = $p2->move(0, 0); - } - - $width = $t2->x - $t1->x; - $height = $t2->y - $t1->y; - - $driver->setAbsPosition($t1->x + $driver->x, $t1->y + $driver->y); - - $height = max($height + 1, $this->size); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($width - $this->size, 0), - new awPoint($width - 1, $height - $this->size - 1) - ) - ); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($this->size, 0), - new awPoint($width - $this->size - 1, $this->size - 1) - ) - ); - - $this->smoothFuture($driver, $color, $width, $height); - - break; - - case awShadow::LEFT_BOTTOM : - - if($mode === awShadow::OUT) { - $t1 = $p1->move(- $this->size, 0); - $t2 = $p2->move(0, $this->size + 1); - } else { // PHP 4 compatibility - $t1 = $p1->move(0, 0); - $t2 = $p2->move(0, 0); - } - - $width = $t2->x - $t1->x; - $height = $t2->y - $t1->y; - - $driver->setAbsPosition($t1->x + $driver->x, $t1->y + $driver->y); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint(0, $this->size), - new awPoint($this->size - 1, $height - 1) - ) - ); - - $driver->filledRectangle( - $color, - new awLine( - new awPoint($this->size, $height - $this->size), - new awPoint($width - $this->size - 1, $height - 1) - ) - ); - - $this->smoothFuture($driver, $color, $width, $height); - - break; - - } - - } - - private function smoothPast(awDriver $driver, awColor $color, $width, $height) { - - if($this->smooth) { - - for($i = 0; $i < $this->size; $i++) { - for($j = 0; $j <= $i; $j++) { - $driver->point( - $color, - new awPoint($i, $j + $height - $this->size) - ); - } - } - - for($i = 0; $i < $this->size; $i++) { - for($j = 0; $j <= $i; $j++) { - $driver->point( - $color, - new awPoint($width - $this->size + $j, $i) - ); - } - } - - } - - } - - private function smoothFuture(awDriver $driver, awColor $color, $width, $height) { - - if($this->smooth) { - - for($i = 0; $i < $this->size; $i++) { - for($j = 0; $j <= $i; $j++) { - $driver->point( - $color, - new awPoint($i, $this->size - $j - 1) - ); - } - } - - for($i = 0; $i < $this->size; $i++) { - for($j = 0; $j <= $i; $j++) { - $driver->point( - $color, - new awPoint($width - $this->size + $j, $height - $i - 1) - ); - } - } - - } - } - -} - -registerClass('Shadow'); diff --git a/modules/graphartichow/artichow/inc/Text.class.php b/modules/graphartichow/artichow/inc/Text.class.php deleted file mode 100644 index 663444425..000000000 --- a/modules/graphartichow/artichow/inc/Text.class.php +++ /dev/null @@ -1,233 +0,0 @@ -setText($text); - $this->setFont($font); - - // Set default color to black - if($color === NULL) { - $color = new awColor(0, 0, 0); - } - - $this->setColor($color); - $this->setAngle($angle); - - $this->border = new awBorder; - $this->border->hide(); - - } - - /** - * Get text - * - * @return string - */ - public function getText() { - return $this->text; - } - - /** - * Change text - * - * @param string $text New text - */ - public function setText($text) { - $this->text = (string)$text; - $this->text = str_replace("\r", "", $text); - } - - /** - * Change text font - * - * @param Font - */ - public function setFont(awFont $font) { - $this->font = $font; - } - - /** - * Get text font - * - * @return int - */ - public function getFont() { - return $this->font; - } - - /** - * Change text angle - * - * @param int - */ - public function setAngle($angle) { - $this->angle = (int)$angle; - } - - /** - * Get text angle - * - * @return int - */ - public function getAngle() { - return $this->angle; - } - - /** - * Change text color - * - * @param Color - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Get text color - * - * @return Color - */ - public function getColor() { - return $this->color; - } - - /** - * Change text background - * - * @param mixed $background - */ - public function setBackground($background) { - if($background instanceof awColor) { - $this->setBackgroundColor($background); - } elseif($background instanceof awGradient) { - $this->setBackgroundGradient($background); - } - } - - /** - * Change text background color - * - * @param awColor $color - */ - public function setBackgroundColor(awColor $color) { - $this->background = $color; - } - - /** - * Change text background gradient - * - * @param awGradient $gradient - */ - public function setBackgroundGradient(awGradient $gradient) { - $this->background = $gradient; - } - - /** - * Get text background - * - * @return Color, Gradient - */ - public function getBackground() { - return $this->background; - } - - /** - * Change padding - * - * @param int $left Left padding - * @param int $right Right padding - * @param int $top Top padding - * @param int $bottom Bottom padding - */ - public function setPadding($left, $right, $top, $bottom) { - $this->padding = array((int)$left, (int)$right, (int)$top, (int)$bottom); - } - - /** - * Get current padding - * - * @return array - */ - public function getPadding() { - return $this->padding; - } - -} - -registerClass('Text'); - diff --git a/modules/graphartichow/artichow/inc/Tick.class.php b/modules/graphartichow/artichow/inc/Tick.class.php deleted file mode 100644 index 4bfc46b80..000000000 --- a/modules/graphartichow/artichow/inc/Tick.class.php +++ /dev/null @@ -1,343 +0,0 @@ -setSize($size); - $this->setNumber($number); - $this->setColor(new awBlack); - $this->style = awTick::IN; - - } - - /** - * Change ticks style - * - * @param int $style - */ - public function setStyle($style) { - $this->style = (int)$style; - } - - /** - * Get ticks style - * - * @return int - */ - public function getStyle() { - return $this->style; - } - - /** - * Change ticks color - * - * @param awColor $color - */ - public function setColor(awColor $color) { - $this->color = $color; - } - - /** - * Change ticks size - * - * @param int $size - */ - public function setSize($size) { - $this->size = (int)$size; - } - - /** - * Change interval of ticks - * - * @param int $interval - */ - public function setInterval($interval) { - $this->interval = (int)$interval; - } - - /** - * Get interval between each tick - * - * @return int - */ - public function getInterval() { - return $this->interval; - } - - /** - * Change number of ticks - * - * @param int $number - */ - public function setNumber($number) { - $this->number = (int)$number; - } - - /** - * Get number of ticks - * - * @return int - */ - public function getNumber() { - return $this->number; - } - - /** - * Change number of ticks relative to others ticks - * - * @param awTick $tick Ticks reference - * @param int $number Number of ticks - */ - public function setNumberByTick(awTick $tick, $number) { - - $this->numberByTick = array($tick, (int)$number); - - } - - /** - * Hide ticks - * - * @param bool $hide - */ - public function hide($hide) { - $this->hide = (bool)$hide; - } - - /** - * Hide first tick - * - * @param bool $hide - */ - public function hideFirst($hide) { - $this->hideFirst = (bool)$hide; - } - - /** - * Hide last tick - * - * @param bool $hide - */ - public function hideLast($hide) { - $this->hideLast = (bool)$hide; - } - - /** - * Draw ticks on a vector - * - * @param awDriver $driver A driver - * @param awVector $vector A vector - */ - public function draw(awDriver $driver, awVector $vector) { - - if($this->numberByTick !== NULL) { - list($tick, $number) = $this->numberByTick; - $this->number = 1 + ($tick->getNumber() - 1) * ($number + 1); - $this->interval = $tick->getInterval(); - } - - if($this->number < 2 or $this->hide) { - return; - } - - $angle = $vector->getAngle(); - // echo "INIT:".$angle."
"; - switch($this->style) { - - case awTick::IN : - $this->drawTicks($driver, $vector, NULL, $angle + M_PI / 2); - break; - - case awTick::OUT : - $this->drawTicks($driver, $vector, $angle + 3 * M_PI / 2, NULL); - break; - - default : - $this->drawTicks($driver, $vector, $angle + M_PI / 2, $angle + 3 * M_PI / 2); - break; - - } - - } - - protected function drawTicks(awDriver $driver, awVector $vector, $from, $to) { - - // Draw last tick - if($this->hideLast === FALSE) { - - //echo ''; - if(($this->number - 1) % $this->interval === 0) { - $this->drawTick($driver, $vector->p2, $from, $to); - } - //echo ''; - - } - - $number = $this->number - 1; - $size = $vector->getSize(); - - // Get tick increment in pixels - $inc = $size / $number; - - // Check if we must hide the first tick - $start = $this->hideFirst ? $inc : 0; - $stop = $inc * $number; - - $position = 0; - - for($i = $start; round($i, 6) < $stop; $i += $inc) { - - if($position % $this->interval === 0) { - $p = $vector->p1->move( - round($i * cos($vector->getAngle()), 6), - round($i * sin($vector->getAngle() * -1), 6) - ); - $this->drawTick($driver, $p, $from, $to); - } - - $position++; - - } - //echo '

'; - } - - protected function drawTick(awDriver $driver, awPoint $p, $from, $to) { -// echo $this->size.':'.$angle.'|'.cos($angle).'/'; - // The round avoid some errors in the calcul - // For example, 12.00000008575245 becomes 12 - $p1 = $p; - $p2 = $p; - - if($from !== NULL) { - $p1 = $p1->move( - round($this->size * cos($from), 6), - round($this->size * sin($from) * -1, 6) - ); - } - - if($to !== NULL) { - $p2 = $p2->move( - round($this->size * cos($to), 6), - round($this->size * sin($to) * -1, 6) - ); - } - //echo $p1->x.':'.$p2->x.'('.$p1->y.':'.$p2->y.')'.'/'; - $vector = new awVector( - $p1, $p2 - ); - - $driver->line( - $this->color, - $vector - ); - - } - -} - -registerClass('Tick'); diff --git a/modules/graphartichow/artichow/inc/Tools.class.php b/modules/graphartichow/artichow/inc/Tools.class.php deleted file mode 100644 index 05ca3342e..000000000 --- a/modules/graphartichow/artichow/inc/Tools.class.php +++ /dev/null @@ -1,174 +0,0 @@ -set($left, $right, $top, $bottom); - } - - - /** - * Change side values - * - * @param mixed $left - * @param mixed $right - * @param mixed $top - * @param mixed $bottom - */ - public function set($left = NULL, $right = NULL, $top = NULL, $bottom = NULL) { - - if($left !== NULL) { - $this->left = (float)$left; - } - if($right !== NULL) { - $this->right = (float)$right; - } - if($top !== NULL) { - $this->top = (float)$top; - } - if($bottom !== NULL) { - $this->bottom = (float)$bottom; - } - - } - - - /** - * Add values to each side - * - * @param mixed $left - * @param mixed $right - * @param mixed $top - * @param mixed $bottom - */ - public function add($left = NULL, $right = NULL, $top = NULL, $bottom = NULL) { - - if($left !== NULL) { - $this->left += (float)$left; - } - if($right !== NULL) { - $this->right += (float)$right; - } - if($top !== NULL) { - $this->top += (float)$top; - } - if($bottom !== NULL) { - $this->bottom += (float)$bottom; - } - - } - -} - -registerClass('Side'); diff --git a/modules/graphartichow/artichow/inc/drivers/gd.class.php b/modules/graphartichow/artichow/inc/drivers/gd.class.php deleted file mode 100644 index dcf2f33be..000000000 --- a/modules/graphartichow/artichow/inc/drivers/gd.class.php +++ /dev/null @@ -1,1335 +0,0 @@ -driverString = 'gd'; - } - - public function init(awImage $image) { - - if($this->resource === NULL) { - - $this->setImageSize($image->width, $image->height); - - // Create image - $this->resource = imagecreatetruecolor($this->imageWidth, $this->imageHeight); - if(!$this->resource) { - awImage::drawError("Class Image: Unable to create a graph."); - } - - imagealphablending($this->resource, TRUE); - - // Antialiasing is now handled by the Driver object - $this->setAntiAliasing($image->getAntiAliasing()); - - // Original color - $this->filledRectangle( - new awWhite, - new awLine( - new awPoint(0, 0), - new awPoint($this->imageWidth, $this->imageHeight) - ) - ); - - $shadow = $image->shadow; - if($shadow !== NULL) { - $shadow = $shadow->getSpace(); - $p1 = new awPoint($shadow->left, $shadow->top); - $p2 = new awPoint($this->imageWidth - $shadow->right - 1, $this->imageHeight - $shadow->bottom - 1); - - - // Draw image background - $this->filledRectangle($image->getBackground(), new awLine($p1, $p2)); - - // Draw image border - $image->border->rectangle($this, $p1, $p2); - } - - } - } - - public function initFromFile(awFileImage $fileImage, $file) { - - $image = @getimagesize((string)$file); - - if($image and in_array($image[2], array(2, 3))) { - - $fileImage->setSize($image[0], $image[1]); - - switch($image[2]) { - - case 2 : - $this->resource = imagecreatefromjpeg($file); - break; - - case 3 : - $this->resource = imagecreatefrompng($file); - break; - - } - - $this->setImageSize($fileImage->width, $fileImage->height); - } else { - awImage::drawError("Class FileImage: Artichow does not support the format of this image (must be in PNG or JPEG)"); - } - } - - public function setImageSize($width, $height) { - - $this->imageWidth = $width; - $this->imageHeight = $height; - - } - - public function setPosition($x, $y) { - - // Calculate absolute position - $this->x = round($x * $this->imageWidth - $this->w / 2); - $this->y = round($y * $this->imageHeight - $this->h / 2); - - } - - public function setAbsPosition($x, $y) { - - $this->x = $x; - $this->y = $y; - - } - - public function movePosition($x, $y) { - - $this->x += (int)$x; - $this->y += (int)$y; - - } - - public function setSize($w, $h) { - - // Calcul absolute size - $this->w = round($w * $this->imageWidth); - $this->h = round($h * $this->imageHeight); - - return $this->getSize(); - - } - - public function setAbsSize($w, $h) { - - $this->w = $w; - $this->h = $h; - - return $this->getSize(); - - } - - public function getSize() { - - return array($this->w, $this->h); - - } - - public function setAntiAliasing($bool) { - - if(function_exists('imageantialias')) { - imageantialias($this->resource, (bool)$bool); - - $this->antiAliasing = (bool)$bool; - } elseif ($bool == true) { - awImage::drawErrorFile('missing-anti-aliasing'); - } - } - - public function getColor(awColor $color) { - - if($color->alpha === 0 or function_exists('imagecolorallocatealpha') === FALSE) { - $gdColor = imagecolorallocate($this->resource, $color->red, $color->green, $color->blue); - } else { - $gdColor = imagecolorallocatealpha($this->resource, $color->red, $color->green, $color->blue, $color->alpha); - } - - return $gdColor; - } - - public function copyImage(awImage $image, awPoint $p1, awPoint $p2) { - - list($x1, $y1) = $p1->getLocation(); - list($x2, $y2) = $p2->getLocation(); - - $driver = $image->getDriver(); - imagecopy($this->resource, $driver->resource, $this->x + $x1, $this->y + $y1, 0, 0, $x2 - $x1, $y2 - $y1); - - } - - public function copyResizeImage(awImage $image, awPoint $d1, awPoint $d2, awPoint $s1, awPoint $s2, $resample = TRUE) { - - if($resample) { - $function = 'imagecopyresampled'; - } else { - $function = 'imagecopyresized'; - } - - $driver = $image->getDriver(); - - $function( - $this->resource, - $driver->resource, - $this->x + $d1->x, $this->y + $d1->y, - $s1->x, $s1->y, - $d2->x - $d1->x, $d2->y - $d1->y, - $s2->x - $s1->x, $s2->y - $s1->y - ); - - } - - public function string(awText $text, awPoint $point, $width = NULL) { - - $font = $text->getFont(); - - // Can we deal with that font? - if($this->isCompatibleWithFont($font) === FALSE) { - awImage::drawError('Class GDDriver: Incompatible font type (\''.get_class($font).'\')'); - } - - // Check which FontDriver to use - if($font instanceof awPHPFont) { - $fontDriver = $this->phpFontDriver; - } else { - $fontDriver = $this->fileFontDriver; - } - - if($text->getBackground() !== NULL or $text->border->visible()) { - - list($left, $right, $top, $bottom) = $text->getPadding(); - - $textWidth = $fontDriver->getTextWidth($text, $this); - $textHeight = $fontDriver->getTextHeight($text, $this); - - $x1 = floor($point->x - $left); - $y1 = floor($point->y - $top); - $x2 = $x1 + $textWidth + $left + $right; - $y2 = $y1 + $textHeight + $top + $bottom; - - $this->filledRectangle( - $text->getBackground(), - awLine::build($x1, $y1, $x2, $y2) - ); - - $text->border->rectangle( - $this, - new awPoint($x1 - 1, $y1 - 1), - new awPoint($x2 + 1, $y2 + 1) - ); - - } - - $fontDriver->string($this, $text, $point, $width); - - } - - public function point(awColor $color, awPoint $p) { - - if($p->isHidden() === FALSE) { - $rgb = $this->getColor($color); - imagesetpixel($this->resource, $this->x + round($p->x), $this->y + round($p->y), $rgb); - } - - } - - public function line(awColor $color, awLine $line) { - - if($line->thickness > 0 and $line->isHidden() === FALSE) { - - $rgb = $this->getColor($color); - $thickness = $line->thickness; - - list($p1, $p2) = $line->getLocation(); - - $this->startThickness($thickness); - - switch($line->getStyle()) { - - case awLine::SOLID : - imageline($this->resource, $this->x + round($p1->x), $this->y + round($p1->y), $this->x + round($p2->x), $this->y + round($p2->y), $rgb); - break; - - case awLine::DOTTED : - $size = sqrt(pow($p2->y - $p1->y, 2) + pow($p2->x - $p1->x, 2)); - $cos = ($p2->x - $p1->x) / $size; - $sin = ($p2->y - $p1->y) / $size; - for($i = 0; $i <= $size; $i += 2) { - $p = new awPoint( - round($i * $cos + $p1->x), - round($i * $sin + $p1->y) - ); - $this->point($color, $p); - } - break; - - case awLine::DASHED : - $width = $p2->x - $p1->x; - $height = $p2->y - $p1->y; - $size = sqrt(pow($height, 2) + pow($width, 2)); - - if($size == 0) { - return; - } - - $cos = $width / $size; - $sin = $height / $size; - - $functionX = ($width > 0) ? 'min' : 'max'; - $functionY = ($height > 0) ? 'min' : 'max'; - - for($i = 0; $i <= $size; $i += 6) { - - $t1 = new awPoint( - round($i * $cos + $p1->x), - round($i * $sin + $p1->y) - ); - - $t2 = new awPoint( - round($functionX(($i + 3) * $cos, $width) + $p1->x), - round($functionY(($i + 3) * $sin, $height) + $p1->y) - ); - - $this->line($color, new awLine($t1, $t2)); - - } - break; - - } - - $this->stopThickness($thickness); - - } - - } - - public function arc(awColor $color, awPoint $center, $width, $height, $from, $to) { - - imagefilledarc( - $this->resource, - $this->x + $center->x, $this->y + $center->y, - $width, $height, - $from, $to, - $this->getColor($color), - IMG_ARC_EDGED | IMG_ARC_NOFILL - ); - - } - - public function filledArc(awColor $color, awPoint $center, $width, $height, $from, $to) { - - imagefilledarc( - $this->resource, - $this->x + $center->x, $this->y + $center->y, - $width, $height, - $from, $to, - $this->getColor($color), - IMG_ARC_PIE - ); - - } - - public function ellipse(awColor $color, awPoint $center, $width, $height) { - - list($x, $y) = $center->getLocation(); - - $rgb = $this->getColor($color); - imageellipse( - $this->resource, - $this->x + $x, - $this->y + $y, - $width, - $height, - $rgb - ); - - } - - public function filledEllipse($background, awPoint $center, $width, $height) { - - if($background instanceof awColor) { - - list($x, $y) = $center->getLocation(); - - $rgb = $this->getColor($background); - - imagefilledellipse( - $this->resource, - $this->x + $x, - $this->y + $y, - $width, - $height, - $rgb - ); - - } else if($background instanceof awGradient) { - - list($x, $y) = $center->getLocation(); - - $x1 = $x - round($width / 2); - $y1 = $y - round($height / 2); - $x2 = $x1 + $width; - $y2 = $y1 + $height; - - $gradientDriver = new awGDGradientDriver($this); - $gradientDriver->filledEllipse( - $background, - $x1, $y1, - $x2, $y2 - ); - - } - - } - - public function rectangle(awColor $color, awLine $line) { - - list($p1, $p2) = $line->getLocation(); - - switch($line->getStyle()) { - - case awLine::SOLID : - $thickness = $line->getThickness(); - $this->startThickness($thickness); - $rgb = $this->getColor($color); - imagerectangle($this->resource, $this->x + $p1->x, $this->y + $p1->y, $this->x + $p2->x, $this->y + $p2->y, $rgb); - $this->stopThickness($thickness); - break; - - default : - - $side = clone $line; - - - - // Top side - $side->setLocation( - new awPoint($p1->x, $p1->y), - new awPoint($p2->x, $p1->y) - ); - $this->line($color, $side); - - // Right side - $side->setLocation( - new awPoint($p2->x, $p1->y), - new awPoint($p2->x, $p2->y) - ); - $this->line($color, $side); - - // Bottom side - $side->setLocation( - new awPoint($p1->x, $p2->y), - new awPoint($p2->x, $p2->y) - ); - $this->line($color, $side); - - // Left side - $side->setLocation( - new awPoint($p1->x, $p1->y), - new awPoint($p1->x, $p2->y) - ); - $this->line($color, $side); - - break; - - } - - } - - public function filledRectangle($background, awLine $line) { - - $p1 = $line->p1; - $p2 = $line->p2; - - if($background instanceof awColor) { - $rgb = $this->getColor($background); - imagefilledrectangle($this->resource, $this->x + $p1->x, $this->y + $p1->y, $this->x + $p2->x, $this->y + $p2->y, $rgb); - } else if($background instanceof awGradient) { - $gradientDriver = new awGDGradientDriver($this); - $gradientDriver->filledRectangle($background, $p1, $p2); - } - - } - - public function polygon(awColor $color, awPolygon $polygon) { - - switch($polygon->getStyle()) { - - case awPolygon::SOLID : - $thickness = $polygon->getThickness(); - $this->startThickness($thickness); - $points = $this->getPolygonPoints($polygon); - $rgb = $this->getColor($color); - imagepolygon($this->resource, $points, $polygon->count(), $rgb); - $this->stopThickness($thickness); - break; - - default : - - if($polygon->count() > 1) { - - $prev = $polygon->get(0); - - $line = new awLine; - $line->setStyle($polygon->getStyle()); - $line->setThickness($polygon->getThickness()); - - for($i = 1; $i < $polygon->count(); $i++) { - $current = $polygon->get($i); - $line->setLocation($prev, $current); - $this->line($color, $line); - $prev = $current; - } - - // Close the polygon - $line->setLocation($prev, $polygon->get(0)); - $this->line($color, $line); - - } - - } - - } - - public function filledPolygon($background, awPolygon $polygon) { - - if($background instanceof awColor) { - - $points = $this->getPolygonPoints($polygon); - $rgb = $this->getColor($background); - - imagefilledpolygon($this->resource, $points, $polygon->count(), $rgb); - - } else if($background instanceof awGradient) { - - $gradientDriver = new awGDGradientDriver($this); - $gradientDriver->filledPolygon($background, $polygon); - - } - - } - - public function send(awImage $image) { - - $this->drawImage($image); - - } - - public function get(awImage $image) { - - return $this->drawImage($image, TRUE, FALSE); - - } - - public function getTextWidth(awText $text) { - $font = $text->getFont(); - - if($font instanceof awPHPFont) { - $fontDriver = $this->phpFontDriver; - } else { - $fontDriver = $this->fileFontDriver; - } - - return $fontDriver->getTextWidth($text, $this); - } - - public function getTextHeight(awText $text) { - $font = $text->getFont(); - - if($font instanceof awPHPFont) { - $fontDriver = $this->phpFontDriver; - } else { - $fontDriver = $this->fileFontDriver; - } - - return $fontDriver->getTextHeight($text, $this); - } - - protected function isCompatibleWithFont(awFont $font) { - if($font instanceof awFDBFont) { - return FALSE; - } else { - return TRUE; - } - } - - private function drawImage(awImage $image, $return = FALSE, $header = TRUE) { - - $format = $image->getFormatString(); - - // Test if format is available - if((imagetypes() & $image->getFormat()) === FALSE) { - awImage::drawError("Class Image: Format '".$format."' is not available on your system. Check that your PHP has been compiled with the good libraries."); - } - - // Get some infos about this image - switch($format) { - case 'jpeg' : - $function = 'imagejpeg'; - break; - case 'png' : - $function = 'imagepng'; - break; - case 'gif' : - $function = 'imagegif'; - break; - } - - // Send headers to the browser - if($header === TRUE) { - $image->sendHeaders(); - } - - if($return) { - ob_start(); - } - - $function($this->resource); - - if($return) { - return ob_get_clean(); - } - } - - private function getPolygonPoints(awPolygon $polygon) { - - $points = array(); - - foreach($polygon->all() as $point) { - $points[] = $point->x + $this->x; - $points[] = $point->y + $this->y; - } - - return $points; - - } - - private function startThickness($thickness) { - - if($thickness > 1) { - - // Beurk :'( - if($this->antiAliasing and function_exists('imageantialias')) { - imageantialias($this->resource, FALSE); - } - imagesetthickness($this->resource, $thickness); - - } - - } - - private function stopThickness($thickness) { - - if($thickness > 1) { - - if($this->antiAliasing and function_exists('imageantialias')) { - imageantialias($this->resource, TRUE); - } - imagesetthickness($this->resource, 1); - - } - - } - - -} - -registerClass('GDDriver'); - -/** - * To your gradients - * - * @package Artichow - */ - -class awGDGradientDriver { - - /** - * A driver - * - * @var awGDDriver - */ - protected $driver; - - /** - * Build your GDGradientDriver - * - * @var awGDDriver $driver - */ - public function __construct(awGDDriver $driver) { - - $this->driver = $driver; - - } - - public function drawFilledFlatTriangle(awGradient $gradient, awPoint $a, awPoint $b, awPoint $c) { - - if($gradient->angle !== 0) { - awImage::drawError("Class GDGradientDriver: Flat triangles can only be used with 0 degree gradients."); - } - - // Look for right-angled triangle - if($a->x !== $b->x and $b->x !== $c->x) { - awImage::drawError("Class GDGradientDriver: Not right-angled flat triangles are not supported yet."); - } - - if($a->x === $b->x) { - $d = $a; - $e = $c; - } else { - $d = $c; - $e = $a; - } - - $this->init($gradient, $b->y - $d->y); - - for($i = $c->y + 1; $i < $b->y; $i++) { - - $color = $this->color($i - $d->y); - $pos = ($i - $d->y) / ($b->y - $d->y); - - $p1 = new awPoint($e->x, $i); - $p2 = new awPoint(1 + floor($e->x - $pos * ($e->x - $d->x)), $i); - - $this->driver->filledRectangle($color, new awLine($p1, $p2)); - - unset($color); - - } - - } - - protected function drawFilledTriangle(awGradient $gradient, awPolygon $polygon) { - - if($gradient->angle === 0) { - $this->drawFilledTriangleVertically($gradient, $polygon); - } elseif($gradient->angle === 90) { - $this->drawFilledTriangleHorizontally($gradient, $polygon); - } - - } - - private function drawFilledTriangleVertically(awGradient $gradient, awPolygon $polygon) { - list($yMin, $yMax) = $polygon->getBoxYRange(); - - $this->init($gradient, $yMax - $yMin); - - // Get the triangle line we will draw our lines from - $fromLine = NULL; - $lines = $polygon->getLines(); - - $count = count($lines); - - // Pick the side of the triangle going from the top - // to the bottom of the surrounding box - for($i = 0; $i < $count; $i++) { - if($lines[$i]->isTopToBottom($polygon)) { - list($fromLine) = array_splice($lines, $i, 1); - break; - } - } - - // If for some reason the three points are aligned, - // $fromLine will still be NULL - if($fromLine === NULL) { - return; - } - - $fillLine = NULL; - for($y = round($yMin); $y < round($yMax); $y++) { - - $fromX = $fromLine->getXFrom($y); - - $toX = array(); - foreach($lines as $line) { - $xValue = $line->getXFrom($y); - - if(!is_null($xValue)) { - $toX[] = $xValue; - } - } - - if(count($toX) === 1) { - $fillLine = new Line( - new Point($fromX, $y), - new Point($toX[0], $y) - ); - } else { - - $line1 = new Line( - new Point($fromX, $y), - new Point($toX[0], $y) - ); - $line2 = new Line( - new Point($fromX, $y), - new Point($toX[1], $y) - ); - - if($line1->getSize() < $line2->getSize()) { - $fillLine = $line1; - } else { - $fillLine = $line2; - } - } - - if(!$fillLine->isPoint()) { - $color = $this->color($y - $yMin); - $this->driver->line($color, $fillLine); - - unset($color); - } - } - - } - - private function drawFilledTriangleHorizontally(awGradient $gradient, awPolygon $polygon) { - list($xMin, $xMax) = $polygon->getBoxXRange(); - - $this->init($gradient, $xMax - $xMin); - - // Get the triangle line we will draw our lines from - $fromLine = NULL; - $lines = $polygon->getLines(); - - $count = count($lines); - - // Pick the side of the triangle going all the way - // from the left side to the right side of the surrounding box - for($i = 0; $i < $count; $i++) { - if($lines[$i]->isLeftToRight($polygon)) { - list($fromLine) = array_splice($lines, $i, 1); - break; - } - } - - // If for some reason the three points are aligned, - // $fromLine will still be NULL - if($fromLine === NULL) { - return; - } - - $fillLine = NULL; - for($x = round($xMin); $x < round($xMax); $x++) { - - $fromY = floor($fromLine->getYFrom($x)); - - $toY = array(); - foreach($lines as $line) { - $yValue = $line->getYFrom($x); - - if(!is_null($yValue)) { - $toY[] = floor($yValue); - } - } - - if(count($toY) === 1) { - $fillLine = new Line( - new Point($x, $fromY), - new Point($x, $toY[0]) - ); - } else { - - $line1 = new Line( - new Point($x, $fromY), - new Point($x, $toY[0]) - ); - $line2 = new Line( - new Point($x, $fromY), - new Point($x, $toY[1]) - ); - - if($line1->getSize() < $line2->getSize()) { - $fillLine = $line1; - } else { - $fillLine = $line2; - } - } - - $color = $this->color($x - $xMin); - if($fillLine->isPoint()) { - $this->driver->point($color, $fillLine->p1); - } elseif($fillLine->getSize() >= 1) { - $this->driver->line($color, $fillLine); - } - unset($color); - } - - } - - public function filledRectangle(awGradient $gradient, awPoint $p1, awPoint $p2) { - - list($x1, $y1) = $p1->getLocation(); - list($x2, $y2) = $p2->getLocation(); - - if($y1 < $y2) { - $y1 ^= $y2 ^= $y1 ^= $y2; - } - - if($x2 < $x1) { - $x1 ^= $x2 ^= $x1 ^= $x2; - } - - if($gradient instanceof awLinearGradient) { - $this->rectangleLinearGradient($gradient, new awPoint($x1, $y1), new awPoint($x2, $y2)); - } else { - awImage::drawError("Class GDGradientDriver: This gradient is not supported by rectangles."); - } - - } - - public function filledPolygon(awGradient $gradient, awPolygon $polygon) { - - if($gradient instanceof awLinearGradient) { - $this->polygonLinearGradient($gradient, $polygon); - } else { - awImage::drawError("Class GDGradientDriver: This gradient is not supported by polygons."); - } - - } - - protected function rectangleLinearGradient(awLinearGradient $gradient, awPoint $p1, awPoint $p2) { - - list($x1, $y1) = $p1->getLocation(); - list($x2, $y2) = $p2->getLocation(); - - if($y1 - $y2 > 0) { - - if($gradient->angle === 0) { - - $this->init($gradient, $y1 - $y2); - - for($i = $y2; $i <= $y1; $i++) { - - $color = $this->color($i - $y2); - - $p1 = new awPoint($x1, $i); - $p2 = new awPoint($x2, $i); - - $this->driver->filledRectangle($color, new awLine($p1, $p2)); - - unset($color); - - } - - } else if($gradient->angle === 90) { - - $this->init($gradient, $x2 - $x1); - - for($i = $x1; $i <= $x2; $i++) { - - $color = $this->color($i - $x1); - - $p1 = new awPoint($i, $y2); - $p2 = new awPoint($i, $y1); - - $this->driver->filledRectangle($color, new awLine($p1, $p2)); - - unset($color); - - } - - } - - } - - } - - public function filledEllipse(awGradient $gradient, $x1, $y1, $x2, $y2) { - - if($y1 < $y2) { - $y1 ^= $y2 ^= $y1 ^= $y2; - } - - if($x2 < $x1) { - $x1 ^= $x2 ^= $x1 ^= $x2; - } - - if($gradient instanceof awRadialGradient) { - $this->ellipseRadialGradient($gradient, $x1, $y1, $x2, $y2); - } else if($gradient instanceof awLinearGradient) { - $this->ellipseLinearGradient($gradient, $x1, $y1, $x2, $y2); - } else { - awImage::drawError("Class GDGradientDriver: This gradient is not supported by ellipses."); - } - - } - - protected function ellipseRadialGradient(awGradient $gradient, $x1, $y1, $x2, $y2) { - - if($y1 - $y2 > 0) { - - if($y1 - $y2 != $x2 - $x1) { - awImage::drawError("Class GDGradientDriver: Radial gradients are only implemented on circle, not ellipses."); - } - - $c = new awPoint($x1 + ($x2 - $x1) / 2, $y1 + ($y2 - $y1) / 2); - $r = ($x2 - $x1) / 2; - $ok = array(); - - // Init gradient - $this->init($gradient, $r); - - for($i = 0; $i <= $r; $i += 0.45) { - - $p = ceil((2 * M_PI * $i)); - - if($p > 0) { - $interval = 360 / $p; - } else { - $interval = 360; - } - - $color = $this->color($i); - - for($j = 0; $j < 360; $j += $interval) { - - $rad = ($j / 360) * (2 * M_PI); - - $x = round($i * cos($rad)); - $y = round($i * sin($rad)); - - $l = sqrt($x * $x + $y * $y); - - if($l <= $r) { - - if( - array_key_exists((int)$x, $ok) === FALSE or - array_key_exists((int)$y, $ok[$x]) === FALSE - ) { - - // Print the point - $this->driver->point($color, new awPoint($c->x + $x, $c->y + $y)); - - $ok[(int)$x][(int)$y] = TRUE; - - } - - } - - } - - unset($color); - - } - - } - - } - - protected function ellipseLinearGradient(awGradient $gradient, $x1, $y1, $x2, $y2) { - - // Gauche->droite : 90° - - if($y1 - $y2 > 0) { - - if($y1 - $y2 != $x2 - $x1) { - awImage::drawError("Class GDGradientDriver: Linear gradients are only implemented on circle, not ellipses."); - } - - $r = ($x2 - $x1) / 2; - - // Init gradient - $this->init($gradient, $x2 - $x1); - - for($i = -$r; $i <= $r; $i++) { - - $h = sin(acos($i / $r)) * $r; - - $color = $this->color($i + $r); - - if($gradient->angle === 90) { - - // Print the line - $p1 = new awPoint( - $x1 + $i + $r, - round(max($y2 + $r - $h + 1, $y2)) - ); - - $p2 = new awPoint( - $x1 + $i + $r, - round(min($y1 - $r + $h - 1, $y1)) - ); - - } else { - - // Print the line - $p1 = new awPoint( - round(max($x1 + $r - $h + 1, $x1)), - $y2 + $i + $r - ); - - $p2 = new awPoint( - round(min($x2 - $r + $h - 1, $x2)), - $y2 + $i + $r - ); - - } - - $this->driver->filledRectangle($color, new awLine($p1, $p2)); - - unset($color); - - } - - } - - } - - protected function polygonLinearGradient(awLinearGradient $gradient, awPolygon $polygon) { - - $count = $polygon->count(); - - if($count >= 4) { - - $left = $polygon->get(0); - $right = $polygon->get($count - 1); - - if($gradient->angle === 0) { - - // Get polygon maximum and minimum - $offset = $polygon->get(0); - $max = $min = $offset->y; - for($i = 1; $i < $count - 1; $i++) { - $offset = $polygon->get($i); - $max = max($max, $offset->y); - $min = min($min, $offset->y); - } - - $this->init($gradient, $max - $min); - - $prev = $polygon->get(1); - - $sum = 0; - - for($i = 2; $i < $count - 1; $i++) { - - $current = $polygon->get($i); - - $interval = 1; - - if($i !== $count - 2) { - $current->x -= $interval; - } - - if($current->x - $prev->x > 0) { - - // Draw rectangle - $x1 = $prev->x; - $x2 = $current->x; - $y1 = max($prev->y, $current->y); - $y2 = $left->y; - - $gradient = new awLinearGradient( - $this->color($max - $min - ($y2 - $y1)), - $this->color($max - $min), - 0 - ); - - if($y1 > $y2) { - $y2 = $y1; - } - - $this->driver->filledRectangle( - $gradient, - awLine::build($x1, $y1, $x2, $y2) - ); - - $top = ($prev->y < $current->y) ? $current : $prev; - $bottom = ($prev->y >= $current->y) ? $current : $prev; - - $gradient = new awLinearGradient( - $this->color($bottom->y - $min), - $this->color($max - $min - ($y2 - $y1)), - 0 - ); - - - $gradientDriver = new awGDGradientDriver($this->driver); - $gradientDriver->drawFilledFlatTriangle( - $gradient, - new awPoint($prev->x, min($prev->y, $current->y)), - $top, - new awPoint($current->x, min($prev->y, $current->y)) - ); - unset($gradientDriver); - - $sum += $current->x - $prev->x; - - } - - $prev = $current; - $prev->x += $interval; - - } - - } else if($gradient->angle === 90) { - - $width = $right->x - $left->x; - $this->init($gradient, $width); - - $pos = 1; - $next = $polygon->get($pos++); - - $this->next($polygon, $pos, $prev, $next); - - for($i = 0; $i <= $width; $i++) { - - $x = $left->x + $i; - - $y1 = round($prev->y + ($next->y - $prev->y) * (($i + $left->x - $prev->x) / ($next->x - $prev->x))); - $y2 = $left->y; - - // Draw line - $color = $this->color($i); - // YaPB : PHP does not handle alpha on lines - $this->driver->filledRectangle($color, awLine::build($x, $y1, $x, $y2)); - - unset($color); - - // Jump to next point - if($next->x == $i + $left->x) { - - $this->next($polygon, $pos, $prev, $next); - - } - - } - - } - - } else if($count === 3) { - $this->drawFilledTriangle( - $gradient, - $polygon - ); - } - - } - - private function next($polygon, &$pos, &$prev, &$next) { - - do { - $prev = $next; - $next = $polygon->get($pos++); - } - while($next->x - $prev->x == 0 and $pos < $polygon->count()); - - } - - /** - * Start colors - * - * @var int - */ - private $r1, $g1, $b1, $a1; - - /** - * Stop colors - * - * @var int - */ - private $r2, $g2, $b2, $a2; - - /** - * Gradient size in pixels - * - * @var int - */ - private $size; - - - private function init(awGradient $gradient, $size) { - - list( - $this->r1, $this->g1, $this->b1, $this->a1 - ) = $gradient->from->rgba(); - - list( - $this->r2, $this->g2, $this->b2, $this->a2 - ) = $gradient->to->rgba(); - - $this->size = $size; - } - - private function color($pos) { - - return new awColor( - $this->getRed($pos), - $this->getGreen($pos), - $this->getBlue($pos), - $this->getAlpha($pos) - ); - - } - - - private function getRed($pos) { - if((float)$this->size !== 0.0) { - return (int)round($this->r1 + ($pos / $this->size) * ($this->r2 - $this->r1)); - } else { - return 0; - } - } - - private function getGreen($pos) { - if((float)$this->size !== 0.0) { - return (int)round($this->g1 + ($pos / $this->size) * ($this->g2 - $this->g1)); - } else { - return 0; - } - } - - private function getBlue($pos) { - if((float)$this->size !== 0.0) { - return (int)round($this->b1 + ($pos / $this->size) * ($this->b2 - $this->b1)); - } else { - return 0; - } - } - - private function getAlpha($pos) { - if((float)$this->size !== 0.0) { - return (int)round(($this->a1 + ($pos / $this->size) * ($this->a2 - $this->a1)) / 127 * 100); - } else { - return 0; - } - } - -} - -registerClass('GDGradientDriver'); - -/* - * Check for GD2 - */ -if(function_exists('imagecreatetruecolor') === FALSE) { - awImage::drawErrorFile('missing-gd2'); -} - diff --git a/modules/graphartichow/artichow/inc/drivers/index.php b/modules/graphartichow/artichow/inc/drivers/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/inc/drivers/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/inc/drivers/ming.class.php b/modules/graphartichow/artichow/inc/drivers/ming.class.php deleted file mode 100644 index aee0ae7db..000000000 --- a/modules/graphartichow/artichow/inc/drivers/ming.class.php +++ /dev/null @@ -1,773 +0,0 @@ -driverString = 'ming'; - - // Nice defaults - ming_setScale(20.0); - ming_useswfversion(6); - - } - - /** - * Initialize the driver for a particular awImage object - * - * @param awImage $image - */ - public function init(awImage $image) { - - if($this->movie === NULL) { - $this->setImageSize($image->width, $image->height); - - // Create movie - $this->movie = new SWFMovie(); - if(!$this->movie) { - awImage::drawError("Class Image: Unable to create a graph."); - } - - $this->movie->setDimension($image->width, $image->height); - - $this->setAntiAliasing($image->getAntiAliasing()); - - // Original color - $this->filledRectangle( - new awWhite, - new awLine( - new awPoint(0, 0), - new awPoint($this->imageWidth, $this->imageHeight) - ) - ); - - $shadow = $image->shadow; - if($shadow !== NULL) { - $shadow = $shadow->getSpace(); - $p1 = new awPoint($shadow->left, $shadow->top); - $p2 = new awPoint($this->imageWidth - $shadow->right - 1, $this->imageHeight - $shadow->bottom - 1); - - // Draw image background - $this->filledRectangle($image->getBackground(), new awLine($p1, $p2)); - - // Draw image border - $image->border->rectangle($this, $p1, $p2); - } - } - } - - /** - * Initialize the Driver for a particular FileImage object - * - * @param awFileImage $fileImage The FileImage object to work on - * @param string $file Image filename - */ - public function initFromFile(awFileImage $fileImage, $file) { - - } - - /** - * Change the image size - * - * @param int $width Image width - * @param int $height Image height - */ - public function setImageSize($width, $height) { - $this->imageWidth = $width; - $this->imageHeight = $height; - } - - /** - * Inform the driver of the position of your image - * - * @param float $x Position on X axis of the center of the component - * @param float $y Position on Y axis of the center of the component - */ - public function setPosition($x, $y) { - // Calculate absolute position - $this->x = round($x * $this->imageWidth - $this->w / 2); - $this->y = round($y * $this->imageHeight - $this->h / 2); - } - - /** - * Inform the driver of the position of your image - * This method need absolutes values - * - * @param int $x Left-top corner X position - * @param int $y Left-top corner Y position - */ - public function setAbsPosition($x, $y) { - $this->x = $x; - $this->y = $y; - } - - /** - * Move the position of the image - * - * @param int $x Add this value to X axis - * @param int $y Add this value to Y axis - */ - public function movePosition($x, $y) { - $this->x += (int)$x; - $this->y += (int)$y; - } - - /** - * Inform the driver of the size of your image - * Height and width must be between 0 and 1. - * - * @param int $w Image width - * @param int $h Image height - * @return array Absolute width and height of the image - */ - public function setSize($w, $h) { - - // Calcul absolute size - $this->w = round($w * $this->imageWidth); - $this->h = round($h * $this->imageHeight); - - return $this->getSize(); - - } - - /** - * Inform the driver of the size of your image - * You can set absolute size with this method. - * - * @param int $w Image width - * @param int $h Image height - */ - public function setAbsSize($w, $h) { - $this->w = $w; - $this->h = $h; - - return $this->getSize(); - } - - /** - * Get the size of the component handled by the driver - * - * @return array Absolute width and height of the component - */ - public function getSize() { - return array($this->w, $this->h); - } - - /** - * Turn antialiasing on or off - * - * @var bool $bool - */ - public function setAntiAliasing($bool) { - if($this->movie !== NULL) { - - $actionscript = ' - _quality = "%s"; - '; - - if((bool)$bool) { - $actionscript = sprintf($actionscript, 'high'); - } else { - $actionscript = sprintf($actionscript, 'low'); - } - - $this->movie->add(new SWFAction(str_replace("\r", "", $actionscript))); - } - } - - /** - * When passed a Color object, returns the corresponding - * color identifier (driver dependant). - * - * @param awColor $color A Color object - * @return array $rgba A color identifier representing the color composed of the given RGB components - */ - public function getColor(awColor $color) { - - // Ming simply works with R, G, B and Alpha values. - list($red, $green, $blue, $alpha) = $color->rgba(); - - // However, the Ming alpha channel ranges from 255 (opaque) to 0 (transparent), - // while the awColor alpha channel ranges from 0 (opaque) to 100 (transparent). - // First, we convert from 0-100 to 0-255. - $alpha = (int)($alpha * 255 / 100); - - // Then from 0-255 to 255-0. - $alpha = abs($alpha - 255); - - return array($red, $green, $blue, $alpha); - } - - /** - * Draw an image here - * - * @param awImage $image Image - * @param int $p1 Image top-left point - * @param int $p2 Image bottom-right point - */ - public function copyImage(awImage $image, awPoint $p1, awPoint $p2) { - - } - - /** - * Draw an image here - * - * @param awImage $image Image - * @param int $d1 Destination top-left position - * @param int $d2 Destination bottom-right position - * @param int $s1 Source top-left position - * @param int $s2 Source bottom-right position - * @param bool $resample Resample image ? (default to TRUE) - */ - public function copyResizeImage(awImage $image, awPoint $d1, awPoint $d2, awPoint $s1, awPoint $s2, $resample = TRUE) { - - } - - /** - * Draw a string - * - * @var awText $text Text to print - * @param awPoint $point Draw the text at this point - * @param int $width Text max width - */ - public function string(awText $text, awPoint $point, $width = NULL) { - $font = $text->getFont(); - - // Can we deal with that font? - if($this->isCompatibleWithFont($font) === FALSE) { - awImage::drawError('Class MingDriver: Incompatible font type (\''.get_class($font).'\')'); - } - - // Ming can only work with awFileFont objects for now - // (i.e. awFDBFont, or awTuffy et al.) - $fontDriver = $this->fileFontDriver; - - if($text->getBackground() !== NULL or $text->border->visible()) { - - list($left, $right, $top, $bottom) = $text->getPadding(); - - $textWidth = $fontDriver->getTextWidth($text, $this); - $textHeight = $fontDriver->getTextHeight($text, $this); - - $x1 = floor($point->x - $left); - $y1 = floor($point->y - $top); - $x2 = $x1 + $textWidth + $left + $right; - $y2 = $y1 + $textHeight + $top + $bottom; - - $this->filledRectangle( - $text->getBackground(), - awLine::build($x1, $y1, $x2, $y2) - ); - - $text->border->rectangle( - $this, - new awPoint($x1 - 1, $y1 - 1), - new awPoint($x2 + 1, $y2 + 1) - ); - - } - - $fontDriver->string($this, $text, $point, $width); - } - - /** - * Draw a pixel - * - * @param awColor $color Pixel color - * @param awPoint $p - */ - public function point(awColor $color, awPoint $p) { - if($p->isHidden() === FALSE) { - list($red, $green, $blue, $alpha) = $this->getColor($color); - - $point = new SWFShape(); - $point->setLine(1, $red, $green, $blue, $alpha); - $point->movePenTo($this->x + round($p->x), $this->y + round($p->y)); - $point->drawLine(0.5, 0.5); - $point->movePen(-0.5, 0); - $point->drawLine(0.5, -0.5); - - $this->movie->add($point); - } - } - - /** - * Draw a colored line - * - * @param awColor $color Line color - * @param awLine $line - * @param int $thickness Line tickness - */ - public function line(awColor $color, awLine $line) { - if($line->getThickness() > 0 and $line->isHidden() === FALSE) { - - list($red, $green, $blue, $alpha) = $this->getColor($color); - - $mingLine = new SWFShape(); - $mingLine->setLine($line->getThickness(), $red, $green, $blue, $alpha); - - list($p1, $p2) = $line->getLocation(); - - $mingLine->movePenTo($this->x + round($p1->x), $this->y + round($p1->y)); - - switch($line->getStyle()) { - - case awLine::SOLID : - $mingLine->drawLineTo($this->x + round($p2->x), $this->y + round($p2->y)); - $this->movie->add($mingLine); - break; - - case awLine::DOTTED : - $size = sqrt(pow($p2->y - $p1->y, 2) + pow($p2->x - $p1->x, 2)); - $cos = ($p2->x - $p1->x) / $size; - $sin = ($p2->y - $p1->y) / $size; - - for($i = 0; $i <= $size; $i += 2) { - $p = new awPoint( - round($i * $cos + $p1->x), - round($i * $sin + $p1->y) - ); - $this->point($color, $p); - } - - break; - - case awLine::DASHED : - $width = $p2->x - $p1->x; - $height = $p2->y - $p1->y; - $size = sqrt(pow($height, 2) + pow($width, 2)); - - if($size == 0) { - return; - } - - $cos = $width / $size; - $sin = $height / $size; - - $functionX = ($width > 0) ? 'min' : 'max'; - $functionY = ($height > 0) ? 'min' : 'max'; - - for($i = 0; $i <= $size; $i += 6) { - - $t1 = new awPoint( - round($i * $cos + $p1->x), - round($i * $sin + $p1->y) - ); - - $t2 = new awPoint( - round($functionX(($i + 3) * $cos, $width) + $p1->x), - round($functionY(($i + 3) * $sin, $height) + $p1->y) - ); - - $this->line($color, new awLine($t1, $t2)); - - } - - break; - - } - - } - - } - - /** - * Draw a color arc - - * @param awColor $color Arc color - * @param awPoint $center Point center - * @param int $width Ellipse width - * @param int $height Ellipse height - * @param int $from Start angle - * @param int $to End angle - */ - public function arc(awColor $color, awPoint $center, $width, $height, $from, $to) { - - } - - /** - * Draw an arc with a background color - * - * @param awColor $color Arc background color - * @param awPoint $center Point center - * @param int $width Ellipse width - * @param int $height Ellipse height - * @param int $from Start angle - * @param int $to End angle - */ - public function filledArc(awColor $color, awPoint $center, $width, $height, $from, $to) { - - } - - /** - * Draw a colored ellipse - * - * @param awColor $color Ellipse color - * @param awPoint $center Ellipse center - * @param int $width Ellipse width - * @param int $height Ellipse height - */ - public function ellipse(awColor $color, awPoint $center, $width, $height) { - - } - - /** - * Draw an ellipse with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param awPoint $center Ellipse center - * @param int $width Ellipse width - * @param int $height Ellipse height - */ - public function filledEllipse($background, awPoint $center, $width, $height) { - - } - - /** - * Draw a colored rectangle - * - * @param awColor $color Rectangle color - * @param awLine $line Rectangle diagonale - * @param awPoint $p2 - */ - public function rectangle(awColor $color, awLine $line) { - list($p1, $p2) = $line->getLocation(); - - // Get Red, Green, Blue and Alpha values for the line - list($r, $g, $b, $a) = $this->getColor($color); - - // Calculate the coordinates of the two other points of the rectangle - $p3 = new Point($p1->x, $p2->y); - $p4 = new Point($p2->x, $p1->y); - - - $side = clone $line; - - - - // Draw the four sides of the rectangle, clockwise - if( - ($p1->x <= $p2->x and $p1->y <= $p2->y) - or - ($p1->x >= $p2->x and $p1->y >= $p2->y) - ) { - $side->setLocation($p1, $p4); - $this->line($color, $side); - - $side->setLocation($p4, $p2); - $this->line($color, $side); - - $side->setLocation($p2, $p3); - $this->line($color, $side); - - $side->setLocation($p3, $p1); - $this->line($color, $side); - } else { - $side->setLocation($p1, $p3); - $this->line($color, $side); - - $side->setLocation($p3, $p2); - $this->line($color, $side); - - $side->setLocation($p2, $p4); - $this->line($color, $side); - - $side->setLocation($p4, $p1); - $this->line($color, $side); - } - } - - /** - * Draw a rectangle with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param awLine $line Rectangle diagonale - */ - public function filledRectangle($background, awLine $line) { - list($p1, $p2) = $line->getLocation(); - - // Common shape settings - $shape = new SWFShape(); - $shape->setLine(0); - - if($background instanceof awColor) { - - // Get the Red, Green, Blue and Alpha values - list($r, $g, $b, $a) = $this->getColor($background); - $shape->setRightFill($r, $g, $b, $a); - - } else if($background instanceof awGradient) { - - // Get the Gradient object as an SWFGradient one - list($flashGradient, $style) = $this->getGradient($background); - - $fill = $shape->addFill($flashGradient, $style); - - // Angles between Artichow and Ming don't match. - // Don't use abs() or vertical gradients get inverted. - $angle = $background->angle - 90; - $fill->rotateTo($angle); - - // Move the gradient based on the position of the rectangle we're drawing - $centerX = min($p1->x, $p2->y) + abs($p1->x - $p2->x) / 2; - $centerY = min($p1->y, $p2->y) + abs($p1->y - $p2->y) / 2; - $fill->moveTo($centerX, $centerY); - - // Ming draws its gradients on a 1600x1600 image, - // so we have to resize it. - if($angle === -90) { - $ratio = abs($p1->y - $p2->y) / 1600; - } else { - $ratio = abs($p1->x - $p2->x) / 1600; - } - $fill->scaleTo($ratio); - - $shape->setRightFill($fill); - - } - - // Set starting position - $shape->movePenTo($this->x + round($p1->x), $this->y + round($p1->y)); - - // Depending on the points' relative positions, - // we have two drawing possibilities - if( - ($p1->x <= $p2->x and $p1->y <= $p2->y) - or - ($p1->x >= $p2->x and $p1->y >= $p2->y) - ) { - $shape->drawLineTo($this->x + round($p2->x), $this->y + round($p1->y)); - $shape->drawLineTo($this->x + round($p2->x), $this->y + round($p2->y)); - $shape->drawLineTo($this->x + round($p1->x), $this->y + round($p2->y)); - $shape->drawLineTo($this->x + round($p1->x), $this->y + round($p1->y)); - } else { - $shape->drawLineTo($this->x + round($p1->x), $this->y + round($p2->y)); - $shape->drawLineTo($this->x + round($p2->x), $this->y + round($p2->y)); - $shape->drawLineTo($this->x + round($p2->x), $this->y + round($p1->y)); - $shape->drawLineTo($this->x + round($p1->x), $this->y + round($p1->y)); - } - - $this->movie->add($shape); - } - - /** - * Draw a polygon - * - * @param awColor $color Polygon color - * @param Polygon A polygon - */ - public function polygon(awColor $color, awPolygon $polygon) { - $points = $polygon->all(); - $count = count($points); - - if($count > 1) { - - $side = new awLine; - $side->setStyle($polygon->getStyle()); - $side->setThickness($polygon->getThickness()); - - $prev = $points[0]; - - for($i = 1; $i < $count; $i++) { - $current = $points[$i]; - $side->setLocation($prev, $current); - $this->line($color, $side); - $prev = $current; - } - - // Close the polygon - $side->setLocation($prev, $points[0]); - $this->line($color, $side); - } - } - - /** - * Draw a polygon with a background - * - * @param mixed $background Background (can be a color or a gradient) - * @param Polygon A polygon - */ - public function filledPolygon($background, awPolygon $polygon) { - $shape = new SWFShape(); - - if($background instanceof awColor) { - list($red, $green, $blue, $alpha) = $this->getColor($background); - - $shape->setRightFill($red, $green, $blue, $alpha); - } elseif($background instanceof awGradient) { - list($flashGradient, $style) = $this->getGradient($background); - - $fill = $shape->addFill($flashGradient, $style); - - list($xMin, $xMax) = $polygon->getBoxXRange(); - list($yMin, $yMax) = $polygon->getBoxYRange(); - - if($background->angle === 0) { - $fill->scaleTo(($yMax - $yMin) / 1600); - } else { - $fill->scaleTo(($xMax - $xMin) / 1600); - } - $fill->moveTo($xMin + ($xMax - $xMin) / 2, $yMin + ($yMax - $yMin) / 2); - - $shape->setRightFill($fill); - } - - $points = $polygon->all(); - $count = count($points); - - if($count > 1) { - - $prev = $points[0]; - - $shape->movePenTo($prev->x, $prev->y); - - for($i = 1; $i < $count; $i++) { - $current = $points[$i]; - $shape->drawLineTo($current->x, $current->y); - } - - // Close the polygon - $shape->drawLineTo($prev->x, $prev->y); - - $this->movie->add($shape); - - } - } - - /** - * Sends the image, as well as the correct HTTP headers, to the browser - * - * @param awImage $image The Image object to send - */ - public function send(awImage $image) { - $this->drawImage($image); - } - - /** - * Get the image as binary data - * - * @param awImage $image - */ - public function get(awImage $image) { - return $this->drawImage($image, TRUE, FALSE); - } - - public function getTextWidth(awText $text) { - $font = $text->getFont(); - if($this->isCompatibleWithFont($font) === FALSE) { - awImage::drawError('Class MingDriver: Incompatible font type (\''.get_class($font).'\')'); - } - - // Ming only supports FileFont - $fontDriver = $this->fileFontDriver; - - return $fontDriver->getTextWidth($text, $this); - } - - public function getTextHeight(awText $text) { - $font = $text->getFont(); - if($this->isCompatibleWithFont($font) === FALSE) { - awImage::drawError('Class MingDriver: Incompatible font type (\''.get_class($font).'\')'); - } - - // Ming only supports FileFont - $fontDriver = $this->fileFontDriver; - - return $fontDriver->getTextHeight($text, $this); - } - - protected function isCompatibleWithFont(awFont $font) { - if($font instanceof awTTFFont or $font instanceof awPHPFont) { - return FALSE; - } else { - return TRUE; - } - } - - private function drawImage(awImage $image, $return = FALSE, $header = TRUE) { - - // Send headers to the browser - if($header === TRUE) { - $image->sendHeaders(); - } - - if($return) { - ob_start(); - } - - $this->movie->output(); - - if($return) { - return ob_get_clean(); - } - } - - /** - * Convert an awGradient object to an SWFGradient one. - * Returns an object as well as the style of the Flash gradient. - * - * @param awGradient $gradient The awGradient object to convert - * @return array - */ - private function getGradient(awGradient $gradient) { - $flashGradient = new SWFGradient(); - - // Get RGBA values for the gradient boundaries - list($r1, $g1, $b1, $a1) = $this->getColor($gradient->from); - list($r2, $g2, $b2, $a2) = $this->getColor($gradient->to); - - $flashGradient->addEntry(0, $r1, $g1, $b1, $a1); - - if($gradient instanceof awBilinearGradient) { - - $flashGradient->addEntry($gradient->center, $r2, $g2, $b2, $a2); - $flashGradient->addEntry(1, $r1, $g1, $b1, $a1); - - return array($flashGradient, SWFFILL_LINEAR_GRADIENT); - } else { - - $flashGradient->addEntry(1, $r2, $g2, $b2, $a2); - - if($gradient instanceof awLinearGradient) { - return array($flashGradient, SWFFILL_LINEAR_GRADIENT); - } else { - return array($flashGradient, SWFFILL_RADIAL_GRADIENT); - } - } - } -// abstract private function getPolygonPoints(awPolygon $polygon); - -} - -registerClass('MingDriver'); - -/* - * Check for ming presence - */ -if(function_exists('ming_useswfversion') === FALSE) { - awImage::drawErrorFile('missing-ming'); -} - diff --git a/modules/graphartichow/artichow/inc/index.php b/modules/graphartichow/artichow/inc/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/inc/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/index.php b/modules/graphartichow/artichow/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/artichow/patterns/BarDepth.php b/modules/graphartichow/artichow/patterns/BarDepth.php deleted file mode 100644 index eaf822f4b..000000000 --- a/modules/graphartichow/artichow/patterns/BarDepth.php +++ /dev/null @@ -1,84 +0,0 @@ -barShadow->setSize(2); - $plot->barShadow->smooth(TRUE); - $plot->barShadow->setColor(new Color(160, 160, 160, 10)); - - return $plot; - - } - - public function create() { - - $group = new PlotGroup; - $group->setSpace(2, 2, 2, 0); - $group->setPadding(30, 10, NULL, NULL); - - $group->grid->hideVertical(TRUE); - $group->grid->setType(Line::DASHED); - - $yForeground = $this->getArg('yForeground'); - $yBackground = $this->getArg('yBackground'); - - $legendForeground = $this->getArg('legendForeground'); - $legendBackground = $this->getArg('legendBackground'); - - $colorForeground = $this->getArg('colorForeground', new LightBlue(10)); - $colorBackground = $this->getArg('colorBackground', new Orange(25)); - - if($yForeground === NULL) { - awImage::drawError("Class BarDepthPattern: Argument 'yForeground' must not be NULL."); - } - - // Background - if($yBackground !== NULL) { - - $plot = $this->getPlot($yBackground, 6); - $plot->setBarColor($colorBackground); - - $group->add($plot); - if($legendBackground !== NULL) { - $group->legend->add($plot, $legendBackground, Legend::BACKGROUND); - } - - } - - // Foreground - $plot = $this->getPlot($yForeground, 0); - $plot->setBarColor($colorForeground); - - $group->add($plot); - if($legendForeground !== NULL) { - $group->legend->add($plot, $legendForeground, Legend::BACKGROUND); - } - - $group->axis->bottom->hideTicks(TRUE); - - $group->legend->shadow->setSize(0); - $group->legend->setAlign(Legend::CENTER); - $group->legend->setSpace(6); - $group->legend->setTextFont(new Tuffy(8)); - $group->legend->setPosition(0.50, 0.10); - $group->legend->setBackgroundColor(new Color(255, 255, 255, 10)); - $group->legend->setColumns(2); - - return $group; - - } - -} diff --git a/modules/graphartichow/artichow/patterns/LightLine.php b/modules/graphartichow/artichow/patterns/LightLine.php deleted file mode 100644 index 156d9aa66..000000000 --- a/modules/graphartichow/artichow/patterns/LightLine.php +++ /dev/null @@ -1,49 +0,0 @@ -getArg('legend'); - - $y = $this->getArg('y'); - - if($y === NULL) { - awImage::drawError("Class LightLinePattern: Argument 'y' must not be NULL."); - } - - $plot = new LinePlot($y); - $plot->setSize(0.7, 1); - $plot->setCenter(0.35, 0.5); - $plot->setPadding(35, 15, 35, 30); - $plot->setColor(new Orange()); - $plot->setFillColor(new LightOrange(80)); - - $plot->grid->setType(Line::DASHED); - - $plot->mark->setType(Mark::CIRCLE); - $plot->mark->setFill(new MidRed); - $plot->mark->setSize(6); - - $plot->legend->setPosition(1, 0.5); - $plot->legend->setAlign(Legend::LEFT); - $plot->legend->shadow->smooth(TRUE); - - if($legend !== NULL) { - $plot->legend->add($plot, $legend, Legend::MARK); - } - - return $plot; - - } - -} diff --git a/modules/graphartichow/artichow/patterns/index.php b/modules/graphartichow/artichow/patterns/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/artichow/patterns/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/config.xml b/modules/graphartichow/config.xml deleted file mode 100755 index 100d73b6b..000000000 --- a/modules/graphartichow/config.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - graphartichow - - - - - - 0 - 0 - - \ No newline at end of file diff --git a/modules/graphartichow/graphartichow.php b/modules/graphartichow/graphartichow.php deleted file mode 100644 index 9a606804e..000000000 --- a/modules/graphartichow/graphartichow.php +++ /dev/null @@ -1,369 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -if (!defined('_PS_VERSION_')) - exit; - -class GraphArtichow extends ModuleGraphEngine -{ - private $_graph; - private $_plot = array(); //for simple-layer graphics - private $_group = NULL; //for multi-layer graphics - private $_error = 0; - - function __construct($type = null) - { - if ($type != null) - { - require_once(dirname(__FILE__).'/artichow/Graph.class.php'); - $this->_graph = new Graph(); - $this->_graph->setAntiAliasing(function_exists('imageantialias')); - parent::__construct($type); - } - else - { - $this->name = 'graphartichow'; - $this->tab = 'administration'; - $this->version = 1.0; - $this->author = 'PrestaShop'; - $this->need_instance = 0; - - Module::__construct(); - - $this->displayName = $this->l('Artichow'); - $this->description = $this->l('Artichow is a library that enables the display of simple picture-based graphs using PHP and GD.'); - } - } - - function install() - { - return (parent::install() AND $this->registerHook('GraphEngine')); - } - - public static function hookGraphEngine($params, $drawer) - { - return ''; - } - - private function drawLine($values) - { - require_once(dirname(__FILE__).'/artichow/LinePlot.class.php'); - // Single layer - if (!isset($values[0]) OR !is_array($values[0])) - { - $this->_plot = new LinePlot(array_values($values)); - $this->_plot->setFillGradient(new LinearGradient(new Color(255, 246, 211, 20), new Color(240, 225, 160, 50), 90)); - $this->_plot->setColor(new Color(80, 50, 0, 0)); - } - // Multiple layers - else - { - $tabColors = array(new Color(120, 120, 30, 10), new Color(66, 127, 195, 10), new Color(195, 65, 60, 10), new Color(85, 163, 57, 10), new Color(255, 35, 152, 10)); - $tabFilledColors = array(new Color(120, 120, 30, 90), new Color(66, 127, 195, 90), new Color(195, 65, 60, 90), new Color(85, 163, 57, 90), new Color(255, 35, 152, 90)); - - $this->_group = new PlotGroup; - $i = 0; - foreach ($values as $val) - { - $this->_plot[$i] = new LinePlot(array_values($val)); - $this->_plot[$i]->setColor($tabColors[$i % 5]); - $this->_plot[$i]->setFillColor($tabFilledColors[$i % 5]); - $this->_group->add($this->_plot[$i]); - $i++; - } - } - } - - private function drawColumn($values) - { - require_once(dirname(__FILE__).'/artichow/BarPlot.class.php'); - - if (!is_array($values[0])) //simpleline - { - $this->_plot = new BarPlot(array_values($values)); - $this->_plot->label->set(array_values($values)); - $this->_plot->label->setColor(new Color(110, 110, 110)); - $this->_plot->label->move(0, -7); - $this->_plot->label->setAlign(Positionable::CENTER, NULL); - $this->_plot->setBarGradient(new LinearGradient(new Color(254, 255, 216), new Color(233, 231, 218), 90)); - $this->_plot->barBorder->setColor(new Color(115, 115, 150)); - $this->_plot->barShadow->setSize(1); - $this->_plot->barShadow->setColor(new Color(215, 215, 215)); - $this->_plot->barShadow->setPosition(Shadow::RIGHT_TOP); - $this->_plot->barShadow->smooth(TRUE); - } - else - { - $tabColors = array(new Color(120, 120, 30, 10), new Color(66, 127, 195, 10), new Color(195, 65, 60, 10), new Color(85, 163, 57, 10), new Color(255, 35, 152, 10)); - $tabFilledColors = array(new Color(120, 120, 30, 90), new Color(66, 127, 195, 90), new Color(195, 65, 60, 90), new Color(85, 163, 57, 90), new Color(255, 35, 152, 90)); - - $this->_group = new PlotGroup; - $i = 0; - foreach ($values as $val) - { - $this->_plot[$i] = new BarPlot(array_values($val)); - $this->_plot[$i]->label->set(array_values($val)); - $this->_plot[$i]->label->setColor($tabColors[$i % 5]); - $this->_plot[$i]->label->move(0, -7); - $this->_plot[$i]->label->setAlign(Positionable::CENTER, NULL); - $this->_plot[$i]->setBarColor($tabFilledColors[$i % 5]); - $this->_plot[$i]->barBorder->setColor($tabColors[$i % 5]); - $this->_plot[$i]->barShadow->setSize(1); - $this->_plot[$i]->barShadow->setColor(new Color(215, 215, 215)); - $this->_plot[$i]->barShadow->setPosition(Shadow::RIGHT_TOP); - $this->_plot[$i]->barShadow->smooth(TRUE); - $this->_group->add($this->_plot[$i]); - $i++; - } - } - } - - private function setErrorImage() - { - require_once(dirname(__FILE__).'/artichow/BarPlot.class.php'); - - $this->_plot = new BarPlot(array(0)); - $this->_type = 'column'; - $this->_plot->setSize(0, 0); - $this->_plot->setCenter(-20, -20); - } - - private function drawPie($values) - { - require_once(dirname(__FILE__).'/artichow/Pie.class.php'); - $exploder = array(); - $counter = sizeof($values); - - $this->_plot = new Pie(array_values($values), Pie::COLORED); - $this->_plot->set3D(10); - $this->_plot->setLabelPrecision(2); - $this->_plot->setLabelPosition(2); - $this->_plot->legend->shadow->setSize(1); - $this->_plot->legend->setModel(Legend::MODEL_BOTTOM); - $this->_plot->legend->setPosition(NULL, 0.87); - $this->_plot->setSize(0.90, 0.90); - for ($i = 0; $i < $counter; $i++) - $exploder[$i] = 8; - $this->_plot->explode($exploder); - } - - private function drawLineColumn($y_max) - { - if ($this->_group == NULL) - { - $this->_plot->setYMax($y_max); - $this->_plot->setSize(1, 1); - $this->_plot->setCenter(0.508, 0.53); - $this->_plot->setPadding(28, 10, NULL, 40); - } - else - { - foreach ($this->_plot as $plot) - $plot->setYMax($y_max); - $this->_group->setYMax($y_max); - $this->_group->setSize(1, 1); - $this->_group->setCenter(0.508, 0.53); - $this->_group->setPadding(28, 10, NULL, 40); - } - } - - public function createValues($values) - { - // $this->_values = array(); - // if (!isset($this->_values[0]) || !is_array($this->_values[0])) - // foreach ($values as $value) - // $this->_values[] = $value; - // else - // { - // foreach ($values as $i => $layerValue) - // { - // $this->_values[$i] = array(); - // foreach ($values[$i] as $value) - // $this->_values[$i][] = $value; - // } - // } - // $values = $this->_values; - - if (sizeof($values) == 0) - { - $this->setErrorImage(); - return; - } - switch ($this->_type) - { - case 'pie': - $this->drawPie($values); - break; - case 'line': - $this->drawLine($values); - $this->drawLineColumn($this->getYMax($values)); - break; - case 'column': - default: - $this->drawColumn($values); - $this->drawLineColumn($this->getYMax($values)); - break; - } - } - - public function setSize($width, $height) - { - if (Validate::isUnsignedInt($width) AND Validate::isUnsignedInt($height)) - $this->_graph->setSize($width, $height); - } - - public function setLegend($legend) - { - $this->_legend = array(); - if (!isset($this->_legend[0]) || !is_array($this->_legend[0])) - foreach ($legend as $label) - $this->_legend[] = $label; - else - { - foreach ($legend as $i => $layerlabel) - { - $this->_legend[$i] = array(); - foreach ($legend[$i] as $label) - $this->_legend[$i][] = $label; - } - } - $legend = $this->_legend; - - if ($this->_plot == NULL && $this->_group == NULL) - return; - foreach ($legend as $k => $val) - $legend[$k] = html_entity_decode(htmlentities(html_entity_decode($val), ENT_NOQUOTES, 'utf-8')); - switch ($this->_type) - { - case 'pie': - $this->_plot->setLegend($legend); - break; - case 'column': - default: - if ($this->_group == NULL) - { - if (isset($this->_plot->xAxis, $this->_plot->yAxis, $this->_plot->grid)) - { - $this->_plot->xAxis->setLabelText($legend); - $this->_plot->xAxis->label->setFont(new Tuffy(7)); - $this->_plot->yAxis->setLabelPrecision(0); - $this->_plot->grid->setType(Line::DASHED); - } - } - else - { - if (isset($this->_group->axis->bottom, $this->_group->axis->left, $this->_group->grid)) - { - $this->_group->axis->bottom->setLabelText($legend); - $this->_group->axis->bottom->label->setFont(new Tuffy(7)); - $this->_group->axis->left->setLabelPrecision(0); - $this->_group->grid->setType(Line::DASHED); - } - } - break; - } - } - - public function setTitles($titles) - { - if ($this->_plot == NULL && $this->_group == NULL) - return; - if (isset($titles['main'])) - { - if (is_array($titles['main']) && $this->_group != NULL) - { - $i = 0; - foreach ($titles['main'] as $key => $val) - if ($key != 0) - $this->_group->legend->add($this->_plot[$i++], $val, ($this->_type == 'line') ? Legend::LINE : Legend::BACKGROUND); - $titles['main'] = $titles['main'][0]; - } - $this->_graph->title->set($titles['main']); - $this->_graph->title->setFont(new Tuffy(10)); - $this->_graph->title->setAlign(Positionable::CENTER, Positionable::MIDDLE); - } - if (isset($titles['x'])) - { - if ($this->_plot != NULL && !is_array($this->_plot)) - { - $this->_plot->xAxis->title->set($titles['x']); - $this->_plot->xAxis->title->setFont(new Tuffy(10)); - $this->_plot->xAxis->setTitleAlignment(Label::RIGHT); - } - else - { - $this->_group->axis->bottom->title->set($titles['x']); - $this->_group->axis->bottom->title->setFont(new Tuffy(10)); - $this->_group->axis->bottom->setTitleAlignment(Label::RIGHT); - } - } - if (isset($titles['y'])) - { - if ($this->_plot != NULL && !is_array($this->_plot)) - { - $this->_plot->yAxis->title->set($titles['y']); - $this->_plot->yAxis->title->setFont(new Tuffy(10)); - $this->_plot->yAxis->setTitleAlignment(Label::TOP); - } - else - { - $this->_group->axis->left->title->set($titles['y']); - $this->_group->axis->left->title->setFont(new Tuffy(10)); - $this->_group->axis->left->setTitleAlignment(Label::TOP); - } - } - } - - public function draw() - { - if ($this->_plot != NULL && !is_array($this->_plot)) - $this->_graph->add($this->_plot); - if ($this->_group != NULL) - $this->_graph->add($this->_group); - $this->_graph->draw(); - } - - private function getYMax($values) - { - $max = 0; - if (isset($values[0]) && is_array($values[0])) - { - foreach ($values as $val) - foreach ($val as $k => $nb) - if ($nb > $max) - $max = $nb; - } - else - { - foreach ($values as $k => $val) - if ($val > $max) - $max = $val; - } - return ($max < 4) ? 4 : (round($max, 0)); - } -} - - diff --git a/modules/graphartichow/index.php b/modules/graphartichow/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphartichow/logo.gif b/modules/graphartichow/logo.gif deleted file mode 100644 index ed937ee8bf2c8b003c0df38bf84728140680d002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmZ?wbhEHb6krfw_|CvkCni=WE?zGo(I6?=ASKl(Bhw@++axE~EHB@psMw;U)T*r9 zs-n`Ss@krm)~>GJuA$YTsoANe)vc%3YiQVOWYlM3(r02i(aLIyy?vi^;8aJa=`JqQ zJw0c*yU+IVnd9p_*WZ6`K)~Y2$YqI%OOsNTr>3n)PF`PBvaYCfV@b)T($X!})%zw+ z+&^*h?%gjAPo8{e%9JBBW*nO{=fvE(N9Qj(xp3jR)vM31S#x&H`jcz6T-m<;+MWY9 z4;;98@W{=hr|zFRb>jG|6DMAuI`!uC>33((zBzmL-G!46FI;$k>C*cLCr>^&d-ma_ zOHYC5%9SVAufMo;>*d|M&mTN}^YG!@M~~h-fBp8wo3}6CK79E3(W9?Vo_u`q;^WJg zU*5j`^zQBFcke#Dd-wUxoA2-5efjw6)#vx`KYsl9>C>mrpFe;2@b$xoZy!E<|Mcnm zmyaL6eg6FI%a^ZTzkd1h{Tm2;|MKO>k8j_8e*gaC$B&;sfBpi2-@ktS0Ro0mFla(R z@h1x-1H*p?9gvGad4hrCJ;PIup5kM?-OPL`djvI(^Eg|wG)gcqG#ub-OO@Ma=*;BM z%)wx@Mev8~a~z(&;px)cGh;7vYoo7p z`g@s1h6jyPOe#J+Fo;U@NicQv30T7@(a+VT&GgvtkZL;vgX*Ox3nw33Hp!;)kV<6n zQKkm&&~GL?Z5ExIXXA41L|Nd(_PN3gE=+3xw((;JHKs&Z%l!Re zORcBcE`M8u@lD<^Ht~8E#hE06&Hsc;nE|`!4E-XfYk$$>;XlP+dLpr$eYvIH|83j) znlh1lO_Jn|C5??JuB=8;O)YFT8KO1|zN-SSJp2Wulr#q8*D*MG1DzvLs2Q!7OT-UF zfAi=N?PJ^t0O8#I^}n}?;&-d}K8VuKZH2C+pbYdu3lG7Vio*B(AA##|q3zKx;`#G2 z)cb7MQtE(H7I1+;oaqiBqbh%lK7HVE+Aq5j08&SAL)cq)PoVD5L*UdDQt!V5wZEHS z3Fb0EO{3%oKLOWOi9bJbKc0MR0um4CWb4*)JNDER!7g(6N9Sc+j!s8nC%#%q3p0g^ z#08aqe#1!3&fS4PFbJi;2dVS_2A9<#xZI?hv=|0>xA2?VPG zxX17H`+s)&MW(9|0Qbv=s&#Hzer)}|{m=$4!x#@+ie;u)oG%i2Agh^+84MPGu|SB6 zCXm5vDtaeVINZ1%qSO7D@8~n@^8Cw(Kx!-~_F+X$YpFhv;$nDv_F zfvka>)^iKcTA=6ePt2mcNWz|tHE2`R)AV=?iE4V_aJkoKlcjq9y_=A|+(!iC$#UBq zmoFeUL%`x~ki|Si3WLbc7Zx6lkaa~<*nC$RB%56C4j%C3Lm+&u+D`wn9G4eVVtnj`_V)O>5OiIaP4^LnCTq)BYOm{dDY!(p-)Dwn9I__ zaleHFqNSN-Ba0=oei4y~3o;R7{8JTcy{m{Eo@S<-almflxO#6z1+qf}mTPYp`_D)~ zVdBhmM6Mh#OPM)~l~%T7I-Ny>uLy=D*E8J=fXK0WA~_(cl%4`3AHRft!-`(6xSAf| zu`~c$mZkz>W8SlzCo%w>JHrTNr~f=wvEjI-+ZazNXh@XM)E^CtXw1UJRcRT{O zv&5=H{K|x7R$ugW{QSsH6U1|E-3SzUsMLvOKVa_nk@dY3F=Uc6L+aS27}G7}21bDf z+>g^GGtHapSQtbodh(7yTul$-;PxQG{U`A1#|NqVRY0SjvBqxk;_nxFkZ611XeJU0 z(W+Fw}Z^szEoYC_tC(Cd)C{%x?1+A59r8Qp)QYfffsalG^4yJsVWNPkETG)3PDuuB#)PZ(awH_FZDC^ubjhB{) z=AdF}U@K|L;d8R#jb8d9N^)(X zgUO;tGZOMYs6L~_cUVk$551p6XQ77cLuG=DX=`BB)OVneD;nG zr#WvhAjC+pW?jrWalx4)A3ho?aU(~vWKMDBP7kLGc|>O2JJ&_I`BMV4TzaXuv$*j0 be*p#nDITKEVI&pv00000NkvXXu0mjfK3L8y diff --git a/modules/graphartichow/translations/index.php b/modules/graphartichow/translations/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphartichow/translations/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphgooglechart/config.xml b/modules/graphgooglechart/config.xml deleted file mode 100755 index b8e82ca3a..000000000 --- a/modules/graphgooglechart/config.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - graphgooglechart - - - - - - 0 - 0 - - \ No newline at end of file diff --git a/modules/graphgooglechart/graphgooglechart.php b/modules/graphgooglechart/graphgooglechart.php deleted file mode 100644 index 738b8b44d..000000000 --- a/modules/graphgooglechart/graphgooglechart.php +++ /dev/null @@ -1,247 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -if (!defined('_PS_VERSION_')) - exit; - -class GraphGoogleChart extends ModuleGraphEngine -{ - private $_width; - private $_height; - private $_values; - private $_legend; - private $_titles; - - function __construct($type = null) - { - if ($type != null) - { - parent::__construct($type); - } - else - { - $this->name = 'graphgooglechart'; - $this->tab = 'administration'; - $this->version = 1.0; - $this->author = 'PrestaShop'; - $this->need_instance = 0; - - Module::__construct(); - - $this->displayName = $this->l('Google Chart'); - $this->description = $this->l('The Google Chart API lets you dynamically generate charts.'); - } - } - - function install() - { - return (parent::install() AND $this->registerHook('GraphEngine')); - } - - public static function hookGraphEngine($params, $drawer) - { - return ''; - } - - - public function createValues($values) - { - $this->_values = $values; - } - - public function setSize($width, $height) - { - $this->_width = $width; - $this->_height = $height; - } - - public function setLegend($legend) - { - $this->_legend = $legend; - } - - public function setTitles($titles) - { - $this->_titles = $titles; - } - - private function getChbh($sizeof_values) - { - $chbh = 12; - - if ($sizeof_values < 25) - $chbh += 4; - if ($sizeof_values < 20) - $chbh += 4; - if ($sizeof_values < 15) - $chbh += 8; - if ($sizeof_values < 10) - $chbh += 14; - return ($chbh); - } - - private function drawColumn($max_y) - { - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - $sizeof_values = sizeof($this->_values); - else - $sizeof_values = sizeof($this->_values[0]); - $url = 'bvs&chxt=x,y&chxr=1,0,'.$max_y.'&chbh='.$this->getChbh($sizeof_values).'&chg=0,12.5&chxl=0:|'; - for ($i = 0; $i < $sizeof_values; $i++) - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - { - if (isset($this->_values[$i])) - $this->_values[$i] = ($this->_values[$i] * 100) / $max_y; - else - $this->_values[$i] = 0; - } - else - foreach ($this->_values as $k => $value) - { - if (!isset($this->_values[$k][$i])) - $this->_values[$k][$i] = 0; - $this->_values[$k][$i] = ($this->_values[$k][$i] * 100) / $max_y; - } - return ($url); - } - - private function drawLine($max_y) - { - return ('lc'./*&chxt=x,y*/'&chbh='.$this->getChbh(sizeof($this->_values)).'&chg=0,12.5&chxl=0:|'); - } - - private function drawPie() - { - return ('p3&chl='); - } - - public function draw() - { - $url = 'http://chart.apis.google.com/chart?cht='; - $legend = ''; - $values = ''; - $scale = ''; - - switch ($this->_type) - { - case 'pie': - $url .= $this->drawPie(); - break; - case 'line': - $url .= $this->drawLine($this->getYMax($this->_values)); - case 'column': - default: - $url .= $this->drawColumn($this->getYMax($this->_values)); - break; - } - - foreach ($this->_legend as $label) - $legend .= $label.'|'; - $url .= htmlentities(urlencode(html_entity_decode(rtrim($legend, '|')))); - - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - { - foreach ($this->_values as $label) - $values .= ($label ? $label : '0').','; - $url .= '&chd=t:'.urlencode(rtrim($values, ',')); - } - else - { - $i = 0; - $url .= '&chd=t:'; - foreach ($this->_values as $val) - { - $values = ''; - if ($i++ > 0) - $url .= '|'; - foreach ($val as $label) - $values .= ($label ? $label : '0').','; - $url .= urlencode(rtrim($values, ',')); - } - } - - $url .= '&chs='.(int)($this->_width).'x'.(int)($this->_height); - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - $url .= (isset($this->_titles['main'])) ? '&chtt='.urlencode($this->_titles['main']) : ''; - else - { - $url .= $this->getStringColor(sizeof($this->_values)); - $i = 0; - foreach ($this->_titles['main'] as $val) - { - if ($i == 0 && !empty($this->_titles['main'])) - $url .= '&chtt='.urlencode($this->_titles['main'][$i]); - else if ($i == 1) - $url .= '&chdl='; - else if ($i > 1) - $url .= '|'; - if ($i != 0) - $url .= urlencode($this->_titles['main'][$i]); - $i++; - } - } - header("Content-type: image/png"); - readfile($url); - } - - private function getYMax($values) - { - $max = 0; - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - { - foreach ($values as $k => $val) - if ($val > $max) - $max = $val; - } - else - { - foreach ($values as $value) - foreach ($value as $val) - if ($val > $max) - $max = $val; - } - return ($max < 4) ? 4 : (round($max, 0)); - } - - private function getStringColor($nb_colors) - { - $tabColors = array('ffb649', '427fc3', 'ff0000', '55a339', 'ff2398'); - $color = ''; - if ($nb_colors > 1) - { - $color = '&chco='; - for ($i = 0; $i < $nb_colors; $i++) - { - if ($i > 0) - $color .= ','; - $color .= $tabColors[$i % 5]; - } - } - return $color; - } -} - - diff --git a/modules/graphgooglechart/index.php b/modules/graphgooglechart/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphgooglechart/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphgooglechart/logo.gif b/modules/graphgooglechart/logo.gif deleted file mode 100644 index 4f5d64543948d757aff4bd67d43500f25a80b423..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmb`Gu}hW#5XLVkRLamL{K6rJ!oeXrgu=k4N?Jn9sR#>hhzJYEAQzQ_Xp=4{p&?y_ zAQ5aZLkPJ+2cz8jACf4r>v!+p(80(1-FJ7-J57ewjpX-~Y#u!MM)2GJ3l%XD7m3U9-2aTgEqtkF;j zlW>WUD5jDsX_77(&@SMD28&_3v-VV&s;h=-)><+%HCGF@EEW{q)LlK)vq;e!rr{c) zk#J;G(==T(G}#Jkz#t7vXi;M^*g%8DaF(FT2{#L~EPbpcb2kt3EV;0t7;X_3iF!!U zYw4C@i9Gy(Cezq~en_AY)__48mbAiy#b5&sR+e*BCMUu@%SiOGmMp>}@fEqSpy(N% z_=wXO0594x8nsx7AJAkPJK%(16v7%XNHYm7c(533ptDX?-IU3R&^OBXX z&AqGGoUm+eu2Q{?(dByMU5z$&)Daqmh18I)n>0KMxPj(%;7XW>CRX+RK6*r?O9tw# zuK$Fz&r5dnu62$N-r8I3yxo6(esOqtbZLKc=EmS`o;(~mc(p(LEXN)%ZcgsakDX~f z`q@9Z&^O%E_Woh}eT$j7)o&la?{=Mddb#yvw>9u@MJ$Ep-()uuVXZ=*? I=`I=i2V69vdH?_b diff --git a/modules/graphgooglechart/logo.png b/modules/graphgooglechart/logo.png deleted file mode 100755 index 6d14c7270e3e5bbc60fbcd75acd3f29f86b98a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmV;)2R8VLP)=+3xw((;JHKs&Z%l!Re zORcBcE`M8u@lD<^Ht~8E#hE06&Hsc;nE|`!4E-XfYk$$>;XlP+dLpr$eYvIH|83j) znlh1lO_Jn|C5??JuB=8;O)YFT8KO1|zN-SSJp2Wulr#q8*D*MG1DzvLs2Q!7OT-UF zfAi=N?PJ^t0O8#I^}n}?;&-d}K8VuKZH2C+pbYdu3lG7Vio*B(AA##|q3zKx;`#G2 z)cb7MQtE(H7I1+;oaqiBqbh%lK7HVE+Aq5j08&SAL)cq)PoVD5L*UdDQt!V5wZEHS z3Fb0EO{3%oKLOWOi9bJbKc0MR0um4CWb4*)JNDER!7g(6N9Sc+j!s8nC%#%q3p0g^ z#08aqe#1!3&fS4PFbJi;2dVS_2A9<#xZI?hv=|0>xA2?VPG zxX17H`+s)&MW(9|0Qbv=s&#Hzer)}|{m=$4!x#@+ie;u)oG%i2Agh^+84MPGu|SB6 zCXm5vDtaeVINZ1%qSO7D@8~n@^8Cw(Kx!-~_F+X$YpFhv;$nDv_F zfvka>)^iKcTA=6ePt2mcNWz|tHE2`R)AV=?iE4V_aJkoKlcjq9y_=A|+(!iC$#UBq zmoFeUL%`x~ki|Si3WLbc7Zx6lkaa~<*nC$RB%56C4j%C3Lm+&u+D`wn9G4eVVtnj`_V)O>5OiIaP4^LnCTq)BYOm{dDY!(p-)Dwn9I__ zaleHFqNSN-Ba0=oei4y~3o;R7{8JTcy{m{Eo@S<-almflxO#6z1+qf}mTPYp`_D)~ zVdBhmM6Mh#OPM)~l~%T7I-Ny>uLy=D*E8J=fXK0WA~_(cl%4`3AHRft!-`(6xSAf| zu`~c$mZkz>W8SlzCo%w>JHrTNr~f=wvEjI-+ZazNXh@XM)E^CtXw1UJRcRT{O zv&5=H{K|x7R$ugW{QSsH6U1|E-3SzUsMLvOKVa_nk@dY3F=Uc6L+aS27}G7}21bDf z+>g^GGtHapSQtbodh(7yTul$-;PxQG{U`A1#|NqVRY0SjvBqxk;_nxFkZ611XeJU0 z(W+Fw}Z^szEoYC_tC(Cd)C{%x?1+A59r8Qp)QYfffsalG^4yJsVWNPkETG)3PDuuB#)PZ(awH_FZDC^ubjhB{) z=AdF}U@K|L;d8R#jb8d9N^)(X zgUO;tGZOMYs6L~_cUVk$551p6XQ77cLuG=DX=`BB)OVneD;nG zr#WvhAjC+pW?jrWalx4)A3ho?aU(~vWKMDBP7kLGc|>O2JJ&_I`BMV4TzaXuv$*j0 be*p#nDITKEVI&pv00000NkvXXu0mjfK3L8y diff --git a/modules/graphgooglechart/translations/index.php b/modules/graphgooglechart/translations/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphgooglechart/translations/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphvisifire/config.xml b/modules/graphvisifire/config.xml deleted file mode 100755 index a03c9923b..000000000 --- a/modules/graphvisifire/config.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - graphvisifire - - - - - - 0 - 0 - - \ No newline at end of file diff --git a/modules/graphvisifire/graphvisifire.php b/modules/graphvisifire/graphvisifire.php deleted file mode 100644 index c6fcb4557..000000000 --- a/modules/graphvisifire/graphvisifire.php +++ /dev/null @@ -1,186 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -if (!defined('_PS_VERSION_')) - exit; - -class GraphVisifire extends ModuleGraphEngine -{ - private $_xml; - private $_values = NULL; - private $_legend = NULL; - private $_titles = NULL; - - function __construct($type = null) - { - if ($type != null) - { - $this->_xml = '_xml .= ' Theme="Theme1" View3D="True"'; - else - $this->_xml .= ' Theme="Theme2" ColorSet="Visifire2" UniqueColors="True"'; - $this->_xml .= '>'; - parent::__construct($type); - } - else - { - $this->name = 'graphvisifire'; - $this->tab = 'administration'; - $this->version = 1.0; - $this->author = 'PrestaShop'; - $this->need_instance = 0; - - Module::__construct(); - - $this->displayName = $this->l('Visifire'); - $this->description = $this->l('Visifire is a set of open-source data visualization components -- Powered by Microsoft Silverlight 2 (beta 2).'); - } - } - - function install() - { - return (parent::install() AND $this->registerHook('GraphEngine')); - } - - public static function hookGraphEngine($params, $drawer) - { - static $divid = 1; - return ' -
- -
'; - } - - public function createValues($values) - { - $this->_values = array(); - if (!is_array($values[array_rand($values)])) - foreach ($values as $value) - $this->_values[] = $value; - else - { - foreach ($values as $i => $layerValue) - { - $this->_values[$i] = array(); - foreach ($layerValue as $value) - $this->_values[$i][] = $value; - } - } - } - - public function setSize($width, $height) - { - // Unavailable - } - - public function setLegend($legend) - { - $this->_legend = array(); - if (!is_array($legend[array_rand($legend)])) - foreach ($legend as $label) - $this->_legend[] = $label; - else - { - foreach ($legend as $i => $layerlabel) - { - $this->_legend[$i] = array(); - foreach ($layerlabel as $label) - $this->_legend[$i][] = $label; - } - } - } - - public function setTitles($titles) - { - $this->_titles = $titles; - if (isset($titles['main']) && !is_array($titles['main'])) - $this->_xml .= ''; - if (is_array($titles['main']) && isset($titles['main'][0])) - $this->_xml .= ''; - if (isset($titles['x'])) - $this->_xml .= ''; - if (isset($titles['y'])) - $this->_xml .= ''; - } - - public function draw() - { - header('content-type: text/xml'); - if ($this->_values != NULL && $this->_legend != NULL) - { - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - $size = sizeof($this->_values); - else - $size = sizeof($this->_values[0]); - if ($size == sizeof($this->_legend)) - { - if (!is_array($this->_values[array_rand($this->_values)])) - { - $this->_xml .= ''; - for ($i = 0; $i < $size; $i++) - { - $this->_xml .= '_xml .= 'AxisLabel=" '.str_replace('<', '<', str_replace('>', '>', str_replace('&', '&', str_replace('"', "'", $this->_legend[$i])))).'" '; - $this->_xml .= 'YValue="'.$this->_values[$i].'"'; - if ($this->_type == 'pie') - $this->_xml .= ' ExplodeOffset="0.2"'; - $this->_xml .= '/>'; - } - $this->_xml .= ''; - } - else - { - foreach ($this->_values as $layer => $values) - { - $this->_xml .= ''; - foreach ($values as $i => $value) - { - $this->_xml .= '_xml .= 'AxisLabel=" '.str_replace('<', '<', str_replace('>', '>', str_replace('&', '&', str_replace('"', "'", $this->_legend[$i])))).'" '; - $this->_xml .= 'YValue="'.$value.'"'; - if ($this->_type == 'pie') - $this->_xml .= ' ExplodeOffset="0.2"'; - $this->_xml .= '/>'; - } - $this->_xml .= ''; - } - } - } - } - $this->_xml .= '
'; - echo $this->_xml; - exit(1); - } -} - - diff --git a/modules/graphvisifire/index.php b/modules/graphvisifire/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphvisifire/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphvisifire/logo.gif b/modules/graphvisifire/logo.gif deleted file mode 100644 index df365f2d3609317db7852d0eede3a0a19d14cdd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmeH`>r0bS9DvX3a=okttD$9CDavxOOxV!OKFBJaVkQ+~Udlp<9F~stt-@K#OewV# zyFglkORPjO3n|+)l&mPRGDV!1WrQ@RyPWf0&ae72f}X$N;ejVLEoFD&DFsrX074MO zfCf=b2xwW*$siF?tpZXI=;bthBh3tl!w8N_;g}S15#%8_i=Ze7j1n*-u`oe2>ZmD- znzmDOl#r_z^7O))RQ^&iSP+ymP$q?I4Ad~tz(8X#)UAc4AgEWsEhW7kL95lYMonu~ z&?W&}Fztw>ZSnNQF8V5ovzYkW3w%SV*qtHv9~T}L3T;Jve+eB)paaQtXrDN6LU0(x zvCHE4Mee4RyJIEyZjifmTx&IHxs7`|aL;4h*GcRhWT=z>*vyZ&^W)FC$v$DBSD1Z? z-`nv!2mUrhCWggDM__I$FgH!+Mv3bSS(*;GoL=`YzuV1uX1S#Weq|o7xOwdMFME8; z%RZma@Anh$5(#)Y;v+bKF(!m?9Ebk%uN8<}|KL%ie$W~opN0f_xaxU zJ!gtS_<>fIA6VjWI4f=tTZpZI@wLEX-v!6XdTe~diX^}QS0PS< zg|JwK@>!>5ku4|R2UnFWBBS+Vo5TL0ts-ET)ezY z=Vb*ptdXeYDpZar0i&Wg0ZB!@LCoo^D=1WNWR;rNWx@(Z(uq|hh)6bGX&K1l{eP%J z@dm9yh43GK-zuyL+oOU>LRf>OswG(C5}l2yRCJaa7Ndwd3_((ss~93fP(&j`Q~)c~ z1K^1za-}hTiRba?T%`sTDSZ^I_R^o7` ziCi`_On2v7(cfgzBFDugjo~;qpW{^Lf74&VZ2qmFZq=F-`-;!oRrVh+`+{hXj-AX~ z^|at4TPm{=eQ?#^A+si8S3+pfcf5vw?Myy8aB_&PPmG zYcFjq>;9~-HN}15>$08WtH8n<{Gr_zy^#y;XH6~Q<%gK{=3T-wZFQzL%><{?%Qlv? zr?#%ppHRP-Q%ZOtfa38ZegK$hKMt=w)>7D{o+*4N`gfnE--B}s$xSHe8d=f5?Q?sJ zx>D0$$n(YE%42xDk+W{Htc`&gCXauxG|8#Z?`t|$w#fk2?az(4RGhHRHUx}pjUD2K z7y30kH47H4`NvbI9#_|%O%^TtMC@xx!Ign?W0ltgMLqbLa_Q1QxZ{?*N)9Qw)YmVJK*_Z z(dXhM`CfV)aJ1QuXaITZ;h=X!+17jGHpi8Ghh}5i(MP$Xl+N*?Z5@rw z+T2B}<44Wg8A4gR8)#dQ+U0# zxLZ%y^*Es1)=2>BOV**_leNQlI}Nuvt%dvY+RrAWWya6vAbAJq7u3Q`B^kyr-f7Eu|mm zho4W{$XEi#LCfIAy$0?<_QSf1kK!t=)9%%E2os1qY%2WPDA(`f-^H2J%fx(!V8Zwp N=5qM#Q~vRJ{{z{(KR5sY diff --git a/modules/graphvisifire/translations/index.php b/modules/graphvisifire/translations/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphvisifire/translations/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphvisifire/visifire/Visifire.js b/modules/graphvisifire/visifire/Visifire.js deleted file mode 100644 index 6cf9d76c1..000000000 --- a/modules/graphvisifire/visifire/Visifire.js +++ /dev/null @@ -1,353 +0,0 @@ -/* - Copyright (C) 2008 Webyog Softworks Private Limited - - This file is a part of Visifire Charts. - - Visifire is a free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - You should have received a copy of the GNU General Public License - along with Visifire Charts. If not, see . - - If GPL is not suitable for your products or company, Webyog provides Visifire - under a flexible commercial license designed to meet your specific usage and - distribution requirements. If you have already obtained a commercial license - from Webyog, you can use this file under those license terms. -*/ - -if(!window.Visifire) -{ - // Visifire class - window.Visifire = function(pXapPath, pId, pWidth, pHeight, pBackground) - { - this.id = null; - this.logLevel = 1; // Determines whether to log or not. - this.xapPath = "Visifire.xap"; // Default is taken as Visifire.xap in the same directory. - this.targetElement = null; - this.dataXml = null; - this.dataUri = null; - this.listeners = null; - this.elements = new Array("Chart", "DataPoint", "Title", "AxisX", "AxisY", "Legend"); - this.events = new Array("MouseLeftButtonDown", "MouseLeftButtonUp", "MouseMove", "MouseEnter", "MouseLeave"); - this.windowless = false; - this.width = null; - this.height = null; - this.background = null; - - // pId not present - if(Number(pId)) - { - if(pHeight) - this.background = pHeight; - - pHeight = pWidth; - pWidth = pId; - } - else // pId present - { - this.id = pId; - - if(pBackground) - this.background = pBackground; - } - - if(pXapPath) - this.xapPath = pXapPath; - - if(pWidth) - this.width = pWidth; - - if(pHeight) - this.height = pHeight; - - this._uThisObject = this; - - this.index = ++Visifire._slCount; - } - - window.Visifire._slCount = 0; - - Visifire.prototype.setWindowlessState = function(pWindowless) - { - if(pWindowless != null) - { - this.windowless = Boolean(pWindowless); - } - } - - Visifire.prototype._getSlControl = function () - { - var _uThisObject = this; - if(_uThisObject.id != null) - { - var slControl = document.getElementById(_uThisObject.id); - return slControl; - } - - return null; - } - - Visifire.prototype.isLoaded = function() - { - var slControl = this._getSlControl(); - try - { - if(slControl.Content.wrapper != null) - return true; - } - catch(ex) - { - return false; - } - } - Visifire.prototype.isDataLoaded = function() - { - var slControl = this._getSlControl(); - - return slControl.Content.wrapper.IsDataLoaded; - } - Visifire.prototype.setSize = function(pWidth,pHeight) - { - var slControl = this._getSlControl(); - if(slControl != null) - { - slControl.width = pWidth; - slControl.height = pHeight; - slControl.Content.wrapper.Resize(pWidth,pHeight); - } - else - { - this.width = pWidth; - this.height = pHeight; - } - } - - Visifire.prototype.setDataXml = function(pDataXml) - { - var slControl = this._getSlControl(); - - if(slControl != null && this.dataXml != null) - { - slControl.Content.wrapper.AddDataXML(pDataXml); - } - - this.dataXml = pDataXml; - } - - - Visifire.prototype.setDataUri = function(pDataUri) - { - var slControl = this._getSlControl(); - - if(slControl != null && this.dataUri != null) - { - slControl.Content.wrapper.AddDataUri(pDataUri); - } - - this.dataUri = pDataUri; - } - - Visifire.prototype.setLogLevel = function(level) - { - if(level != null) - { - this.logLevel = level; - } - } - - Visifire.prototype._isString = function() - { - if (typeof arguments[0] == 'string') return true; - - if (typeof arguments[0] == 'object') - { - var criterion = arguments[0].constructor.toString().match(/string/i); - return (criterion != null); - } - - return false; - } - - Visifire.prototype._validateChartElement = function(pElement) - { - if(this.logLevel != 0) - { - for(var i = 0; i < this.elements.length; i++) - if(this.elements[i] == pElement) - return; - - alert('Error occurred while attaching event.\nUnknown element "' + pElement + '".'); - } - } - - Visifire.prototype._validateEvent = function(pEvent) - { - if(this.logLevel != 0) - { - for(var i = 0; i < this.events.length; i++) - if(this.events[i] == pEvent) - return; - - alert('Error occurred while attaching event.\nUnsupported event type "' + pEvent + '".'); - } - } - - Visifire.prototype.attachEvent = function(pElement, pEvent, pCallBack) - { - var _uThisObject = this; - - _uThisObject._validateChartElement(pElement); - _uThisObject._validateEvent(pEvent); - - if(pEvent && pElement && pCallBack) - { - if(_uThisObject.listeners == null) - _uThisObject.listeners = {}; - - if(_uThisObject.listeners[pEvent] == null) - _uThisObject.listeners[pEvent] = new Array(); - - if(!window["dispatchEvent" + _uThisObject.index]) - window["dispatchEvent" + _uThisObject.index] = function(args) - { - if(_uThisObject.listeners[args.Event] != null) - { - var listener = _uThisObject.listeners[args.Event]; - if(listener.length != 0) - { - for (var i = 0; i < listener.length; i++) - { - if ((listener[i].event == args.Event) && (listener[i].element == args.Element)) - { - args.ControlId = _uThisObject.id; - - if(_uThisObject._isString(listener[i].fire)) - eval(listener[i].fire + "(args)"); - else - listener[i].fire(args); - } - } - } - } - }; - - _uThisObject.listeners[pEvent].push({element: pElement, event: pEvent, fire: pCallBack}); - } - } - - Visifire.prototype._render = function(pTargetElement) - { - var _uThisObject = this; - var width; - var height; - - _uThisObject.targerElement = (typeof(pTargetElement) == "string")?document.getElementById(pTargetElement):pTargetElement; - - if(_uThisObject.width != null) - width = _uThisObject.width; - else if(_uThisObject.targerElement.offsetWidth != 0) - width = _uThisObject.targerElement.offsetWidth; - else - width = 500; - - if(_uThisObject.height != null) - height = _uThisObject.height; - else if(_uThisObject.targerElement.offsetHeight != 0) - height = _uThisObject.targerElement.offsetHeight; - else - height = 300; - - if(!_uThisObject.id) - { - _uThisObject.id = 'VisifireControl' + _uThisObject.index; - } - - var html = ''; - - html += '' - + '' - + ''; - html += '"; - html += '' - + '' - + '' - + '' - + 'Get Microsoft Silverlight' - + '
You need Microsoft Silverlight to view Visifire Charts.' - + '
You can install it by clicking on this link.' - + '
Please restart the browser after installation.' - + '
' - + '
'; - - this.targerElement.innerHTML = html; - } - - Visifire.prototype._reRender = function(pSlControl) - { - pSlControl.Content.wrapper.ReRenderChart(); - } - - Visifire.prototype.render = function(pTargetElement) - { - var slControl = this._getSlControl(); - - if(slControl == null) - { - this._render(pTargetElement); - } - else - { - this._reRender(slControl); - } - } -} \ No newline at end of file diff --git a/modules/graphvisifire/visifire/Visifire.xap b/modules/graphvisifire/visifire/Visifire.xap deleted file mode 100644 index 5896c90db40c37cf71afdef1a8aa7a752f6b51d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152606 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 diff --git a/modules/graphvisifire/visifire/index.php b/modules/graphvisifire/visifire/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphvisifire/visifire/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphxmlswfcharts/config.xml b/modules/graphxmlswfcharts/config.xml deleted file mode 100755 index 77bc65834..000000000 --- a/modules/graphxmlswfcharts/config.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - graphxmlswfcharts - - - - - - 0 - 0 - - \ No newline at end of file diff --git a/modules/graphxmlswfcharts/graphxmlswfcharts.php b/modules/graphxmlswfcharts/graphxmlswfcharts.php deleted file mode 100644 index 72e75bb9b..000000000 --- a/modules/graphxmlswfcharts/graphxmlswfcharts.php +++ /dev/null @@ -1,258 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -/** - * Statistics - * @category stats - * - * @author PrestaShop - * @copyright PrestaShop - * @license http://www.opensource.org/licenses/afl-3.0.php Open-source licence 3.0 - * @version 1.4 - */ - -if (!defined('_PS_VERSION_')) - exit; - -class GraphXmlSwfCharts extends ModuleGraphEngine -{ - private $_xml; - private $_values = NULL; - private $_legend = NULL; - private $_legend_more = ''; - private $_titles = ''; - - function __construct($type = null) - { - if ($type != null) - { - $this->_xml = ''; - parent::__construct($type); - } - else - { - $this->name = 'graphxmlswfcharts'; - $this->tab = 'administration'; - $this->version = 1.0; - $this->author = 'PrestaShop'; - $this->need_instance = 0; - - Module::__construct(); - - $this->displayName = $this->l('XML/SWF Charts'); - $this->description = $this->l('XML/SWF Charts are simple, yet powerful tools using Adobe Flash to create attractive web charts and graphs from dynamic data.'); - } - } - - function install() - { - return (parent::install() AND $this->registerHook('GraphEngine')); - } - - public static function hookGraphEngine($params, $drawer) - { - return ' - - - - - -

This content requires JavaScript.

- '; - } - - private function drawColumn() - { - $this->_xml .= ' - - - - - - '; - } - - private function drawLine() - { - $this->drawColumn(); - $this->_xml .= 'A3B6DAC3413C5A6C83CA9A515B775155AA26FF2398427FC3 - '; - } - - private function drawPie($counter) - { - $this->_xml .= ' - - - 427FC3 - C3413C - 5A6C83 - CA9A51 - 5B7751 - 55AA26 - FF2398 - - '; - for ($i = 0; $i < $counter; $i++) - $this->_xml .= '9'; - $this->_xml .= ''; - $this->_legend_more = ' bullet="circle"'; - } - - public function createValues($values) - { - $this->_values = $values; - $this->_xml .= ''.$this->_type.''; - - switch ($this->_type) - { - case 'pie': - $this->drawPie(sizeof($values)); - break; - case 'line': - $this->drawLine(); - break; - case 'column': - default: - $this->drawColumn(); - $this->_xml .= 'A3B6DAC3413C5A6C83CA9A515B775155AA26FF2398427FC3'; - break; - } - } - - public function setSize($width, $height) - { - if (isset($width) && !empty($width)) - $this->_width = $width; - else - $this->_width = 550; - if (isset($height) && !empty($height)) - $this->_height = $height; - else - $this->_height = 270; - } - - public function setLegend($legend) - { - $this->_legend = $legend; - $this->_xml .= '_legend_more.' layout="horizontal" font="arial" bold="true" size="13" color="000000" alpha="85" shadow="low" transition="dissolve" delay="0.5" duration="0.25" fill_color="D4D4D4" fill_alpha="0" line_color="D4D4D4" line_alpha="0" line_thickness="0" />'; - } - - public function setTitles($titles) - { - $this->_titles = $titles; - $this->_xml .= ''; - if (isset($titles['main'])) - { - if ($this->_type == 'pie') - $this->_xml .= ''.$titles['main'].''; - } - if ($this->_type != 'pie' AND isset($titles['x']) AND isset($titles['y'])) - { - $this->_xml .= ''.$titles['x'].''; - $this->_xml .= ''.$titles['y'].''; - } - $this->_xml .= ''; - } - - public function draw() - { - header('content-type: text/xml'); - - $this->_xml .= ''; - foreach ($this->_legend as $value) - $this->_xml .= ''.$value.''; - $this->_xml .= ''; - - if (!isset($this->_values[0]) || !is_array($this->_values[0])) - { - $this->_xml .= ''.$this->_titles['main'].''; - foreach ($this->_values as $value) - $this->_xml .= ''. (($value > 0) ? $value : -$value) .''; //si jamais la valeur est n�gative... logiquement ne devrait jamais arriver - $this->_xml .= ''; - } - else - { - $i = 1; - foreach ($this->_values as $value) - { - $this->_xml .= ''; - if (isset($this->_titles['main'][$i])) - $this->_xml .= ''.$this->_titles['main'][$i].''; - foreach ($value as $val) - $this->_xml .= ''.$val.''; - $this->_xml .= ''; - $i++; - } - } - $this->_xml .= ''; - $this->_xml .= ''; - echo $this->_xml; - } -} diff --git a/modules/graphxmlswfcharts/index.php b/modules/graphxmlswfcharts/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphxmlswfcharts/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphxmlswfcharts/logo.gif b/modules/graphxmlswfcharts/logo.gif deleted file mode 100644 index 98919ed13b42d04d5bdc75449116101d2e71e314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmZ?wbhEHb6krfw_|5<96#DSKMxH1r_cVndhOS> z>%VW@{B`%)-F*fB5j> z(GU~rxwXPS1P!BT*;lTWflMp5XIJf@!F!4(~C!ZWwLqNuo4gtkb=^O)v1nnzIt{o~<6BG}2iCOf?7$&uJ+^QE> ukXfMMv@m8@L!y>KK%!$`Ymu<}A9Do;CNX_wZIuX@Pp6gGjD>kP7_0&N66Jyb diff --git a/modules/graphxmlswfcharts/logo.png b/modules/graphxmlswfcharts/logo.png deleted file mode 100755 index c02f04f7e51b42e7abb38f2f1f85daa8b2a9fbef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmV+b1^@bqP)i(iWnsgu- z9(klPl9mJ3;up|*<_r!rHe%O~9dEX_x1T%E(6E>O4knu~=pzf$E(n6Aob#j_w$&D( zamFzVi^YOn)zy2x@920!uccH0L`3yoT~r;DY1mGir_yLNV$wc^{QP`WmY3(ByKrG7 z8Hktw($%mSjS@0UrU;0tii!eaA|Z&U0C29-%2HR(B6opv5t*4LJYzOTj-$G=vVa2I z77v6N6-`SRNL3gXZC@-YLEG80U{RMdL|3|r0+Zxv9+vB z(^wK(bk2~Nfn_m}G6Q7m_IfZ+8V<&&`~u5{Jk=;^9{As*Gy&)+;w3nJ7b$fBY$X8V zFcX1b%t!+OXOX~KH3&UPDLx-s%-C0yiNlsHFBi>?454n&Z=}C`F^>Ri0YJ@?I zY2bt1*!^DPsp8r_5CbxLj~@XBpO|9;V2rPY>kte^$dlu^Qf|f0Pd-D2V-&N;4}m*p z5m>y8QrsY1_5Pv=(InwU^G;NMdCk^EYBdf?%IU@cegL zaE7L*u)HkC%!FwZpn5NIs(Qe9$G6y0cMyR<2%bO?x5vk{O}LT46=UJ20PyG>p6cdm ze@Kr5Cy%1^)fy;w@6c}v_s1Ti;+G+Gk2&$yw#~2U0q9?|mP`mYr!>#ja~Y#wpMZ5; z0bMW|vMj^9c@xY<8^IiQt>MprY-}h5igQbV>o>p_{O~L+;MYu=U(cxo8^~vNv0R{j+Y0{!EZ@4l50000 -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphxmlswfcharts/xml_swf_charts/AC_RunActiveContent.js b/modules/graphxmlswfcharts/xml_swf_charts/AC_RunActiveContent.js deleted file mode 100644 index 39c294bbd..000000000 --- a/modules/graphxmlswfcharts/xml_swf_charts/AC_RunActiveContent.js +++ /dev/null @@ -1,292 +0,0 @@ -//v1.7 -// Flash Player Version Detection -// Detect Client Browser type -// Copyright 2005-2007 Adobe Systems Incorporated. All rights reserved. -var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; -var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; -var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; - -function ControlVersion() -{ - var version; - var axo; - var e; - - // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry - - try { - // version will be set for 7.X or greater players - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - version = axo.GetVariable("$version"); - } catch (e) { - } - - if (!version) - { - try { - // version will be set for 6.X players only - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - - // installed player is some revision of 6.0 - // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29, - // so we have to be careful. - - // default to the first public version - version = "WIN 6,0,21,0"; - - // throws if AllowScripAccess does not exist (introduced in 6.0r47) - axo.AllowScriptAccess = "always"; - - // safe to call for 6.0r47 or greater - version = axo.GetVariable("$version"); - - } catch (e) { - } - } - - if (!version) - { - try { - // version will be set for 4.X or 5.X player - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); - version = axo.GetVariable("$version"); - } catch (e) { - } - } - - if (!version) - { - try { - // version will be set for 3.X player - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); - version = "WIN 3,0,18,0"; - } catch (e) { - } - } - - if (!version) - { - try { - // version will be set for 2.X player - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - version = "WIN 2,0,0,11"; - } catch (e) { - version = -1; - } - } - - return version; -} - -// JavaScript helper required to detect Flash Player PlugIn version information -function GetSwfVer(){ - // NS/Opera version >= 3 check for Flash plugin in plugin array - var flashVer = -1; - - if (navigator.plugins != null && navigator.plugins.length > 0) { - if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { - var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; - var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; - var descArray = flashDescription.split(" "); - var tempArrayMajor = descArray[2].split("."); - var versionMajor = tempArrayMajor[0]; - var versionMinor = tempArrayMajor[1]; - var versionRevision = descArray[3]; - if (versionRevision == "") { - versionRevision = descArray[4]; - } - if (versionRevision[0] == "d") { - versionRevision = versionRevision.substring(1); - } else if (versionRevision[0] == "r") { - versionRevision = versionRevision.substring(1); - if (versionRevision.indexOf("d") > 0) { - versionRevision = versionRevision.substring(0, versionRevision.indexOf("d")); - } - } - var flashVer = versionMajor + "." + versionMinor + "." + versionRevision; - } - } - // MSN/WebTV 2.6 supports Flash 4 - else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; - // WebTV 2.5 supports Flash 3 - else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; - // older WebTV supports Flash 2 - else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; - else if ( isIE && isWin && !isOpera ) { - flashVer = ControlVersion(); - } - return flashVer; -} - -// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available -function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) -{ - versionStr = GetSwfVer(); - if (versionStr == -1 ) { - return false; - } else if (versionStr != 0) { - if(isIE && isWin && !isOpera) { - // Given "WIN 2,0,0,11" - tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"] - tempString = tempArray[1]; // "2,0,0,11" - versionArray = tempString.split(","); // ['2', '0', '0', '11'] - } else { - versionArray = versionStr.split("."); - } - var versionMajor = versionArray[0]; - var versionMinor = versionArray[1]; - var versionRevision = versionArray[2]; - - // is the major.revision >= requested major.revision AND the minor version >= requested minor - if (versionMajor > parseFloat(reqMajorVer)) { - return true; - } else if (versionMajor == parseFloat(reqMajorVer)) { - if (versionMinor > parseFloat(reqMinorVer)) - return true; - else if (versionMinor == parseFloat(reqMinorVer)) { - if (versionRevision >= parseFloat(reqRevision)) - return true; - } - } - return false; - } -} - -function AC_AddExtension(src, ext) -{ - if (src.indexOf('?') != -1) - return src.replace(/\?/, ext+'?'); - else - return src + ext; -} - -function AC_Generateobj(objAttrs, params, embedAttrs) -{ - var str = ''; - if (isIE && isWin && !isOpera) - { - str += ' '; - } - str += ''; - } - else - { - str += 'uTZ#RC?{@cH@7;HQ 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

mWWo(w7&+bIyI^lGwgYNk@neHxZEf zLe9Z7!*Dy*V8Hbo8g{=}$@2{-7G#d3BrX`=7ojlSN4@PxMgeE+zBNp1Wr8cOZhgP~ zxwy#PE+Dlj>$Yi<&s{Tg{CkKMt5Nkk@~V;OwjBsnlZD31-#Bbz z8ChFELlMeALAsnR6L3xY0oCn!!;TpStQD4yfp`0QcR2{^D?%Jor-6ren<}eTOpyPtzqETWySh@K<$256nw31SrS3z>}sr8>r?!bSpC1I7b=f@p(95 zq_^;d*ZcZPjTnJ(XSRNbcF!u+YxyEVwgqG_8f(scGPgaOess5OH-PX6s@~Pb&LH0S zz>yu9LhALp_e^Z88zm4=M&|HSPg=ZpZyR@Vx;-cO;*swz`-0b{uuQpLnOS@kk-<)xP8TO=Y_z2X(eF_P)Dv>9wCQOKC%+ zDG6qJahShsWJZRpPE3}~IKfKsv|l_{tNDpf1EWkJ-8uKV=|w~0$@Q$srK3rlz{62x z92@^Ujs>{5pu~LR^3xlGmY?3fZwQ#fph!!3xJ&i)SgBL!_bEySHKQ50>g`46#XA}4 z9H%b&aAn1ul5&W-3B z%~pEQm0-pRxxSWxt>OUjzFMaO+f&mbd-)sI>JlpO4{XUPEL+!m6DN|VU@wu9EusjCME4TC_Bfzw*1?=6kwmfKYi2{Ky;*^Yn@ISW zP=46`=K+#u9c%k}!feTl&h1%5qd4YF$Mk-NkyG^n8(y#qlk9>0Od-YZW$=JtTMn~M zh0}NiQ{7yHqpPfzp8LEb}a* zOQRsy<_0Aij-!4F=G%vWas#jg)vQGhnjqtl@oTaBO2CU`qZD{xT>7tO4}Rg zI>IS&VI|3E+)GhLvrAtmJMK+dI}#D4ID;w5n$C7A!%sd*+Po|=#?$&3x|E-CZH}Gl zx1F}wUxaxVg4Vz;U+yd*++x57n>?yxtl{qMyEzNhEL8C+);;xGTY@S34f!y`iiX`< z>1yV)B;r;ngH^1WZpx(WGXzk#V!&CAE!#Mgy<0VYM&(2as5fR(m(P|>F=*W!z`JZr z^%hOd$n~jjUd|vC4uHICS!sMVkb-dn{g`0vC!Nvpy=yGb7q6LL^>AUe|2zP*n0$c#mkQow_Y=u%GR3=uJt8{qeJ5hDAfu76I-mX|2fZ8P=rfZhY-2U>!vkwduzU-J(!ZT;%Ldv}|&Bjoep9vfswDwj%jF`pzK z?@BW*eGsK|c_6704dCJId#7#!7p(Au9!3tY@GGD>WXqHR&uFaWfO`z zLLB>8r+S4hdZC@?^j2u2{8kPp2rPg!BJwy^AXTSkLl?P?0BN=WXa}WdIhL#JmQ`!Z zE!jjm+9f_QmrMvD`k_+zKtw+)eCH~)5zYb6d{C%jf+cpy?1L-2Y3G(Gj#=p;O8_>i zlgxHbATP{ez2c2do_CuWJvP24@5J@x}?Jc9A|fW zQ!0XJtm0&#dJI8WQ70!w!xU7)nGm2d#Wi$l`*x{ZTaor0Our7;2Su=Id%f==wYcX- z0YReasI&q3_G*Dwcs%+tI4UL8H8- z*Cde^NAb6fXU($V>$kM_Q=fk_!&nqZGs=PeBt6@B_CWf=4RoIT4fV`(#*sSs z^Mr1Z#YbJY^Z02@g9l)_2*ZK~`4#6DBNx~5W)2=j?;TK%#)h&gPuMst3{{q|a zseoo4(T1h`Aa9Ah?Oh#V{$metlW%ydy9qz@m+pLxdB2{+vF=3`?b8I=?F^kJc+V_- z@=&r;{fz^fFOtNTMT5A^$5og2q=+p`W)uHc%d+`uSx?^z?e@G?0D{04NR!C2&VRM6 z(f_b4?3k9=vPhTcC7z_Ce6eM1j`(U>qKJM!?01$`WL6=zEcU7*GvEKPtkcsEvietr zODxMBmsr-_ua>pZW3ZoNv6}r_Y+3thH>Ao!?74BHk>pzf03NW4O;z($ek^~e;^>@V zY?zJKLo!2Z)j7F_!~DavxZ=|ISqd4#Od3C+q{p#0`J3yTs-9VXiu!Cj9<`cNP0hLX zD99(I&)*2*d~|AQXmI1@b#(-BBTOnC2Xa6+vtm=$hi493Q-B%;#C4@B3fJs^7Szq@ zTVWW8W8K`Z2MtX1>b4pOieJU_|N1IssLPlX1LPaF*Vuybc_|)1s4xPl8rz<{x^cif z=s+~;aH^@MDm63#K{x;k><*85KPnKK(CE#+l%GYz?6hZXbZ@qH9{|=79BaPPS7MqE zrW_ifW97tNAGa%ajleGgmvOUZKYbbp(1}71S+#xyZgIYD4}B5?1bC&vhV&oY2qqzUqxeB;0#fQ2y(!t4=V#?b|-bq%EI zw(V-46yp!?ifhKFBm>1X+njoqSIVNO>|IDJH00gs1LiM4CRRDFivd+4NblVcN(tWY z%m%*(oS3Wj$m!AnV`q`k;S@SWiI&lS+<}9ud4T*em0rQ+1ziFtql0;7{E?PLi!Djx z2D*w&-iqE|;$2)h)o9hH8cl(w>Oz*NKm{TxApd*;-#2EFikgeZQC%W)oE4DA1)n}# zcAc?$e~?>9;TNC=sK9Ff9?p^F)XDwBlCg?2YECuCJR5B^JkYN6K_x^Iq|58R?pC(g z`^kvUP$|Y;pzF=*b7Vk;CP@8MX}si+_11ux%yupime|KWlxz+uU4?`Jj-Btc^%*)Y zBfDH&T~tde9D#D1izO^Dv>D$JA-D0#@kLS25<7ctY81V7MRZbd=H2Ej-^G&$bW*5X z!x4~9XM@JI`9XT_hxU=LVyv3FX*DmXs=UjVQ;=-F^?rrY&Z!SuO9x|=183_{^uFc; ze!oANUAkqfY~_0)gS*~J1Qo3)_|*znbzDL!9|SekZ;upRG^vA15s)ui+T^>f^Hg~3 zqXO(BIQTkyd*nKcuzc|~0So8;@cPY5X}}2+VYNpkosC@9pV|^yH=3!e^-kDLIC>6a zzbqk#%zhhE+*9z=L7r9TXq4oo){s5jCI$r=yI4)ZtGe)=K&UhYsitq}c>_NJc8Lx$ zKVLpJT1{0hi^mC7eW2jcmRoN^!U;=|*BCgKXE9*6<7eBx{j)>|aH266jfw;F!bT>9 zG%~RGM{*tPQ7?xWATCUX=%=*-j!JbftMaSgq=ut3W*=@I@ve?|@lkf%+eiWEUJ;G-63uVmIi)5&+)*d zqU?AXvbLJ)6k096buCA~$w_w624?XxhV%ypwlwmf;q=+=T0n6JnFZ_px@BJ6@YLb9 zKcdU6<Cw#Og&{QvoR#){q_k)NAYlljQc0W|a$vd;f^er{6S9~2T&WR3is3#%)8 zI7bgl{G9Odwr}#{$I{8Aw`{_0NjcSxMqE?TXdRN$yJeuWpl#4V=}`9DglDxn3UW^h zc#fomT3MIR3AJdE8jwk1j&AUIuy=D;#3G6A&j6Kv6bzMqS3y$x^?-Zn0H4e#I||r7 zKDgzv7UZ6FyKR~xBdj0MnhGyJo;jTl+p9ofo{M2_u2I2W63`v^U~*j`IJvOP)#SlB z92*X(Hj;U(RTS*CSG~)Xx?FFXA0Gl@0M=AdGu-(0_@F9FFigE^qMi z3mDbn^>Ec75z2ZZked0r(hH>IUpCX;Ay7x814+;D7r%riZNI!(!^WC$8 z7W>hmo4l3h?QvfVp23!{$JGCoCuy;GGajDsxX4XGv9lQ{XZWzTv61Yr0L$1wr50`T zYdG^P2`B@A1@2gCDW_N!ez^M*kPGU7Y?M>w>vjMvQSusBNjg-s&>W@LFknZqkreaDOX4qI%*CNPm9kE@lvzRo&Nqaxmd~; z^zeShWCqzfY0k>CKWpd>CMccR>!`CqZ_EEggOmaz3!P%-s|H>~toUdt;e(~hZ_FJ2 zcr+Hn*AxGS+J9)4Ec{yv{;}EC|3;NRKC$O_LcgQ`LFnNvb4RzVs+(e~9k&H3ks7_w zC_In*Nof7_u})M*jZIcE5QsvM)gCfDUA;~H4rvd)=4W${k6Ipeb>7Gb?dc(JN~FrR z+pcsfMPh^n_oVY&RwrG^tlyzy9zM8O>7F1-KeysE5b!tT;OBjdrUlpAtq%nC=K`2L z?c%(*N1n~Jpx!@@g~}c5rVl7{a~L2QrN8F{ZkR`ef~*U^?Bi~ji^_mW<&RHUTg~UI z1I0u{2sC1O66PzIv+E;z<8Y!}9jsqX(Fzi!s3aH>S4`BDn7a23M;`eGCsOOM<(t`W zPA1M=kT~z^(kKz;QV45yxM+p%{foWiFx{W$oUa0Df!P+jKOCp~^9U$^GuZ(j-G|oU zW4x6Lc6|=fbyn#rKd~iOWjsY*Qc3-ZM7`RK#=eymf_k z(@;ECP|>K)%ftqwlpYu*&2InoY-@G&8D0&0>6OIi%=xWEfm#2H^1qz>Uj2th+X_a; z9{Id_oa=davZdpB;%-@s*G^+IH<#_3lH|POA1iE9>k@V*u8^)9r!QOV%hslyH7;`e zTmf*FiepU!_&0{h_>#T}91HaW?BMRg#P4PgjXSEB_E+iMZ?z5Q!nDpBP>Z)~k~Ohg zC3j!|$bEc}S~YE_G_fmj`Nn5ksul__nf}b@g3t*Fucqa;-k+8YayJB^S+{C$wKQ?u zt0p;xUtiyouQ{xa109X;Qjdw6yh9&>xK#*pWzS5W|EtbM%SegTFX&uloJIBDYhSd` zSV$I$e}yQ-7tS&NcpF?<2y|#~C zNQo_3Q~#=|B0kUN|0b`N?`QnhbKvhhR4#vA^tU4RUthvWs%|emSM5gwnP|nH0xm~U zZyJ66h!@D*6#(U3wo*ii=~KZI$(@ofM)ZsDFq03XIX>dco-JoO8kBOg-#AE>?iNN3 z!HhloD&{2}bH}T!21wvVXAlGX50G;k6tWled@*}}^#e%#)g}GfYC2Ak%VK?@Q^%(k zd&desHP-J0!tn->>RA}GhxrgN$0}6j4=%}F=QR3JDt_zyIN6lHbyvC~pfcGiZFz_9qj@4MhXXQw8isysxBbluM{Y5?H-LHtNN27>;;M&$BHB$Z1}f4_fB{_q8j`MEwZPspRcfd;||USndv$rjB^!a z3=RBtyp)WH(5ST(*wcPK{{E&9$p zbJBZ#bNAK4*2$2Q*7p=|xxta3!;XFjPxb8p%1s8go6NEPEZme8^;o1!6Qmwbky~)6 zK`mjUG6O1p1{ubZsz|9e9bKVcllt-y$D;1GL-|m(AICJwW#uu(PjFUl2ZgogFNW2Z zmXI^5mgiU>sdCGyKLKQa3s@YSTkuklZK&ObrKXsU>5{(ndt<zuw+!8BQ^QtKP=pgz^a>CFICP_1f_>@^o?r zCcn+NH+Kz8=!w^wh1-+FE>E{@I)5f;I|u~>J+!%ZGb+d&tjx$ z=y}*KBGHBu<96+MzV^uKV6O4lQS6zb-WYuWPXIF4YJhCiJ1@KX=I~B4X&}F921U~9 z)K=2!WKegl0rmBkA2$oxF;CX;p+X6yy^M@4vEg;og`4`Fzdv~B$PWik^!vPCdC70n zrCV3e=~>J9E37PPSfx&q&#S90<3p6=eJlFT=)U}BpgZAUK5;^D!7?9=_VJ-q;eEI8 z)L#td#sMAGgSS^MsdnG>88kM1y(jX&efLUZFJ9(wi#zS7V+{EZ3@k14r{=!zJa=_S zPAe9ZDf>jb+U1K(15azyFvnP!aj-+CI8N7Dhl~aM#bl1WTB3E(oMl6pODy<5>bGC} zXz6twulQSoao`&TTH$+L4@7ReDLDu9C%NGzf9R~~`E#FQ~M z9mP!2#z0W3J(@Wq0I{5glFxkL++`&;xkQd9Xr}j@()ABh-5VpNs|9r`FgLyqf-Nov zy{)+zH0lXJU(W}>_S80P?UiGDM?QLfTU8Sf69D8BILsG3q~COkL-}SoEXmLor_a1& zhWks5_l{I}=vJ0XF2P!u<_p>_qhSs!A5%NyJSKS!`@eswPUGOzPQ8bx<@1q`eoztn zsAOUKr}WH6aoRxVs>4#HPR-4NjFEp@&xNRGv=Wcfj`1Rr?7kb0M~n1$3PtbkTaAC# zWk!vnOTRVfxn2&=nGHQUP0R^zUQF!&;&npevxi3cf83`QUlV?Q->E)Kmu}CxK3h#N zK&dv1eT)-*tU+#~si*DR)=XX0GS*SDUi!`I9 zvs@T($5|zcqoHqW*bA(2R0AC9r&O*5=^{3$rqmwH@^4xd^%;m3*1*}};9ozT36_#0 zyZ=inkBkU@Q_#!b`uy7fBR=nJVbq-VUu_)?>l@{#{u4G?#-$fEZ#5oC`abhk_>~xv z*c6n=pffphCn!Cb+F}Grd`Yk#@iOjB;|ve_DjgsRz_e@8f=hcVeD)c3R_KSUmaDVf zYZ>TgE~lRNP2cF#pZ=n?-%;>YjcBB&mspV(Fo&JuiP+D`Th zSoapbiEb+_-la)2xaSfmdF&tin(fms|8p5zRkCcA`jb)CS4p6QypiH{+wwJjg2w?ER+Fgo@2#y;_Wj8cP4E)xg^)oyYf^Tut6<{5!3vhQ~0>J@h}m(VH*11`^R? zyW$BSy!V)!#-!-CoXJr;9GO?1&KN(ZUh2tu&~X)Gh198#iyl!?Cf@<@5A<~Xzzp$8 zS2P#TPw1gk$!)#Qa3I21Vi#kGm)fSY_r`ghX)&!u2>{r(;L)M zdXSuCli3ualgoUyMt0?PJC@$yOl9>gcG`OA;jYg~r@vm3?p>-UwuITc<7>(nuC)hp z4IeBEW(&J(4uQPAc-{sZ_8kl9E*}7LfeI+b-J>sD8G^KE6Mxt73xKZVGFE+OPkR4|@gD`?Jg5RBz9iq@_F+dW`_hJjK&+~P}2^9cR3vB7T1fw`MWC8^8 z*&4f;Q-R|q*+8$w;f6x=$s-}rKt#(#7)|o6@k|F(N4DbC;e4jgZRQeu+67!;CsD># zWX~*;Zu$hocWltO{%ZN7rK*mrXGp)>DXodwYhu<+-x7+p;|~FiD)~UWOOh|pBDI%I zYdzq#qpkO2*t`4o{5EXUm+4L@Qbn#hQ003lqAVAP9sn}z1kM0KK)%0p-&-Knx7bljok3|Z5LDJ&4}ZWpbY)!#0~6n+j$7%nW$eim%+XriT*DDpJ8$J~%m`8}suzKhvui>q( zd)?WcH+s~6Nz!ZY-XVvj+;o`!^;U8tw0%xHJOYaW%?)7`<@Ix{^ z{a&3$`=xr}H!DRDBK~5l?~W;-O((f?d0DrMWN#}fzcFQRC4K3@F~9R@y$$BAm8GAI zC@jR`L=g@h#Y)0D;koD0+M{JYW$BLEd+2)}$iQ4WkZ?++t;s0?pUHFdVK2zHF5!3w z-JSbIgaf-*1c#*u#i{-^+&g@9zw-1DJ5%hAm#)I+gj(4sfqig3GU%%ccXiZ;$G>%| zXY0D^2hQrc%>I%@pWl!1oST!cwY}Ia6K!kcbW>}ZMe-?!3=sd%SO_2m(m(_mkOdOR z0U6{$0Te+AltBelK@Fw>noCdz4bX(?panBP8+1SyW&#cLKp$p-0T{w;m;**&40JF7 zQ!oQ_mg+jN~A?bw1`%*QM8G6ak@A|Y!aKrnc^(5MQjyki?4`t#JS?D;%j1?I8U4} zE)ZWA7mDrTB5|>}MC=fkip#`K(IIw;%f)VSh1esm6jzC>#W%z^#Wmtv;@jd{ah|oR6Hgg7f*=aiYLWW;%V`Wcvk#QJSToHo)<5O zec}(|kK#q~l6YCXB3>1*iPyy&;!W|Ecw4+9{v_TNe-`hFzlgtzzlpz#e~5pIe~I_S z2jbu2L-CRLSo}wPB09xh-wVEhrGrX`l@2c*Q5q~QDIHZ>S~{k5Z0Wet>7{c^=at@6 zI(AHa`9J!7*9XFKjO|a94KYHF9Oob9mkqgg#0Q6Mo4jrEH>Y2_1i}kWor7tZhtIFC zI&}_)5jWyMT-zqUIi3GqJL1jhfP-o+8#1{ZWB50DH0MF;0<2$5m^?Z@1gY$zh28i= zI*fM3hhRM)&%3f@+vMA)V(8itdg+^oV|%Y1F>ESQg`uNLj1t%?>rYf;8~G1gfq$4@ zw!ruUzAmu%g`80NI=S2m8|4ii$iKs_u)#B=UsN+Rs5<;%`Qjj`X|<87i~s)p_phrz zA%Mra+RH51%XX6`r4w#7WC z9|57VB^Wx@Ec+PLJD$>_CfqxaHj&c89$0QNTZHu0X6;`qG{mDn)_A}Tn`cjZ(+pj3 zq!D@p(jHu3@czgnjL^23M(EguM(7YT?Pn(3Dl>NlqiN{sLM%TT<@uqpx$0eQN|R;(Rvm4Jt6i#= z*vh#JyK2!sp!A0%f4xjg$d>g)TiJ#4a$(6G(sJ73?uOb;`W`j;S9e6NkYzhpn;~n| zm~4h7n4w0~?nWTAo^GA+(7~Y?z8zjsy9-1k$Eb?hL^9g9X__mL0F2Wl(U0hsFH- zEyw|c77n>cpc_k{vn^ecjMs~`?ah&fa9yPIo*PQnHbzQUClkpGq?ImBrkazfa3+>a zls3ofrk0k4GvThFrXjl0HOY7jrld<(B%t7oxpSvafyd0LrHkY7(wbPbF_SK>iKHW` z)=0fr*ryi}CCL)M5+wp1#p=>4&e^a{6K9=umgqNl#rIx$rRkkxYQ7Xbw^D-SiRy}L z^DlT)6BQK|0J3t)N3SH;zfdzJdhT%masq((VY2stDBhxpM;>_uKq{6uJ$k}hfho@( zadqgiU2l9l^JvGOuRXct=u5u8@#oR2XFc=#_@xWp`p!EW>rO8J+T2&Jy7a=1*37q` zxorLm>E+uRFC2L3)YijSCPZhT6maJQ#a}Hb&;)*~x1azQrtmipecVNmzp&2`YFEB! zNyS68EtyO*5tY^?lYnF9NZUsd3&A(I_ zTI4@-;>4=G&rkedL#YJmC8{6#^||ku3@yIylZpMS_WnVFtObxFCquW~xGx=h?mx#| zbM>Dd8~oPgzd5q-j-gMEAJP2E{3%yodeOi?Wj<>C(}v}LdE=P$E$z>5o*KRC;}U}uqJXD`XlfSsMiDm!Ny>_qZ=n<8`l_1C*a2IZlT zN&f4vziyKM+QZ#~Z(x{YIZ}Oy755tZ(l_Le~wy^(R-H`s~Ut z|9S3h*AJ?ge8s72=Iy#ERs3=ruzwh!9&FG*NYX#hpnE9MJ=o6n=2Rq|mV^%x)jzpQ zA-t%5)WnI$Bj4Bm1wd8<$k6PBKQsHGj@^M5E_majf4ua}6_cOLeE4B#--XdbGZ!T; zd-KAU*4uvZlUKg8QY*XX!RvlJ`&*CxX!#;0c$h)(P)YC*JHf;3j5Y|KfCCXz(*}lP z_imy_dt%ku%}?C9_2T@Bvp@RQF8@p4-k4{o^$3%86Z)n4qsI3c{_Cw5OXiI3M!mYB;+W`#|9JL`1oB zj*i4$I^5GHA5bq%HX3laqn9Sx8!*{DmN*+Q#q1?+fTNeN3#Mjoz7shU?Y`JuhMX<>@U)lLfTCQx3%Y<+b%xXUPd92QrCMfq7=LFqGqIYY zxG=?e%THgq@z9^Q>`4NnxSCl`lReX3%`6X-ZB@fKW@k0EC4^(P)6^;m$j;3X)mL2e zmBlw#|Ky5uwM8~NR}?APYuLFXs8jPw4ZT|R7wwW#u_m(g?B?fgzPM;W-d2O6BMpj< zkQB`^C>lc)9qDCsom3r#RGoWIHBj}ntuNZBTJhcX7cP}l&2>=atJpm)@1rB)M-A`2 zGay#Jc>BaflB#(IRdXd(N7<>G=Vg7JR2?m-b-KcK3#*H4ds z5$d{3$Nj!yuIp$aItu#u;P<{e8~5FIpU}1laos1KXKlgsJWPjHb>4SpY;2{t?w*&L zw}?v%`uHLJl08E^KL!{5x{DvECnWihc)!ToA`rMjT=(T4t|KG`kiNHU&)C%x`Q(mO zLR?bNrx4S@XVlIU*ZlLJ{}4M1`sf6@du+x1LICJBmt1l&CI=w-9^3#QK43%ZBjTDV zQznZY1u%<3D$sHWan+^c7KzIW`V=w6TL8`F`)(7vJ5IvXVrpN*zT55>KES*4y*A+N z_JVv(Z8gMwT$USfenEboIOjnj?h;!d&krPw5F>}Yd)s*v5H_D0RdFA-7-0*H#z0;n zH~4>`t78;L$iBIe~$H5zvok-WF;nz7aQiK4SUMpXIYVWHiHsJ0WmNaH;sAG(ofrowy6 zuH1JkBG$z@50e0HM|vesF^_4!GqLZd_lUure-h^)&6rxuJZ5e#!U{F$pF?q4z|6e| z4=D_J_vhyw%GB;H`^MPgOzQm1z@3*F+`V+{ihIOxsDY{NeE+PE_LhBf-^~bID0XZZ zCW@GJUEJOIZs&W$2drv+L6Upt|LnVYZ|4VF{77CeVK5emzPt0!U^JOrp>N5*@6Pbp zDucJwP0U-On1qoVbRJUtuq6$9%XW@kY0{T(^zaqj!v*4;y~5Yo$(+5n^ApaymC03l zn55yp&QCf!&oek%yYENHl#e9Qw(c$#=YTleB@BY?1p1gjgS)%OR&pgwaOc0z`q*S( zzPMoKU0|C8bNBAf|8#budOgk*V^7}7h0j5X4Yoom)}}G7#CGn`^O06d6pIa05Cysy zA#IvPn@?48OKwp;ZedB-aiiI}`3Cn;cZgPnw)2Tr(n=M;PXT$lSI_vbS;Ht#@~R z0``;1wsmqqoO2(Dj*pp4f`8wgbs(igwY|%WfvrAE9_$4A6dlg9?BXpf5T=ski*u3S zW4B250t-#rfL64b*paKHSui^}z*ZUAdz7RVm6kQ^Jf!tuOCI)?U4^XlskVV_w=}$} z5zHf9{V^JtHxZMcxo0qzG$g9eN5d@s8YQp@wTV!>XpCUpA{34{H-<$tl3CK8iKGchy%}Ab%z!(VZjL1q zu|zbqu`v>fi-vGK9TB0{SUOf4kBE*Up^JjOs|GE)^{V&2Q_|rVx~BU|I($OUTZ~Wt zVob}|3xXIcti-2Y*-t+=uy017Psiw=Oos|9BC4r0+h7FfP0#Erb(RaS0ancL5uTPXDY zg?Oy23fgJn*9XkEMF-AbKA-~Y1RcvsQ-Rp(17lc#*@FmZ@Cr=tqtH4eUsQ=-6^z8m z9g5I>zkcYY7w7yVaBoa3>L-j|Tm({u>&sh_+yaXB{yPZSF@sO_HMNK8nnYboI+JW# zk%=^=#o|;d+%BR^lZi~EEfZ>rBw9qcHrbL9G00y|9(YPD#+1?%S6571vu;`G(#CKq zlNPefYAAxZL~~2JQ8cGwiHxYmC&P(`mNvbCJN%%w&r9iQ<_PZuB<+`9CRuc&#Xvr%diUINwQg_ zA{%3gdeM+fZ49UCMLOIXF(RSbaNP!RdNSE0PHPFrW0`hQ7jDLF4zUKnO2g^WC9zCX zxLKSGFr_OJvQhDvm^yW;SRZZ;L(^i-nR#L0Q)a?=2a`(qzY|!w=argjE;GuKP2m`( zM>!l=waD=g872`N1`6^p=qd&wSgJPB*7+uRUpH2LKtjKtSKt0tJbU) zAVtj}TImRM2Uw9zs38`K*NgC4kRyS@1V%U%kF-YO(?w0BDcKqcVHQJ0%OcG{1yBca zgUQP%xv3?diN#|HFlNbA{kjzNRXP%n)MdhGgrHDuOH=^CAjZ)O{7H*?PKzX>fDc*| ztBZh;V09K+j;~I(#v)7Ov1VrY%4Dr*TMgaRwmRG<+A-9Qp>TbDHA;3kENR3N;V@Mv z2|l)|In!>T<0dtL3W+dnknuKIE$-fh$bv_jY9sX_gh+FE83j{dc}YIQEx_p5=@HQg zraBf)2o&XLD%p~#Uz&_3Q%YRaQ9>G_sfDOb*bNyaCJjD6LuNI=L_k2#)yevZXqB}! z#p-dBrZ$-YTOyigQ1>loaj8zm!>P5&>Ll6%7*%Lo0nLhl!AJ=j+XQYjg55zOq~1@r z)TUu53s<%@%@nJ{z{KX{M#1EVYttgU25X%HzbssF0n$BPgx57DfsF97RJe}WvL=F~ zTm}X!Mv1^-;6NJM57~(*f@eSvK1Hvt3hylK+}*ttksRfCu&=7A@H z+P)MzZE;2{o?9{Vgq77ZmQPtzGplmd5l5|9x1?<8^f@Q5tvYGy@y9MJKk~%YvyTG< zovKNaUBNX^BkAtFNlVfVI&g7H~HbZx%5|LCW6E{OCkq{(MC|4j}Mn&~4G>$;_H& zFduc$iP2;V#&)oXpiD7C+d`~)HOY->7$qX9n1QQ-EMz1KHHVh)CNp%0FxkdP>8n#m-C!n$NrQy7&R{fAhh1z^}{N^?02m;%J3rKoMG zHEYH}1{4{T97gYO1@O>wqsD6|$+`48)3xvAu_x!=4|VTQd+a^BcY)pK1mxH}6`BDf zBsX4;c4UUqludSP2`Jc!{Bx2>Z-ns{q0=Ii06!i~D{u-BhT8ep5(#jt66k25NRbs! zLLIe)td?-qxA6H6=#Cb$%JmT()T7I)*H|7rq@X9*2y%EjbQX?J+z>f*)`e3>(9Uxs zF$11N#)w5>WNt(S9XFFhs&NbVLaKv4D_2AKUqu`6TzWC zA}BRIHNCMx_ExAK28bB?Tghf4EE_Rjj1!3#7{NiHlQ398BQq%w`x#n z|3XG5*EPoC^)o~i+(|IKsdQ#3CV;TiM=DXE*gYhunIblWLzR%5mV98t#&xj?Ad^OL zvqWqrhh~e|EFp*91bCEG!3j89l(>76OA#+K;Szy5_}|x5qv0}Y)OH&ZflA&BNVw|u?;OnMuXHuIZjcb=7Ey{ z-YrNa%v7L`bYr+4t!W${wegmeVUguP$Shv!43~vdU}%@Nq|)fssRh6WMZgj-Zi_*R zF#?342hdQ*+Q21hz@Pd^9T?Sk+6d6RKuiT(>}o-~egsz{Q@3HAV7Ikq2M z7bx&Y1FZ%cK(GfDyLTBkXKl zSTzwct$~eF9R0Yooeb!2LE5$0qntv%VP0`!f}W4*Cy_6N>V_&QV)bP1PNe5aW#H(u8qYyG}X&4QY&1=YNN)y@$IvYp5<>{CiWve;8Z5jP1Ev=l> zQJ4XipgoqTrnen+R6_%Fba~uFzXS-B!RAy9EMKNwp#6;`mPgv8WsYRniK~s0>hct_ z96D~9B)T=6nn9x&s7UxkjLzgJ80V8XL|%CqPug;v6empPmg1%+t1&3Pm}cYkR6jX| zQ>p8x*5aZE&N6Dj{3oGHHVSaDQ|PCcr!3-$B`q*^Q;61)X)O>Jgn01|UG50> zj_iRAY&~}FhX*=VT||USQ%J>4iBDz#zH_*oL2g16~|cgqBTQyoI=OfR2V^Y zjdUfO1~{S36Ya6ZJA)!)p*!hM5X zS3IDyLlb!`1~_RS*cI)2f;Or2iDd11O2J)?`-NmSu8mhBg@f}&l{0OKN7_)2v|%1; z!#&bQc%+T=NDIg`=0LEL8b8QIauC3_kFu?*`-E?jpq6TwEcR&t=-2d;O4{mxq6H0r zYYlb^VCaRBn`C4ZMsAal(HOZ$Mh0SJoyL)V7zxQpe~d&l=;t(vZz+*ChJ<1g_54`< zkYG6`9!k%{I5Li&4&6X|H1n z{z7a@rA&k8RN95{<1S2jl?6K0mThg)mai{ZtZ2DZ0|o;5oZ-l(L%C2a|-@KE%1&E<|9xNMY~jv!tTVuC$bP4v|ip za|9(ENts8jDFO2Q8k0ARa^`{-s+9Q_fe7W3X3mnhAfZr6n2iYqL)DEaNXQ$CqLSw? zjFK3iE*$wj%J=yTIDe(+7%U3$^#mdYGV+*Su47&eK98<}f_|jW?`N=lX*K-5YQhQZ z`3`Q``SYrY28eI$w6*6LY>z&)qrdR$`g}7TFdbb})lq<{v;74!G{;|vA$@_q(6UPb zQHWLMv(X~!8FKO zNc1$IpggS1UQy}7h8Lq%jOU57z=DFJQ3JcSehrSwpxuY*UN**5K#id3}9Pa zhvLJOuzE)+$R@!2#q;2BZQhiB~xXjv95ybXPBtlnPBucqoYSLO6ltvoN zmupi-LmQ^ien*F}u(r|eZX*T^c36($u`K~otR z{5aCczC?Z%WLG2GcXa}*Eb-9v8X$YPZFTL7PVpL`c%W^64aWi9AN4UpbeD@Jys zw=ccbFsHp=RM=j=`QOS+ISCvM0<#r{OM@ z3!bi2n?6GkdRZC|5og!9b3I0qvuny1Y+od|nPINo)D*^>;3k1rR@u@de8zTuG6fZv z8OzpwBghNaXZvvU(Uj3gI{5YxQ=>+WXK!?X(7ytXu2$H~phiE3+J0_LF&!%VivAUA z#>-h>1-}a_$}^FYM=)Mw0smSJA=;*&XL*F%&?AK3^8tJng)Y#~m;MDszph^pBvJV~ zqLW^JxiMoYz>*h2iE;`2b@n2D(}~gTCMp~pd-EP$EJlXaT>FveYvWuxv7yEqxQf|kT&n|mZE@n_=&P4wc-WagM#5^QXvVQ;-Ul&z4O9#6^qh`d}#!LA7VdK<3kPcGjdIy zV_A>luJ0&p#FxtbsEQ_n-X+N6GeF&TIA!$Gnqutr&9+{LbQj=d0BBg31uzq^oyCCJ z(Inx^G)9=b=LFa11Di%wZ-(Gz>igBT)eAqq;jh1C#_rV5V6ztN?WnG!Mr}ZG2}7yU zLn<*;Fq)lY%5WGXFK~b@xsQg)$eo?U9Y`+1{9Us4GlInuJw1!d9kg6tW3_zGm((*N z0qazc?1ivA-DR8!vd#(F4;NXdgE*IuSw(zU-|paLK5;Syudp?l9GAW{QQ4zRR0@TD zWuZ<%XyaAf#w&rPK=o}j2m+3e#sn4(n^Ly6_!w;Z)%q@K+EqcDOJWm@-pAnYHz@W^ z%XhwJKAF)yl>V)tq_U9JOaC_KUaPnP*D7AauAt>zTsI#l4f;;ACC6a&dixCQdMbQn zka~NNW_Byl&O-DZGj6t}h%&xwtNJ@`(Z}c2(BA}ogN27aIUpR(ptY_7q@En(j_ z6)f2kHjgr~4Jo2qN%j)@OU=7z*>Y z$SSTXgFs@{5kM8%&C(j!BvegD_f8SuAE?>0c?GoFP-=FMJ5WME^oP)R4|VjQnlrL! z`^`1w&NA77e^f)GE;>&7Ehf3$AZB(q$*>WvW$5DpQVS}5PhqYc{AB}G( z5(xk8K^4z(NhrDf7X&4M!90e#qlU+f+aZfA{7*Y=ZLonNVao)%wGh34Ivx9TVL65h z$YpSm-0EYJ#&z_8AHt_1J)5oV8T!wpr7jJYaOv?R1-IJ==-U;klMNi8xs3mv^W|Je zX)c%fd5xKHhU~Hut1%-CrcaYCU>Z4du}$=TK{>yyAqQ}au)q#Aa2(};oGH5GXy zo8?h%ic#*+Eahxn`1B{Z+Fxo}`Ck?C+c`GDH27b>vZI)j?CJQt%M@EvF!OB`sK9rV zT<7Bg$yQx!Gu(tyKD`wFv$B6Z}Yag0si zVScN?JXvY$?t{?q?Gv0Qm3_EQugP~Jec@_;b3hFA!BkK=#-;I@Ep4c}g@@$u^o~6G z3;kL-!NBC=*-l`h{*=d@hIaT$ItB~;XQz- zX!g}994t=9W=_IjU&dY@M7eFo}%#$N9;UiCg>)%%Q6?=xz>&t$Ln8L0OevtH;+ z;xZFk&SlG2F4!~Ddh^VAXlI-s!9IsWJ0`l>$~HUrJf;7C9N#(MQ!HP^LplFFS@YSS ztoe*ikL+1uT~pADUd^9@ujaSURNlNd-q7dUCurA+-`3}yq*XfNq8*+^6zqCu6 zgA79}+D~Aj=ibrdJP-$?)~gXaAdxUW4(Sy5Eexsz-AvHWX5U_VHv9I{?}CP$Kc~w1 z?=i9m<$N;9`Sbb<=Hfk{MA-*qFsZaM^t@}cTsCE&vgq%KI^l^my#!<57pyMfnr-#$ z3-(6i{1c&4mH!2ys#G}gXyJVyFTAsigT4KOeXaTrLB>F1;qNu>6zUMF`D;STm!m_~ zs3`y>l=yr>X%H=YKM~{^ElU>H`8=K~pkEWX+@@}1TK`Dz6HL-9xwMyl!d0Q?7L)2{ z?hhK=Pjc*Ddbj0sz@|3w2fT>-2gD@7$(%UzY+pzINLef#O(w!|>6eU{B=W#F@qu$P9K4fZ;GSrfe=<-yC_~soDP|XC zDElaV*h$%v*P#pjMg0u_aDQGApLiSQ_hnhzf|=3K>?VNDGY{5qXYM7xMwWvW?PdK% zYCA9JyyVieAF-aj>^L$er)PlRB^!d5L4h#!6)Yh=Ibz%W;y~(Fb^PV->G;b4$U2^# zLL_XeqZPCr{jz=Q{gv)${wu8c50RaHRVKc~rvMrGPW!4C^v+Oe9M+4DNy6VJ$7>`0 zA^w5>VqhOPoK8aK>8~1Iy>TA$Rl|qRrvE{$;|QTYW(n}4R`4M!_^=f`#b4~Gi%t-m z{b9CEo|P<88kv>4o}s`Jbc*YxAgaV{zos`>g=Px-;|H-ElGX>U{hcvjuV3lPUU zg?-1P2xmKg@h5u9^A`g(E9rKAMQsZ`-z5otjTGZ47@?GA+Mv&<#N)#-I4Pvt05*Fs z+Z$@>1m7iJ3x~@4(E`?==~R*R#`&L}@XC_ipM%WpKD_9{iSMum^UIj;KqAS*8-SpM zyIiv$z$NwC1|DYOb`_>HBjpE zsVn~E*LaD#R{_-kl6?QuE|_Nqvq|Kc!5pGUP5!50ce=$pa~c0%^GV>wu)zIO8Ic_Q zWUQ$=MGrXFEAPL({(rUC32si8aIT~mDvP4oCFXa+G4eP}GLI>5j3{^W}kmyT?XOy1tuZqYc_iCT##+kBv6)Zj6l%`28IlueXnl<{Jdr#>TFh$z!8~ znfo&~+E6&Gq@(r4t~9oiwxqwilX6-~8>E+&bO8Jxvyxr&t{Ya;(N8vuaJ}c)_}^at zzt`*8#zv>jb0#^*#_MyBjSiEXZESRaxsq~>jSichZESRaxsse?rHM-$b%A?{~s!k_n-8$jwr~n8ydABE5>{;j4l+IQJ_&Bg`W9@aKWD5 z<^llVE7ep8&xs!3(=~N8d(9?fR<^?fJHjqy9&qk7Q_jZN1;_=s*;z?eICq*MYJDs> z%sg9Rx?ftS!LPo|FTOrch}oKh=Ka)RRJV!(@X+eH%QIkSL44!Os1x-v||gG%N_+CJkJ zd3jJNts&igS(N)}_QOP+geMC|Y90N#!a^ZBl`Xwd3h9{Rv7?v$_#ke*40fDH%6`Ca zzX|Y(+;_)a=YTQR`aOZO96jW-ABQ3T_0`0+9EU%)PjP*$AWsxbqKnq>J}WJJEa-BF9j!LmQ`6&oCV<_OA@@DckI8XQg?j(Z{v< zhAPN?2aeph9Z!oI!xT)Zv<18I^G+BPXmwX4Vi|ceyb#G^(Dy)pEyv(3-_rU^*C4rE z015KX93Z0r1c(`six>$rup2OgvcVv0J}@p{1brT?$&+s!9il|RXil*onVU>s-kM5X zR@E_11cqvXVOn6g78s!gMrwhe7AVmIqqM+iEl{cj#_;_vOS1a_Lv8lA2HpF>Sj|X= zL7_ZoO$-jD>_as8AGaV#86a4WdmU`E57l^+!W=3t>y%{s1yJKN8j*+Xro)8O*bC#d zF`Ar)(D*e-%^IaCGn9gW#jwMOVGtOn$r~)$)1B;^lpw`{@dngp1!}ep>Y%gr0WBw6 zuh494^~{SX45XJrpOwy#(xU&w=l0^p@nM3j* zBlpE*jfUhY8qLUWP zlv{*3V>Z_@M++9aHcyL8znPg}(To{|WSV)``Ah^&(q9ngN%dkoTp4UYpa)$Pw9f!_96<8kLfOtA$h)*vZ;+n15U5Kj} z`@0s`u6X>#6IaY$q?xtRxV>02<)H**%@nl25{>6Fi!}GqMwModBRJ@P9K`~#IA`gp zUZv%_mP*S~NlU3l&Rf#14kezcqdilD?o`!9q*p6uXb0a_Nw`Krn`?KFy~8%cJM7BS zRW;d>a*REt7$qwU*F@F!LG~|f36U2QKk922V&^SuLqty82UqmX=#lII9mN+bznE|3 zl<}I>If7kg`Qn3@@2k);*RJAL$xWs|Y^DN<$7)tNHGP?7RZs*^@uuP6;AgkL+s!Ld z3pi>Wm8I5E-nH5WuK)2{)s!>qpVeHwkrqZlHz!79X#`77xm|S35(P*v@x@0srOITA z(2#z;ca=7#D9Gol$h%#l2c(Y5LaIWgqgzIJrjB%U)&k9fR?}_T13*PK>WWlc&JG^o zDb05aSGP{=ipR(mEW4=Zo#8-|olQ=L%+o4!HLhz9=R!q(rASu`qbL~e(+RcNmm_%r z@mPb(VFr}h$rie!rN8-2VNqzqr$SndW(l$?vVl1amj{vd>TNXUY{_s>eh+u>`)JLU z?&S9{Pb9;#AQ|QYHSd6?L0mX&?{WzURj8Y2Uq#c=qO5R^Ox6 zQCVuW+4pj{egCD~zNb|E?#hgH%V>gh&Nj^ZCe>zcVhy^^yTZu)?K6D4KtptpIl~qe^{72hhdcPK8fG_=VctlFWkFJE3_GUZrY3K) z^xaIh+&mtb)Qn|j#xj{vV&ETT!(U?HA7#T|V)M-u{3Ry-QFi>Jz3CtAP5Gv56B~!fSWneja8|xOu?qNV(XqjrMVy^Pbx$YILdP`~kyHX3R zf=Mr?S7?T9@ZkakrL9)ergB=PW_>q|Hv{?o?%~-F9aL%Rr2Q{KNwZ#g$irPI!gLpI zN(ZXt#=0HwZLfXxi##x%!n{B=4jgC5{c*BGvV+zbpfy$(QQKAC;1Yq)P1`Bdh&8y| zp)MQz>yzyh=o^K{*HnZ~2&Z@}--lnE*IL7=SQx+Fokwq|P1Aq|zZO`lS)1xU=QWSL z1Rg@gjY^^6b?`gn5d?;mm%x-;JI5BHOKM7R)$e$@*~fR!ICwb&*NF5TZXnmytek^5 zf#$rx37T=^IlYa$Be)V9e}drLb(~vHpDoy7ZJ#ibyK0bgCu(%Nhdk-DgSz1)Z3Q=3 zUX7X0+qCj-qXm10in3U`IUa65HkHE9PRP4Y{@^n=ruc%BVm!+_mwWAGO}(6CJQ4Ps z=$PKa_qX)9!H)U3Y;=kin5+e+Xo1<*a!X*Q2s_NeOfIoHr79nR_`9s z@5jCo`dlS@WdrIGUp*QMh>KVO7r8A_5 z_1b(*j~5nWbVJ}&jg|nL3#&0sx4wV|4G`)^-k0Rs>X$WZ>khXLi)|kurGq*l&9UaF zuF?Jv8|^R}6I%;U;?6g-6iySpn8U>s+e>RA7@fAF-UA6-xnPaU)oXr4G$n%8#Xd@`4=T{bq~zEXtc1r!i8WDfMx)7CfG~ zh@R9{^vy^dtNq+#UNxCs%w}`2$7=8B%vJz?&r*+ntjxv0vm^s^AW}J*qs}eeu5(N7 zI=6Jc&aK_9b8GH8w>s-&1(Q;7wnks30cb2hPSw>POD#{^K{6WRCXnGD@1}*2F+zXZ zey-2%$f)MUN4If9%AHn%urBC=>r7|MxtE>%AnP&@&EMnDEgG@S`@)YC{ z2X3$qTIo~#K4mgA)vtMe&^H%Fi$%7&nPqNT9pv29>Ehv@Uh@0nLVgj-w8|49v!Cs= zG(AkVnzJrCUs za%<4dKx5d?o`@g!m2u$m+kV}Q77NuY!A|f8^4Y0q7Y>)bAC6`r4gP1laGo^bA!Fsk z^x}-ua8*k7CfgZWneE|Oov(58G;UrowIrei`S>Yh_|%LB%J2;}+A~Z9F0k5TA^*Cz z2th8?YUtc!Z!NH03(R8Yt*a6pBar}@1vbFc+U=-$oE6(X#gMfVS69IF5@oHe$t`R7 zBw7E~zDSY<0&|h(*Kzpu=l4Lw^0Uem7{|cpFHoPJcod*`pon6q0mUTP(ci&g>Q;=V8ZM)b=e$Z~NkgxZWp?H$volMXjvQq= zvXt4Cqs%UM8N3{J!S+5pTT4Ouu1Vsu35I;|f|hYZ;y{6unadrMnRz0xTPs|?>>N?J zcteFK+`X*toN}1)! zsY&_DsxF<+OFO&g3jXzztgEJ%+g42vC)#!!a}Wi9PEe~0j(2vt<;zIPL*q#exk_8n z9}!3UbX1GL)f%J+zM<(?(%sI1Z^G;^a1B1brK}=+TMJyP1+LQqtF^%OTD}(ej?x9@ zI!WNW%sO5v8GtJ#c>7S`20Ua;FU-RfZMg`1PYc|rfi=GgF@0YP{6Gu*P%cm0tW^3V zxe$Ddl6I@cS5WJWtV{%M>v02q4Apj*=ssMJ$67-duX4!ShdJ*rq$8_E$5Ijai5B>& zLfGv}_zorfGo`u>mVwVFdZ4dw#&^&HcjkJ1V}x8uTXsNLSfp)SK;4pf$g<|UEQG-xEqD_9(?>7ANOXHU46V`NiuMs0<~8o z$^!TEZ{f%;nS-3D7afB|-~lc0AT~FPQXGZN#-&+Q)`zq%R1A_I24sc34e<%}xQ_FC zRtKVgMANqfe&f{Z)qtLt(HXgZ2ALs!bK%SAaXqS_eoP5Ju7sbE{4D0G7K^}dHP_Ox zT8CF@T%1NNFznXF__lQ5NtClfd_0As^t4uZ62d;Clz&#H{Z2_6jKI&yb=}{~-{&=Y zqa^TxMye9n0Es|$zb8+4-^ZGBFMGa!&;ozd0xx1eYze%i1zy$yuV{q>O;O4A<{63# zJK_c0X}mfIc>1-o}YxbTYI zyLY=^!{Jv0O&=a$XU+Qc!ddX2H|!i6-dVF=$pJgthPR>N^@UMz$vj~5jjjiMcwg&E zD-WCO9{KDa5~Z4U`a{-fwP2`?}R^g?@fJsU{<{=lC!eJ>BP4+P%T zlrb~#XGu%;y}vWq+GUe(utIbAbE@5z)Zy|yq`-Sx;4fL-#$v;5q)QA)tiPmLR_?F7 z!7bmp{aY6%vlzLe>}ud5h}Kba(0O$LI&{Oq(4kVmN4>#sA@+>JC~&$%;HC-vE!qYB zyB7F|7WgNQtd9Lp{XW!(Kq>qi4gW^L zzY_QtgnuL9-w60O9R3Z1e{*Fkj%FbWe8jKb1j>*o>A^UdRyc+mI26wk1wO_m?7+tg zrSU_Bo~Qev--7Tj0RM{eO>=Qz+tYn;h2Paf|8cJYbaScV{2>RvRIzMGj!o=Oc%S+) z&rNK(!@XAX%IxIKr}DirVKR@I&lb2cfv&lf_k5vOL5&Lz?Cq85)du$h;Hy4rM}VcT@J zP-fk1zT2_c{NM8k|2>cJ-}4Cn%g!TQ^%1W3_Vx0b57;=}D-_L^R=bVIIle989m{qA zgQ|8L@6Ngwx6R#%;m&fn|APhRI5Tv?ymaGovM?uqM&Oe96Mc|B1-{RkKLx)1Nccof1!`szq(SMuZ8D&<12Lec$b#Gp04+#EsB0x;1um3u=y6h zoz2Gh@JAX0R>%=y5XBymG2Pd|r^hK4pxC*Za{26sGO`pSclyxQ(O^|&+oz$6t~#1? z&2+W^9a((nUA!!)uH1IxSSl?$VwX?IO3=LA1Pvm8SUqjZt~aj~AnM=vvY|dHH)`D% z=;Z@ny9gdxXAab&+597GE;edjleOk>?wSKW{Ryj*$F1O#T+wf{vX;F)lY%ES2L&^- zomuu?9%5>@=A<_JDP|jU)N{){6Ow^OYx10}G5J}Zo5HN;mhvM#gjfgi9fd?<@8+)37NnzVkGQf$4nejOBhz{jy&6uT!6-Bo|bDa5BfsLk*4 zKGV*^DZ;rcMRWSTKHdZECx83%t&Mt+CsG4^FaQk1#~^qZI~v*h;WEwSE&TNHRVuMT zw%9;hY=9L5wglCz{x-mVwpd?Vv1a9}X)ASu3bIp;yi1p#6k&6ZAasKn-4Ndz6p8+M z9Ss&Eck-HtgI|)rfuTNT=P+MjxQ`fSaBzgo8EN?`$Yffi*#hl0Hl+5Crvq&a*m9su z%tLzJT+BoARiL5XK*M}p@VeN=>mc*`I;~@g#p?}$5?>Ah^?3;>ePQWf@bOcZ#zG#l z?R*%;e7H(<9BT5xC2ZVgV~uP-TIy_#n||X;C>wF3nK(Y9lG8>GLK}Hhp4U?A0b9xE zXi(IxL9tqRFW5S_T2-S*@8R_DU7wLcSt2gA^q9}5R2{r=%4%B|%R6bC81b&PMm{jAufo#v|uL&Vx- zGM+nX&rNsEqGHbvgo7m-dRii{XMh5rHF#x?#P4Gq(L2CWs2_&`iu|3TVyM3*q}z@ zmG*`!AA>hK%1MWhKMCJYW*_2nbyA+$@rU>n3iI%6OC{ccr=Ow%jLd3~U3Ei=L)rB} z`6%c6J3I(%Q(*epXJiH`kApU@@SK);ow(8;qTN6JVg7lPe;%VB9tLc$oZ7!7VGbl7 zz3MZ+a(@Vb^S3g}goA|vJW{UQcAp&yl0w&89F`MDKEEehUgZWl-MqVB?$i}Ifqcfr zMCNemK@#^A(NttMY_XFl`%(ICpz)?fzN)j_T5D54pf66RY`5l|?ujbT#u*cMlLL5@ z2XFzpOeA53_8bOQbWf3}OwxA*!ea9TEXyyfkK^%jyiaax$V2j=w-bCW5VXKU?U@sO z@{#w%XWYa| zcf0cy0em@`4asz$wRJRHSlJUf`%$eDomb&ij;|iwAwT}kHEed*Fe7&jk7cW2hEHDg zGQsEgz^}OgJJYA1i7c2YJm8G4MHC<$*!~jpdkRqOEQRBw zap5KasJf=c{^1K(Y4x&_ysT)xZMIQWe>OHb>%XqX(Ih%hLQ~npea@?SzgA;txHFya zVZTAxh+rJ$He$Fu-RXkuD#}gW4;;rJRhlo$T}BGe>me=q`}fAgV( z@SuJMaUC>kGj&V0@2ovYLcL3VHe{DP+x8ZpZL8wX-+9+vjDW~ojxx+6bVI% zH!(EpaBH`FEtDj!!= z<}yu1!dyO)RI>5xYhNsJdrP0zk_mLnk;6L<6?&gsGYoJ4&(rq|@O(v`6xt_n>JU%v z@E_-Q;VE|MXJ++Ki@9VM{^fpI+&_Bx1zGHZpXFbt$j4y1?Bhq5e(Zr%Jehb2w_kNkq3xEDQ_ZEv0|>8Xck zC)vD5|I>6u-|s=+_gvuJ#3Nsp9$;UZjQNzr?Lg-WmOgw+JqHEnADC=W-GZBy>SZV1``>9N)_q!Hb}($jsh?Jl z9VGi;?jaby#(TE6%Z{cu1YVVAWZ4h7Bmm{^@3nt+rCs}!r>MD2(yZLF;u2q8@Kj*S z9dqD=Ya#mE>e@{wmwQ@+*Q|UueaQW@V0_Q*f)_utY18bUvcseQvhe3$g`fZS*nVl$ zd%lA*bvsA`sjD@7;94L#AnkPF_UPTuWSZ+uy^TmGUEODbi{-kBcfYne4sP?Zu>F9W z_d(YSOuSa`mY29^vlp|xq_t-PbuiWhyoqyhVrmb?e?M0_x=D>HcAp*-aw^S!ZS3`^ zdD$$~!EN6D*sAU>6#?F(KaI z|9X*EyR0Q1XG7=Dqe~^p<`vWF$TDBxSU&s2@nyb1xsN`Jz1(Lz2)e=-w7yA2o4qT2 zwu7{*>;QR)foNIj3(}@qC7p?@@L_t1EFm#>4EJ&%$tC3XURHDWRr=P@Rl~sL3e8>x z?Pp$XtHOTikyT-ZFKB&M+&+^b;w4OPlSs4(tdmHqsz#fGMK*^lC&{}F>Q+kX&Tw*g zzo?T%(cS=&gFHA18Fcm}J9Qv^el0LbL(EkiIb22xF;eA|7yb7oD^Q~M$JyRaVH2ck z1Xm^LI85lpnB}LldogMmJ0Ky*LRr76Dnk(rQ&qg|nMM&4(Xv!{qliZmQHatf z)M8EHXhhVuWHQNwh=p8J59%~kLu~c0=BI2<`M5H2h8Ii#^ zUoaX9$D13&9IQ*mlPL~n8e?@E5|MOTG{oX@2}D5#N`>oVEospv+65B0l<|j`gwv4| z`R62&-WYBsiqayK2scGUs4ZO=2Cz^&|89)c1GypoX^h08jTsR#e%k;{)W-3XA@p30 zH~WWLW9b-vO)iv5X2O{maKH>mBKg@Ys*|xqW^J-M84m-45>Y5bVNAlWUWAgZz?}wp zZ@YSjd#E{u4Ug4B5dx}DZcK=}a3&H>rrJexc`~!6Ihhg7E$K#4fh=vCA=+k&_8Fpm zCb6T2S=`i2F?!1=lL{x&F(NdPgd+7Z><5h2CZYAU#JF1GTV1lLDGbfFicAspEh%ng z9bRdVG)186MRZy98nHSI2vU$$#e zL{s7B#*he+GK56BF$^6YVlF`^Wg;@n!AuGm1gK;dEUp)|?Tj-I4kbl@n1JYl23gT3c}QRJaM_Wsk<{#rTOrfO@7; z2S5s=@WuVQA}ZE|TO<6@rNxQ*ng|UGYkU62M+zGR}Be&aDQb?Q_RE<*#iD$>wjF$RUj zLe2@*V^+GQHl0a{aRPJ@8ZKH`7_iqxioQnzeFHs;eVmNX$A=gP_~wgot>Jh}WWE$N zs)tg<)0&Qr0s5OQPI2Qw24bN4nRX0-u4edaUkxyw z0wN+HE43}P$gb0q$tIC#0qslKJ{C(Kp_1mPo1fIl1yHOe>yWJ;@%(kgI}=8;X*Mp^-LZM+2rrZ~i7_2khB z`esrz1yMG}wZL$YU+4$4P~;_m*~d;w<46Kw*%0XVNFrnSC5Z%@NU(>IR08P*3kzlh z%q>{g5U3^!ej1Ed9a=q9?}&5^M7S0!V!;uowEz_$P2m%aF9*Y@ogh2ggnfkK5R#IG zt_U_Ce_BcSt7_L{1)v&G+lEB4ZUdrbgJur8Y+chZE`y#nq8AvB#SNlFI2~$^q>x}V zxQH}#dL)%(@0U4{ZUl{Kidjyf^rBdSINStQ03f1^+hS=`qXZ94nPf$BBM2DU@k|O7 zeTJCcMmC8o3A+vJ$SvmZa(0Rvnt|v@8hy)j#vC!C5>f(zLx9dTx!B}1M;BAKMr*LA zMEW#zJIW#r;g)y?hd~-mqg4$J=}6{8BXE+4vPGdL!PviNi0Vsd#*|}NUwjco6i#o! z7ZZwvuHJh96GMI#l_!aL{Eq)?eXJyTWrUxe`Rdzr9{B~v$Dv^w3V*@s5*J`0J$0Uq zHf679Kn1@7pQ9=SSV(mR^nme!tpdEJt(UGTXU>Y|JCGE>RGMLUqVGUYd%h6rjoZ4* z1mFCYkCDUVHE;zK@pGgPM(zu6q%TJ5dvT;6Mw)R?`m4pRdiqzok_Nbw2D+05xswLd z8DwseD{}~C4z(u^rNm+O#9{Ws%XFE{@cHy5@e$7AwD2?1Ssu^cUr}Us33Y!UXnc=K z2b7Y+Ab+4-CKTX;2a#W;Gz7$Ulw4r3C61Pf-S5*;?&9Ne6d&&dt+MA&z!zCKb4maje(460i*?a|vJ`?HIr4vvbyfIoi_)I>tRD%y%apqnt7H9Ay@`%Pe#!EwG`% z^2 zw5~y7kV*_H#+wZFD3qY+^PeEUVivz_+&G%Jk@Cct&Rx$fomqP}qxS4HVI`UCFWLL| z_D)pVII@-4dbYfz ztAg(v^U9Y8Ul{Wdgn28Ormxr_zry|%K@{0Da65Q9=?4jF? z^<6$sh;sV+-8QR?%C7SWhkiciUO+g$Zhi%Bh1nW_xiA+@A8s*cZkKGZC0@ks9#w#m ziz(?6?jE_E$Z0z&U1tm*^;y}My0h=qIu?L61$Xf>eW=y4VOFrz3XbJ_>ig+u>O1ug zeV2Z@KG{MIoZBs9S5Rz^jP0q!<9L%SJXgw$D+%l>8M}%)xsPo)TEh4HptUzfAsL0A ztEu=m^o}a4iQiOwd6p6z@HHlw8__v1`vrX&>@IbVSG|XuEmx|)k|gb0w9q?H?HSJa zHuraLHRme2D6No_t_^aZx@x;FD{SzgbS+c*r~ammHazFc^ex|{MH2x z|G;AYcTHcwB$ii?*9EPV$(2@kw-Vk_X;YOOD3M(|4wr&^;|XEBLh(J*8<1VUn{M9Y z8X)Ns*>JA!#-6LgP1)4pC;k& zle4PB$zJMkVwdW0Vh(jUu_x+qV)xX+l>A{zc&w)u470!BqpHJ++0@}i*>Jbd%M=W< zOM8Wr@%`y`#;2S+Ld2?5a|4aE}i+o2)<@rmdCW@7RvrD)M7uq7R*^pE1dI&NtjBvfbqx zUYANa7JxC6Xa4=1o5$YaFJv7Ja`A4fRA5T1_oA)N3o`72RQ36nsz?1RQn3Zp3wIeV z^xfr>Bp-UO6uC!9I-8SztvK3v$+=$|^~pj7RWadn6D{_lAozXyujqPkkkosnq&ik( zED;OfSCG6|e5f#4d|wV0XPflQRVO`P7FLp+T^&Ww0^6msHh{gvz`>4^z|FnR^@;O3 z75TZJ<)>(p_|6E7KR~GuG6#P=91A{_4}`+3=uCObw#`&>r9;*He7;6*c?DlAEb|6; zQFgGcEM`sBY~u1TQT7PU4@x0ng&qHAOWTDcsK3!4WkG$6o{w|n33~pPBTtsAT;($i z5PS+hB0-_23E&x7hK0aLqRR0#nz5AftbIoLJA!@=qkzpn45!%27fgOX-w-cDOsP>P zvFtogg7JaCQS}sWKDQU89|f@o_x=X;9o?^ z+(zwEq4TUtOl4H_U#4&Wy&~s@^O)G4BY2VJU6;hXQevTbmB3yjV(0p?QLlUI|3pjw zU(c@p(8xPG5y=}}8Id<~+i9NrzDZ;qqsh@2i2s4Db$?_be5>5mdvCLlz2nZ=$2otZ z=eu70Ug?32e*Vlw-|JaXql3y-9DgxzC|cQ7y?@PBuM-cHK{xU5h9~m{;oWD_ZrNlQ zi&oo5@$PtZ@bfp9AI*&WJDGrMoPIL7U4PU6mc#A(TUTz^-*UQLf6MN6sYA#=DEps) zv8Qh7OE$Okr5?GZAZ4%RI}OUe_>I3jG}`Z5wK`P;o*xhi|F&eaP+n{B;rxeat^Ea zvx8dkd-l2JejBguwB;n>=(qi&+Y7rFOS)%CT!eqp4bj0ik)w z@cRUJrgVYM@;PPX6wT7R|IbE5^L1%Wo4-G!gsZ$^y(F^-d_h?I1!K$RV({P;H$33e zTz)u8<|p~yQ^7nD$kWuh;N$t~{Kd*PPXw@Ae}sLW;{oSRE3GW&iO?APM8^d<%vniR zICt7us07RY+mEq_f&*}D8O>kKP#_`Z*G$1D<-Om}vrnzWjrCRYEcMUuDD+f$eO5kQ znDv7E;A{cKUX@3yU&Ba0{KEEpe|NX0E;`WdD+#l`8!&I?f*A!cy+oi;>jt9yEHDW2 zbAf1d&2#oKNtmBaQ6RkLFn4sKpSS|R3>WGvfq(`NdoTUK`mACvZ9aYt=4=EzJ2#lT z_ru$hy2WR^`k{!wLwF@w{@dyLhhj~BUa*)ypx9f(X?Ky}FaQ@&un(=0*ZDr>8QsKg z&FC13j~wuPV2F!B2is+LDb)W-*Bw}StD~K_()WyRbENjbm7gKp%=>|d-7`l7J{x7O zz76>hJr&I{O7!&}C6)-&1p16c7`d$X2PNvG)t4%pX7ppt80@U6zjsaVdM!DUjfIvC zu?Pvo$9>duL|IS)w}kkuL3rPUeOrPVRGfs3^OZb-q~cFNy2uhH@DLm|4yl*L(@ z;*+oH5Kl&UExKw|=1n&b@%fNi8UeSGZ5pJJzRk~52W_9RLTwD{_o?Q{F)7hh}Y=k#B{^WN#S*9G10ZM!pq3 zM7E3%E;V><+~XdH3vF4;J8Ul$zN zO`q5J95zJA5Z2RZF%){lJXtYOd}WMi%w(G9O`EoH=(I)RuNk^$faA4vAy(z#*T730Ujr{;B+sjJyfJyX233r% zH^0lX0+Ebjp&zYP_UkW4Z}4h15OQPfz&KiJ#Ch`=D`qOB+dvnrHSKrF#D14--mj7% zDZRB^hlSsB9R-$5H*3mDl;eDGPs%0svt09jmNQQRfAR^+e5uyWqQLi5H$hoQZHdU= z>B5~;D33YWQ+WiP-2-^V_bx?VUu1YN2TOSnHTxZEr*@KW)5a4`3;JoB?PN#L zQyjDj4%(>>+G!42wU3XuPA{f)BO;#e$ltg+MIc2v1foSh(UIgN2W_&0R^y;eanPnZ zXlFQRXF5t%qN>7Kxl}<5_NpEG*^U(7;h??KL7V2FO?S{{I7%=V>+hbpT7NSgVP`pL zvmLZK4%%D??HmW~T%wItY4dzquj6kA*AjKUqa+vDq_gZa>Ky47J7W8|P1<3HT;Pc9 zU5?oPXtN#TV0*)6Tj)sPJO?f9ppA0ShC7noVw0Y*LmuylE#sgqa?ln#X!Q=-5(jOm zgLb}yc7cO-p@X)}A%Qz=#ar%Fyo<=*J>=2h&uuwcJhuuLhgk)Prw2y!B|c9eB~zDu z713~bkT4n5vAq=nT$lLu5bzoA5CX!V6@Fm0U6}&cN%*x9FiI-n;*g;b<9<&uKC60G z&bw32dr}zKuW(!}i{VzlAlLy&mirm?Mpwd1Hu@zu`~17fFWHZD#**eNK?xUlTaWdU z&3^7R=Ar7ak*4LCr~C9gv6t00`k375+l zc%kvTOgbvl>UUYKdiRw@w1%2QBdH|&gW$(t^icbnl}?&zFDL&u-32C{>QV8{ji?bk_Q8XSNHcBLWOj#dpN-*0$!g8&(1ICb|H( zm%agYPe1~8bz~dY5$>17h%?=%t!nM;T)%c>R;3}5YD0j|sd9I$Z`U~6TiY}@B7`Xf z#O71nO=|(!Pk_7vcv=JCs0mO#6AcoBb3n>g73x-^Q?}HB^g1@QcPUdi4q3U`^R@&y zz73l-u)cu2#aq`3p6ePn!*456*!LE~;dO&u0)iXC3rlddW#=vQ;D2jN+xm{|g{xb; za=~$OG*AUE60p~*nHvCAI~o~lJK*oq>Qn=#1xSJ%5wvqnYr9YYKnF$0J&teK0g9v} zg%WruLHsr@ks5_R*;NQ3%XDb;G;hXe;9WJEWxjg!_|qnx?43gpisyE8tnW}!TsytS zr2yut0=uqj-3&048`iaXSeKK$%UU}+yJ(t;l*wM}B>GCPUxg5btFmdpa&DHf2;fa* zt3eh_2|g}B97`4Nj!<%2Cwpz#&0R}cn-GMwKHCE5p@>i2+11#*h82lt>@rs7E+{N_ z*91O-QBnXiaqZgdT9wqAg&^>!sj-8=vxOfyz)M60ERC!|1_X4}@V`oe=x#>%!cM^Z z3!ptY*kzFGrT{IMkaL?ibg)*uwykZw*Sxl~i~U@-mi^SM0%r~TX|G{*bKqks(70JKya<2V17qS^lNYqW4LO_Ll5w0%vkc31lTmhga$JjvBZNiM_c=7>|JfUQhnsT_{(XE}M zJF@TI(8@ZpY5+~$h@iV|*-ZrU%K^d#U^s#CD(Jij@7;i(1a^$z+X}2U*f#QBL{Os0 zH5*XqC)YFE&A1V@y_5CJ96MUyIZ$zi1MGK1dnd4NM9)TC`V9uuy~M*0zF;_@0p>4h z&$62B%(kp!S<_+hIj}zg<~KHVDnRuL!grvTgj?U7ZC%U3>p5&_%Thje2+;CznBtkx z`T&B=fpZ(g=z>7Z0Xr9JW?6vKJ_+5+y>`l-4$Vy%?h>fEW$uQKPJmhkq;z^j0Xr)) zWN5zdWds4A4pBEy%Jc~}+T7UDz=waJciArCYH!_~UCY@?0|g3ufUAw3Oe5*<7MImx zzAmbZce0arGUG)GQ$VOuUKpOSz=cI&y)^5)2>h4~eLJ((4NQGF&@VbsrMM}hI0Y=O z1)7^(#f*JRW4jyWzF?qniEmGc-@2~z0^Sfch;RjqT1B4@ z3=;>QmQeZxe=l&7Idn09aDh;QsdRuV%m%g+-C09`=8jGUA)3&=8|K2qL_$GtVS}tz zu8%mT<{4Yk-q;M)p*-$D$odGf?}Xn6rg<<}W!cVlDK6k9@L~Ak_`@8Hd81mgKq@vs z_2$h2D%pHvqLCh@5McNgzP4^L5fwfFNM<@(*G5V*yNhi9?MdSCyd`(Q+|*O1o-qIb zl*?u@+LFC-izIn;rYEjAW3YF-D5LYl#C5aa08!1Bt@i#4XBBwFux9rCSg=-YG7Lh7 zuf#(cN|52Dl2C>OGR!RxWk@2!6-S3M3`T~VM};z!BExs8LK(`Cp?X{>Lpd_+sSag0 z0vWEYp+(9e>H?(3H&kDZ96mKP#v?JtnzKV0jzWgt&k1EX8X2yt4P`ink~lAvVHgQ+ zaVW!ZWVmx_D8mS3m~nn6!$@TK@`a%c$0EZ`D?%BLLx$xmLm7@ohI1RY#k|=YU2Vd= zG;}+xH78PfD@@s~uoI8ORH&7m3aM-vHf1)&`9mSDk)F;{!dTE7H`G&%hFi^Dy-JcN z=%;W_$5qNvbRU{HJb4&|q8?34li;%$;+wc3ia;*$b*?191XR*uSjO_IVqU`>UUP zr6Ou7rJ_TDLh8CCl*ms?hlClQZV3xBUJWxYtxDfYXI$VF66O>;opFJet&E4Dr$)iX zrfGknQr*7dd}_wVrD?5qsQwQ7snd;M1vCRi39Qp@{4|`RB!q%lou04zhn$u({MGPB z@$+brt;nz1fqJ^K;9ZJnq!WQAVwpsH9}@|J69B7+K;7RzY zVS6{SNnzB<0f{=!N*XJ`#5Na2F|m8l#GaAj8dL=6z-J*K>e-2R;FirqsZ+Kn+23~- zQ%5xosna<|$}~)OhJq$_v@hv|xI2pj6mZ}U)oV6|A-EzDGfU6;OywNhb(&jmmG>NG zbApJ^Mf15g?s;X{k}ty2&I@vig_tMxW+KvS>y2hKoJE@>53p-F))>~hM#+nTu@M>1 zRP;B=Gj(RF|FUyYj8__MSso>~F)7aZc!F(|Qa#g=GQp#Mq%==I!jgE@dy6)z$gOFZ ze`vaA=2cU{uiNvVscDNeMS^u;x3%5~r3~2$QVmN}X>i|SadI$Bl7<*H+i>R78f)~Sv*)v;c6 zw5yJHtBwxU(WyGRR7Xa2Y)~B=RmUdPv6&oj4#cO)*p>>#@g8tY;EpT6aRPT-363MV z9vs`b`OvqntZFUZK9Pj=;g7t6RLS$3fRJSadD7ByLT7qU2~$+!?@`$AUuSHHn%ObwE>6 zMxUcUe4uuh`<1J4mAp%aLu6$%tEK?ty%l?wPpU_i&gNd9tc61xC9gX}e99H#Q!GS| z5}(ai0npBGs~wo)NAGgWve32N#$QtFx8C6;7#GXcN6}5d@9lNL?Zw-ROiNjS-CkZK zI}zCdeOm2+?g$$95eoC2VweyN2&wnI%kWoDs@)||wW&N)tT^sA{FONF=BM2f0PuQC z;?rt-FM zQ+d2Jl@}CA&+t~cBtolPlBZQJv0LR3TrY!5$vEG}3t}t;~y$rFpUHzf;M_Up>?JK{=Bdqk9$sa-N=0#ti*HuFwzU3%w&( z=p9BOtkC!83VnaR(A)D!?Th&PA0g4-XT+5W?OeZ*Qq*xTj$;3l6IZ6v>SeaC`QdHb z3dKGi#=OORGw0RPo($zj!JmXY0Z0WuDXz0GuvBW78O5V?h&qVkQGqz>CNGq4J)(Hw25dK8(nPU3N=$+o-9eEWzWY5tfmGtJVt7{HM9P`8G z$YAFdit{xJK?~`VP#(9~@mr8U z|D_IVH1-*;q*Xwbu>l?Yb zzFCjT{|$6Jk(#e9>OY}D(4lF&$t8PUggX!$N?k#6rT8tZ>6E*u+_d#s=YFo}+&^+{ zqaNWUzD=}Bf~5wJq4gGYD4<>(5kOgl^U?x6WU(<(2@U8%Ea)=c6+$Lq#55n`toBBj zesmpMWRrZpi)#Y^t>QU1CZ2@2D+gj-`v-4@b?xzdUE64NxcKosbCLV%r9hrW;|&n} z947d@f}_>$&|N5OC;XKY+64W+*cXG90-Wsrk5p*2RXm04Kd9HAmwFnh&oHVEdcIgg2a#Tb~ktY7#tTvw|5P11?BlI?;6fpmY;Q2bk)cNgC;_Oy9cbS~WtDMhkaXJ`wYflUfGmuM2{!MRtgLKQ#JIT7f0#en$W!eOjiL$c~Pe@@%89Km>!JyB|;7P1?H6S zKYLPgRGZT1TK%k;g@gH*^;lm<)}K?XR~xaSzd4IHyww8E%{ap|wS6VA$E319uMjxM z%gl}Ak#z`|*2B2andsFD@G3sp<`&Bybv8ni!52e>^J1aG*<)k1@`SE75^~Dx#eDLz z!bg_ZMY_CxcQBgT>V7UbJ;HL`W^YTZfSm*KhxFL5!w>Zm3jfXz~kr zqJ;gvmXB+~CcZ}<_kpMvSLBOF$w|`VT!~wel0^@Xx&c^7f;g|ebViCA~YzotNmiNiSLvQFW^mwS{qx=wF7G3TgePRu>3+57KN zO&>-znppORh-Gh|#IiTHSoY=bj5Ab(>h%v~}N%>~;M8L#nL2A}pcDb?R@@q&#JY7XFczb4;yT z99jS?-lz+KaOPu9luCTsuEa6UN_@_7%D&3U+5L8^ZoZR}^b&uHdL6BWgKWJKHNbs5 zz@MWA*oPa{?nQqV&vWKY7uicx(~4lQloZu?mS%FM*lpg9k%{c0^}=9DD!RF5DZUz7 z*Ev(HJ){(|j2)pV=9FsbAxX7X;>Vjd;fm<_urJ<($*2J9v0_FP>+xDl=NjZCHig;` zO+>-ft6X+Ot40~3*fUmG|1#aSP5orWG|s;|Isf)%+dIu~zdQ+1X>UR7#}}d}3hdfa zXLz%gN4nyHY}%m@$kfmCL`6;1p8Tn>V>>{xZF44dz_n|_=zkB%!t1;MFVBPm;AC{B z-O0Uf1!8#|FER@U98k|zdBFw0ejP-Z&An8OmNT$YY}@w2%-gnY+eWWMr=EJM%#OSq0)f3M3v9warju#0H^(;N??JnO`&Jk@mA5ZoCjlS zUiQg?e$(z}{;oe8^|)Q3e>Vdx%FqDc$c&iAu;?BU`hmw-aV`Ml)hwCP3M+yA;EkHK z7d5NQP(3ztKM=Cfdw>ZtN66?E$(wDtU5TYujXr`k%B!~Y@K$YASPjNR4LWX>xoYsx z_&B-}@(!Q;3Ly8#-BUU=&!0q6}*4OuHWTTOERJQ{y|J3OC=dNP1J+-0e^sI8nHZ$v?t{-szJN5l+$93 zWY}3ERv!_bY)D7dAIVmQSfOVMSxtJ2*sEtwk7BPX4SO{}cB0zJ`MiU3my>h%n>}9~ zpykjwJeV82Cm6%`1dryAw#L!52iC2=7P^Y`yiTnarop|6nok?!^xCYMMT-^-MtNXy zj4?^EAD)=4&~ULc7RJ6?r|#-o>7uu_I6RVT%fX_>2-PNB4uHZjfOXfu@;R)v-=89O zF9(Jj^*$NksFfML(h4x@`%kuFbr|)9wo#8b{Q9@~Kdk0I7Cz1>xFy@xMBMt>7d(kmZ*-F4bl7`om^#%#@r z21)l#%7Ur@wbCtz7X&bf{rl80DcU9*P>Fi#z8!}4=>)4OBCeSSgU zU^2~K$w>wh0-AElq>4w;C zy^@(&M@BIX@!fw~O$wb$D z&+$fR#mWRTBIGR^erH8aXLL*}N8BR2+rSd_-lU1Zg&7HTlOlpcc1 zJ{Vq14*_P^N<7Y`%u;}3E$?D@cRg`0?}2R3Q-!CsbXp8Au_x{c4OuNbT_I2Rt-*E? zJhL9Nb3Z9}OP#E>R5P6#CN;HnO!3pG=Ev#tLOC)J6UXu44BAMAPZp2UXMvKV%8buu z(8eV+H8fXx20=-ZQ*mbAiHGp&$DE4L_c=72s{NiZBmRQu8+cVxhR?8O z&L*EtdtQiRj5R6N8N1CyLiudkZZ0DeONMGY;LU6k_@Y4v_nU)?_4pzw!tv(&1#yT5 zligkyUKM9xRmANn91mNmfhKHMkieetv`kPQTqW5KDSRd@bw#JoBr6y5F~9FHt9QGo zR`4C+jPEQg%~a2*i|wMWa)xw?05^>pEuI^)Awee87#loaTSFw7qOE?jw^$uD9j+S(I3ALe9j-;Ch zJ{=VH&4WTUq6^0g_qqGW{4%d{%DhUE`R-gY?+%rDw;}UxMdsZu5$<-#ygN?- zr_8(4YO0FNcZbNlTa)=s@z5sln9n1#o4{#@)&$1FjtEPd%lf&rF6vUKoKb>jX9$m` z%v2Ip(MYVcQE`uK4;o8Gi^FIrLd9!ECDhKB6(yvRJ3wC>hZ-Q@F~$s{=-P;`6zlX6 zrQ(csRDEde$f&sP2o-1ZXf495xZRG5>$X@jS{!O?6QWlej9qcvc>?scg{c7op6CG^ z2;}z_$7W$+ON(*$I_xArEnx`dpxs<;jl;qV2N66k&(nT|uHn3y@B2;i75R@Bi&PJx z_B<{!$&W%k;JOO3)5&_j#mZ8dK@yosEn*(_A+!ACY(IrHJjbuq>k6H7B^AYmu5*0U zy2{)5S#4z#f*;7xYEst#_J<`IoFaRHXR465PzYfeoVd=?a05h95{y4&g-KXS$xx*l z5Xx{{W0hNk>=0(3VlA)VL zeCLa=;FTxA@mtj=mE)M%gy5K2ZvL1!XLe`8;EdyDl(-47z*mu3@r9@>_*>Wq@%iRr zfLk2|>O9;x5*(>79q671(`9zTTt#)_kuIXXX{2pMTfFb`6@>E>u<0%IZ65v{R04bx zV+!4@W`>}u(Cue&TMidU}%Zq)o`tTYxlKxzQ#h&-14* zBmjaDGNyxOAf%y!ws>}YXyf6I}~_8Ope9CF$g+uyU^${-)!WsV7vL9Z*6>~l{29WW>!)aV4~`5A zmEgx6FYpnUyw->7$Z~9zywIO6##id8nNc|YUzWeBY!<327;w$7SlFN8Y9y%;4q4q> zy*@`#AvDJ10kIwH@D%Fg5TR5tDeTKVF(A*2cgR$3I4M%d(<#IA9qo+C!|FT>!MpP0 z#rnXlXXu{vTtuD}s?4*r-JVISe~Tw>QSCZclc zp?>Wdp)QURYL^-6k|?3B@^a3~hv}BJm|nDwHX|RV`-`yPm6Uk^4H{u;kRzk@rYJ*- zcM7)iq^A2Ts1e_Rikb9tr;SXndPXe8aI_s34N$2^aHUQT_96X2a0=Z>6ON@1f)nTl zy&U&g6K|;G7@kIF)G-EiOqxc3I<*R^)dm$uk%?Ufbysj^+tv2s!Fs_;TC12)q|nCu z4wYUQH@ezjHzI7NEw?MABgafTSZNQNY0IT}=@2vR<6^RMW6l#prEtOqPS$`unp0t{ zIf>QgmXOWVU^P0X?7TReL%`5&MrQfTZ?O zB4$i!ZEukSY^v#wiA~=rWGViP@T-F&So5dg40E!1gpQCD6e+OrxHnDI&p-?58@H23*SvVnWOZE9F0I=-lqZJ zBo?FYbrt13>!))FRAeYdTRU;>+yHa&NG_vDWR#_4wH1^M7f}mwaMx2zn_S1&$lH9xJ5QwKg%JJU6?V0OJF>w!QJ>PX| z_k%0v<)u6VB1387kd}Ot>@=!tAnDe=DrH_)_xyUa29vSXw?}4qYnBQ_Asm-GMU!U0#bF z71&U5rB&nc)Q%=j9nI5&`n7Y--O=<W;bItC0cnJzSLj z9L(AERIHcvC+L1_ z68Rds{`Auhc;)?4OeE}SD=m>8S0X*`M1lvUcJw-*TI`!-nsQ2po;h&HfNAFM9TGFd z@*s$1MNYA(DfEP;&|{_$$mGFZ?Ren_V53MS+~}+C&X2^7@q^T|;`kARo3e{C`GJQx z^EqT3;3yYbmhX7NGw&9ZjD(&;!|h9mV-4QXk1NNnoTso@kck^0SqMWY>nXWM_91_| ze9dt%?oh@Pad`4l?ZF=I71_{I%y_+n!Jt>Qd$YWm@e=lV4I5vwV$5Qn{||UPyEeTp Br`G@g diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts.txt b/modules/graphxmlswfcharts/xml_swf_charts/charts.txt deleted file mode 100644 index 0af122356..000000000 --- a/modules/graphxmlswfcharts/xml_swf_charts/charts.txt +++ /dev/null @@ -1 +0,0 @@ -XML/SWF Charts.php V5 ---------------------------------- Copyright (c) 2003-2008, maani.us ---------------------------------- XML/SWF Charts is a shareware. See this web page for more information: http://www.maani.us/xml_charts/ See this web page for licensing information: http://www.maani.us/xml_charts/index.php?menu=License \ No newline at end of file diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/ar3d.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/ar3d.swf deleted file mode 100644 index 91a323822e5ea6919e1f95a76030543ad5b9f9a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10349 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 diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/brno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/brno.swf deleted file mode 100644 index e96c6ae654fe1b25bf01c9c604d88e11cb59588c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8660 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 diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/brst.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/brst.swf deleted file mode 100644 index c0cc86936910c88c2520ed9c335ec08fb6619622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8646 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 YO@OnY-=i~LZSQL!XTtaY1Mo3P2;;EOPXGV_ diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/buno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/buno.swf deleted file mode 100644 index 45871cda51c97689065115865bc8e80530c2221e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7014 zcmV-s8=2%oS5pYnfdBw_oaH@xfE;Cg-_Gsb&T)I>a!H7oISAk*R6w#p9wLO~lI&eg z=E5bBgi6=R?cCmyz1?GX?-9TUt*Nh89^zFRMG=JtTeXT}3kYIGrL7pPt&i9i3PnUj z>!V^J+u!$?neR2Tb9bAd_Ws!2@AZ5Ce&6qV%-jr0K8jG+=MYLK(1yhb{`!qZqk%fs zw%vXWLT~TsM2XylQ+3OAR9H7ttmUSh(xi*Vi)G}jcWN#w^p82!damk@)X`ov<`xTM zb+pB)k0EDw4UIc9s9KpU=e>R{fI2lK-pf z{n{P;DxnQkXL=Y*#o6rab*rdQbtcAgXk9)}%N~VHG8>$_+#N~sQdsJr8! z5#R|+U^^730_%GxTxgrA=g21-16GTLGMZxF@3iwG=jZ> z{%}w~d~GR~w}5{Tpt%z6=>ejp!Zx>Bbg?4pxq>r+b~{z_U07eK*DK@OeUoIqMR@|& za4ToAqooSSqp;Z>tp{UDP~!R&`WfnN6V3=I8zeV{Mkv?{qgB9GA~s#GupiKAuuMh2j&-lP~f-4J>}qZ>5Ihx6zO^LYpw)$SMI85XA3aNlEAcnLv0T-&p zd=89P7Cfn+LWM2G88;763uUqYqS~}W&ArB)m0H`lb9tr8iJt18wiU}Y91$y%b@ELe z$IT;WTOAM~XCp|5j;AbuX$i2(AkJOj3X|nJYoou57|t%g3J-O>NXx}_7M>lVl?oVN znZ?U|(J55Q5F#cgg5UYdGwl;yD)o0x6C`FsQjZ$>%PfLSF|S z(A@e-khzcJ5;7060_AhG=t5M*VVE|06PHsi0M)xEOC`5X9D?*2pffy!P}}NON#tZ@ z{2N<%6+8=(7(v+0xib?b92FfUXyGXcjcs-E`8*CgV}n?nV2o(WubcAg91NdnhfZu> zRG>o7&7i{2=qLotohY~0`@M@s|6Cr2f0C$pDjC@Zp&S8mU2f z+rda$(_v@(ZZgnp+|C-zDU?b8Rx?Ga&0)Dqr>zd^>Q-T=yChJ@4EF`Sx=61y`RpDf z9Ihlp9~*S=hSQ2gFdW)@SaGpE+fLiN2-qHrmstS=98L%LXm7RH-NmYajb*H9 znZ5OG0DNe+13~R^FpTJAd6pv2Vw^^R^F_nUp{IGg`C_Ff0lPv_!U`MLwaaDzb(T

NE8HUyJ8T;W)T`tL4$L?YJyWbJh<$Lv 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 TJ-Qgwb3rq?5Ptt3X+pHPU*zA% diff --git a/modules/graphxmlswfcharts/xml_swf_charts/index.php b/modules/graphxmlswfcharts/xml_swf_charts/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphxmlswfcharts/xml_swf_charts/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file

2tJR$gbB9WW9GN?Hz_<3^h^ArK%DFn+)gu0iIx|a%dFC}#^6Y5?@ zWW5M4EF`mdIhDvN^HfD5eG%eLVsWpsB=P}L*V8>I z_u8`w)JE;NpV;x~dIg;k4;m&=t7DJ(S6)CUJ+mn|)rsP9v>J0{4EAouES-s#M-EHq zhrK*vn9v({ev_#+;Mmmq9W!1~lB+s(os`IB+39Sb)^DQ1XEULwA#?t5HLeOzqS6J~ zo`GTyfnb8St(-Tqljn}?WIeK8E=;ds>RrfXB%tzz|7}E7Y$>M8}LWcn41Z}b-zJeVtUq_ z=USNEPDUM+qJj5wQzVtq`pDjWvu()SU|^{22|Q_InQe?Avr$0Mj)1i15zY)Yn48Q^ z7Mb?@X481u&zk2z1~s7OTArT*q^}VF=Ny(+^nzoht^-hJ2mKl}*I5A7{C#ty`C47MQvxPd_o?Rp)TSG$g5E-&nsM{)LL|hVc@i5j44R0H)V1iwOXzbd+ zQjs&wV=as{)W6RVI`sz4V0<}3dOvpW)n+?iSiu)wkZx~a1+a;3__2OS z;A1h9`s&m=PXqlp7_3fhl*$)K<>RIDda1ltDrcIsZ;;A)sVviXPEaO%I?ebrD4$E4 zz`aN+%l$Vs;bWClzOV^CSuV01&zJbz9l|I0)?&$sxu&H-6KC0eKj<+c1ckg!rbt&< zYv4)>u^XaJ-~gi+4F&Z(b@kLib&Df;gGCvktYMmtP<95Ij!^auB1U-f@ltFO+m<7t zLkc>OMs8fD*|>~;9K~0#N&W!8#{A^qhJ+@Rdx_-=k)keW^cAB(?~EGP897d&fbeya z2n9skDRmpdwo>G6h1gcn0+d0mJO;>F;k~D4sovTrO8?bh6VpPKu^6=J*ADG68wBWYJy<(FSWW)TU0>)M*dVv=L0J zESgrB;ZXB9i(2ieL?C5LZiduMRQBf^vR^mz&rFnmX2Sh56Xliq6Blu@# z9{!n$>7SWc{+S8!&xjqcw2DLPpYMp$$eBtkR{S#)=ARjje=4d|5h(td3G>fP;GdwE zl3oLQ6xm#^)ac}=N>A^jnQ$M?g!^bF)JH4x_R-4Rd~|}ab%k^$C3({X@un+u-sF#m zxf|!D1$pkCAnLq=G%Dk&&Bj&banezbN@Z1{5?HUXE_H%+l3PfM>CDtHH)vWIG!t*o zUOB_^$y*wnX>|`_-mWCjI3v0$aELU*8zfg7SY2OBV8Blk2XNFMWEahR zH!l_bxB<&7D>tp+nmk0;&J}`GgZH~USl4M`Nj1X3-VuhXaEoE_q4oL;mV+kV(iZnb zGJFBpniEIg4*Y%PT?x7MoeE{YBX*-6jLm;o9L=j<8Hjyc5&Jt7THZBZvB#tM+677F zx629n+ZM^lYZW&Tu)RPgOqm)sJ1bggyMIYL&>GlWFzO^1UaH->3#C|qk5UTZH;gxz1MsCsP49Tkc8 zFh$;|DDp-{kvGm&k?Iu$+I5B1MCSJ&#>?+zh{7bG533^o%WVs z=`8P8SzcXPesH!=@bpb`!6FD{Q2ue9Kf4)oe8|;yjjjbrtL0&WlWYjACyV- zlop_$rnf2XLRyH*z%G7dmw;qCSe9dm?!qB9CmYGfwJExXAprQ0tx;B72Mmp*AG8)4 zG~x4Rdh=BBV~N^ZMAK5u-QQvu=uz#BTpoHg$!k9xY#V!Vzr{|GLguXmF!7IDEt#B; zuzig?3{1~QSxWO^OA(US-6yo00uW-Ikm^24I?5d}Bs7;Khhsj!T^mgz;J2Cx%%Ey^s6%Jm+xx z8V6_1rMz?5rMyp?uQmV1zm%8oGGXpgUc$?Txl4Jp&L)QieW`CY8V&zK9&HjYHEwHiM zT4Q6U8xewOp*$iDWn&8r<3=x+$mUpO@KAJE(oKH%RFzTFz4 z6OC}CQ=UgYZPSVV#W=MKNMwKv^&oKludtf$wo}ucBG99=4mM8F8~eV*cx6&!{8T z$IO(LlJ)UtBP?FGVs44)$6YdCL6*#SF&Tc=qSA@KWWGz0y>>@<;D~#ce(iZgJWIQD zjpJGIXl#z;$ghu?XQ|q4=2>@z>>&Fq--@{M{l*Ko^8L(QR=%~sfDC!%D@}&nLO3&* zg|IMLewEx$xYJS|#<+*$_H$vY*aLEhU=@2HAk7e0u^D9*n^9J=8EzFD%-RvF*o?o5 zy$RP*3f|Cnv@?Nt=^*#engBOyrF|~H(nkDB`@06P{Ase-*#J50Tj{e<&DV-a_Ow*9 z^&ThX8a;EvowSRc1KL$!Mw7#4G&yWWNbZFNbw-oFW@6>9SIdI&*q$>}f7=44gr)8L znY!JOn9@Cqh{>O)?lv!w&D&a|yZaM*HnR&;;zGH*v^7e66g5-goVnY$Fca0U9p}$s zoTp1~r%#vO33JfaJ~kIgVe#+ivBx5$nF0L?{)A_PVg5y1`IP=Fg8pu~Tj+gU449(5 zTbxOG0QZF9xmWHMg6H!bo_oXbOsaSuiB8b!p0ZU)(xkM2n>Fxt?;H*@RDgE}FVBfQ zPNcNor%K`O`AOlv7*bdm%PrzhXSMe&)M_=>q_f)aEABC^R^x@AnxDRA;#;joJE|tz zeeI}So2p6U^xvKzTlch>Elc&YC{8t_!4e-MJ%JF}yn2vaApaaXQX)uV5opjqL}E#_ zWJq?P9ZM4iA}W5~{}y*Uj}rV({wnHgczM*zR#9)oh40|~oew1Nw$+Yc+iC|V=*3jT zA0w}RdpLMg+rwNR_NKNq``#*cZk=&_E(K~eySh(;J1HZlGTjsx*|0)dOqw+x( zmHk2f7e%Lcybk{OfS6= zlzD%YG8Z&uuCjDIhP?twQfjD#m{#{M;$QWP&~e^lX28bxbng>MhF!Vd7y4Ks_2n}I z!?(2EHB%oTx7+Jm1~YNtUqeomtsKXm+QzAMWwo>^_{_AV)3 z;>OTHZ+XIP4AHvKjUn1BZVb`7$c-WH_5f7;8yWELoW~rZ+dU_G!313LkY>P;diCFu&0${f%DKmvlnMVNCH${cYED*aPE=}6;A-~irWC2hQfkzRh$S|%wc*gR4#}7cT#4~I&Lu%_P06tpayk|QQ=yW#+N;SER!_vZ z4dkhUka!Z_o+k&Dl6cDpoN;WW`3hW4k z?hs`>6^fXT5Ql93j)fw*E*;`7dfVeig6lqI@i)mH*HQVjK;<4n<zMRDF3=0J z@Q*dX@aNMOc|6X1Mz;$bKq&9D6oSYKd^&FD=5`~ns1-|a6(<`rw0yHer`!UY zVs+WAp7Li%)sOI1Ct!MfE<>YTL$B9EBCFDvNBrHhpYXe9kK)2h5|n1Lp%=<_Si+ewTQ-HgJ{x-e)L+{0 zYVD%$R5~GVRBq|+gN;{HfOt1dU3H;C5 zy%W5F%7vR>*nIZzOPdOa+zCbW?alwAyuI0iXo%gYLq{ttMqd{!MlTUODP#joczv_7 z3O)vzziLmI56z9;Inf+K*Y|k3o`H#gUV(Uqv#-Z&`a&Ra{^9NflLur`-1)Z$@p1CU zR#r?mmp=RMe*WLZb)c?0P#gVsM99GZoCqZy(tv;Cjwpr8GYK*S*1{iL03_1~JH#nV{Ow`m{p<^5j}Z4dFrv)8pJw6CG|#rTg+ z;QzT}XvP>Q+3pP>qOBo4aK0nVtpqLoWO{><7>W*@mSO*-Dh5dDVc|68 zcw9_&BvV9wlZjdX&HMt}1HGg42(25^3qa`A58~?El;m;Nbm-uO$PtPis8*tb*k?j?Gl9DE9`>^HZMbJK+sc6mSOSYQ zaMVn;k=ySBMD8w4+ghaCpCY** zeRv{dsg!IZl0Hp*11+&+I+c~IwDkVi2O2_OfRV(h2#u>r%676X-Q@+*`Qd#oF5ZU{ z;bz;L5YBx|R+r+u^nc=&EOiqw?KALv+#y7#ZRYb9cHp*V%wLB58W=)?zzL!}IETQj z_RT>{*XyPAe(_zO&sj78FkWGnY9lICS&PNdLe+^sJ8&Mwrls|*@`|TPa7_jY)(nlk zzO`n(N%aU@Ywjp`V%iAzh?5d5*m+u~nM9k;!XwPUkl%luG|0t(!*SsRN2`)KrbBjh zKz(g2m&SaYCyI$*qaP0Bq0!4H8es#e@E%4~)-;%f#f2nE3L43_KF?=#J)8LqJx=7q zK%>=R;JOB%=6yBMB7b_VlqPZ~M1pPIL>@s3k2ui&L`2%LSB0nm(+6~&&G`X6)ZD4U zfT-cfFiB}*vt6ix1i>_(9n2-Ve4)XGN}56ZqE)&*8p*;y#H9T(6sn>KC(}kG%~?L< z;guo}WO>#Gzq%M3T_PLz>DjmjEyVp>BFx#v$jk%j28`>384fSz`!7tPi{ShJ0Pvw+ EAHM~-RsaA1 diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/cl3d.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/cl3d.swf deleted file mode 100644 index 63840029eaedde97e84a5a28b5868540c06c781f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10512 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 SrKL1WYhYKxm!PwsI9d^)IPwX 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 FivITH*pdJM diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/clno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/clno.swf deleted file mode 100644 index 3ea3c17a97c8bdd8e0cadda0d2ce200bac5a5f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8394 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 SmNu+eS{=I#9{&xZJ@M;*j?ORu diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/clst.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/clst.swf deleted file mode 100644 index ae3c3682a2430485c3bde06d1921e1e21c8c5351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8486 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 DO>Deo*vM{6(3KM)iQ1f8M-j7R`fy z!FlMmDxWYA7D3*bl(=q7KWnFWla2hNHf(8mqbu!B+Zb%!!idQUT*fR5U*-}AdluD} zl!VMT4+LkaJ8dB2{CcxHP{}T$Kvtw z&nw0xb)wqaT1Ut@hIpIBcdxRa`|%+Tp$reW#P<8`#{GVW2x-2kZ{Wj3|GgR<*O^T{ zAT^hIBb9N!HPBxpAHyEO9opW+=;OjWS}u4;8<0>4N##j<6SbE^m@*Hw>MZA#F-get zanTVsAs3_BCm*|dI``1&XJwl=4~bJ6+Xto0eZej%6z4(`Jp`CaeC%U1vT!@(Pp4h? z@`ukR?WtVvifn#GY8bS7(k>E9tuChrOT%2j4EP0EZF6QNibm zD>juDP3F-xlsNrdFG^z#{+wa(Jt4Kj_bfr)6LMUKU6FN|+^gn%zl_UK36zizQ z$K&+dy0o{$5#R<5AnpUy%j=)ruNiPUSo#T8bv$Svm%oRmwO59V*Tw5mcQ3U@{NI6; zhV5*jQO-QNF)l84zl;{&r4@J5;#=sF@f?dG#Gtma5MGSpxt&%iXbDPp;A zRA{9CRzgr0BNar1lwIy)!UxNQVbQE&aeqy)z-`CWMA^RDrdW-H{yU1dD)A{ zI{AKmTlk%|eoPVOKRLRBi;bodWAZrP7!@2Si!WZPm6-QMDA8GA zLcfcc1r;(KSMpJY6?IO-+hrQ+DKas*Yvg1!%4B@qOvdG8BCen&%p93YoT~tJ8{iT! U@6nuB`@0&*neg}j0Wk!*1jr?+Y5)KL diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/cnno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/cnno.swf deleted file mode 100644 index 2e1c6e7c183fae1495d8fa897c6edee66c3ec4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7450 zcmV+#9p&OfS5pWXlK=pCob5dem|RtPXYS1G-pS08WRoQ-v&tKy1Whm`nnFkx*o`K$ zVH1U*b(rklogFhfvz?jUB$OD@^3b*>V7d@vP-{sms70)b6^ZynOMSnPv{fq=M3ACb zvC8&8|GAIzx{ukJM5_e8JNLZ)^S{r3UUzqp#19Ec-$h6!MlPIB;9s9HGc!XvR>vQ^ zk&x@Rq`G4Hi9*e)G)QsHj#528RVYtdWV}=%g|&scMT&i6g<2zDvxXaFCmFL!#jyt2 zP-u*i!qz$&FYF+->SSev6o;zY>!i5Js+Fud*;=UOi-ieN=&P0|$19hXMxa5luh6iH z)!NQY6NTYYrAX>lgRj*OuO%{EE$8bE=o8;80KJ3MhilbxIlqGxFSI5A(s-f1El=`G z$#BgAm=}#tG!eHYFlp2ZmHH^f32XE*imgf!ShUpw$+3!!>IB(ZZ8WOmWIJi>oUo`=NugG& zZYT9>xio?_t_Su&t754FxRjAwn;JXIphDFtYjYJd;0NT$$_rbqGUW;UEOk(1nH15| z4l-g5m&OZ#EfhJ4IuH+BDKr4BO^q7pPQI@?J`OyY9Hng<)oQr`LT7N7*}v!5zb_>d z)p`j9KUNyC@R7gLs#Qs?FjAVVlQL-#px4@gI!7ph#lFc}9eSIXtdEhA5-4P47+4C_ zZbMO3stpUcURz2Z%N#;5w^A6lusjdwQ*AA7w#Fxz;^t@tR7qAr&{8prrEJZwH>?R# z-(Fx~z`m-r5vqHjm31;&E0M<7B-w6_kOnngAQUjFQnmrdK#@Jerhw{XO|4eg>A+^T zQQU+nQlBVP2(!P@a+T_fRVv$6sm+d9je?tzcT%7$ⅈ3SPU{6huoUg7zRhN9{5KJ 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 YH=tb##yxsopzr)nasmAQA3p1EyR_M&f&c&j diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/dono.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/dono.swf deleted file mode 100644 index dabe0a8010a3c9ee154ab2e338b074dee7715738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6615 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 VDiHtZidgS^TF5!@`y2d{!qK|ews-&l diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/index.php b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/index.php deleted file mode 100644 index 3f6561f72..000000000 --- a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2013 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; \ No newline at end of file diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/lnno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/lnno.swf deleted file mode 100644 index 65cf9553faa400952da4ab3118342d7bda7bcbe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9111 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 V1^pf_H}zf6&Mt(%{|_Ccd=Pe!+xGwf diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/mxno.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/mxno.swf deleted file mode 100644 index 82500fb0d8cbc81cd814f202bc2d74d1b7487e3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10229 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 diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/pi3d.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/pi3d.swf deleted file mode 100644 index 7a4c1174c7dd2dfea73049e4b51a06eaaf0f9b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9222 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 diff --git a/modules/graphxmlswfcharts/xml_swf_charts/charts_library/piim.swf b/modules/graphxmlswfcharts/xml_swf_charts/charts_library/piim.swf deleted file mode 100644 index e232d176283a5a5614eae1f9ed24df964c1179b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmV;#6+7xfS5pX7Qvd*Xob5bobR5-rcULRzSX%j^7zv{hU=p_`U}MW95Q-z)lD$%G zuf)nUyprvBceEP3+TG5MWXT~w=))wT7*nD|wxMYoQbNk3DQzJkp^$_I;sOnYgtoL0 z(uUBaKne8pN4@>N@6O}SYj($`@LWHHREX(`w?Sp4>FdBuz_U^{`E(z z)hcW0Yg#?Z*o`C7f3kf4xS|^wUCkP7ua+~$*|@6Z#|@?{Ic>7Sl#!BFG*o?uvRf^% z&AP74Fm<|IDCN`R7SCdl_x9XOkv7Esi-pi zGxnAk%A@LRhE20O{qbFl0Km5d&Fl8bZuT& z%HtW9S-*BdsqA3`y0VuGky+11N(DvVRU*|aYZk~@<62J5>{Im;Q!1GyBO+38GtGvAuCN9^qbZ6>?G*Iz$Uw(pBv7Y zDT8U%X(K~dHl9%mTE57p%-;zumqVWw%HtpgS*?Q3(!sYR%2)~Pvb$8sk=eM41$7Lf z%{DI^(^Tk3`X8YX+^N7t*;>;|Gi4P+&6o5UMt)`a!ICjr23O>FXvIAgzeIyaBM>sf5@Ld7rddhXAbLj( zmYKnb$bx=~R#f%1;34pChG$X6Ors39OvO;k6$nqQz~vt*W_5J}!%**KM87u;38xgn zdPRmb^-^I6&w$-3@Bl2t5;ee2c|9xlVh~UxNKDYZ>(*U}mkaRn zL6!zGrQ(^JSw3Cbn^6pipWTxNB-*5oly~cjJ_8;BhGk7%dv!TafM8XKHZ`M6Yn6?2eL>1DbY|`D~19P*{N@=&eHJfWIfHZqYBZstqcW!tjScQY)r5cDOMo z@)(aiUnmxU9hU^F7O!0u)!2!@1;wI>X_+Cr^x7He)(&zF>Ja5N-SUve*fU${R%itU zvwMnAszF>GrgbH&CyP;zYm`EIkij$zh-t}y(Py*gM=Cjz*3semQV$f-;lnPo7 zhZUhM$%_o@jPZgy$&Y>dSs5=+fSnG{KhPtnw1$L&#e z2AgeRQj-YO%;HhNZ||9lveP`>QK5Tw4U=Lm%=}m5CLV)})V!%@wv9U$T;}pgT(UbEe_TW?5h}%@=%+O`8)4C*jyf=l94Yckk?JOfJuN1yHWS>!ZsV-G zN$ZwCfF8h<;?OjL_Ssg&$Ar`*BOJfB$cd!+1nlSL9_l+ZH#e6^lKSn9s(%5hFSSeU za%~lpZh;=C&bBjYvCW0d4vdz>7e|m0h_KY|+)_t|;mEt;g4dYGrlK#Fan5Jf@&Ks0 zgn45Lz&mP*0oQi99XrRNH$e#RX{Jzst`52`5xfW-<18LW6E5G_<@9#Qb_OI70$E8* zsq2(<7y4p}4e9aCkz*)yryw-+b~Q)nw^Ql_CCZF9oHO{0gd zr>6rTR=6SZNb4fzV+Q?}V*)6j!M)Vg%-r6&^%(Yc$sHu(DO|fwmm!Ja(6PhA?v+p+ zmonyZ%~?e`>n6`~P1!Jj<3Yt3Rr53heQhZUB1>ly8z$ILY!NCmkE?E1cef8A>Oz2q zm6+YqSs3!CvG{6NiAHP1uRxP=67Nl!7)>s6{*gIknQPf?XIww}bukM0%aD?gz&#GV)ky+B%`Cf&z0`+_C0unG3FUa|h9-2> zF~Zqt7iS@&Fx71h-%lEzlj?AqJY{HQP&FLtScdV`yVy(V+!VIA(*UqWT8qJXiuoXd ztw~Y2IL|$ztaGaQI@zIYR`e%WsEq5}RUM&kY6M!)h*+Fc8wn(CwGoCsR4_O0SgsJPhhgS zLHM}{hu_j5{53I9zbc^~{bngUdi2MAPai#cbe^S*W;}h;fHWYF?5DY40tMSD^+Fll z=9E#p_`*{^UFB2~>3-LotMQU-_jZfD9WYMCZvpC3l>a29i)COW4MJrel73a%?lQr4 z8WVQ7+ICRePFLH`)a()_rJVV|u&aBRP)1yBBjo)hR_zu{aY-6O>~MT`E!tx%{K*dC zZs#@-(YZXH{0|-Ld}