From 16aab5b2e15377a74c6b3345de82291b90bfa8b5 Mon Sep 17 00:00:00 2001 From: mattpiwik <matthieu.aubry@gmail.com> Date: Mon, 27 Apr 2009 04:18:16 +0000 Subject: [PATCH] - API CHANGE: the API for the function Piwik_AddWidget has changed. The new API is Piwik_AddWidget( $widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters = array()). See examples of calls in all the core Piwik plugins. This change was necessary to make widgets more modular (they now accept custom parameters). - API CHANGE: a small number of CSV outputs for some API calls would change following the simplification of DataTable_Simple implementation. Affected calls are VisitsSummary.get, Goals.get, VisitFrequency.get. This is due to a change in the implementation of DataTable_Simple (we simplified implementation). - FIXED #84 Added proper translations for all columns, in tables, and graphs. - FIXED #322 piwik is now using open flash chart 2 - FIXED #126 all dates should be correctly displayed in all graphs. For example, evolution graph for days would show, on the X axis "Mon 29", "Wed 31". For months it would show "Aug 2009", etc. - ADDED: when hovering any of the sparklines, the UI makes it clear that clicking will refresh the evolution graph. This feature was in Piwik for months, and even Google Analytics implemented this UI feature after Piwik. However in Piwik it wasn't clear to the user that the sparklines were clickable. - ADDED: now widgets can be created with custom parameters. This makes it possible to create a widget that calls a controller->action with other custom parameters, this is used in Piwik to draw an evolution graph (module=VisitsSummary & action=getEvolutionGraph) for a given metric (&columns[]=nb_visits). These custom parameters are automatically forwarded to the sparkline url, the flash graph when clicked on sparkline, etc. - The widget layout is now saved as a JSON string rather than a custom data structure. The dashboard code should be able to read & restore most of the layouts from the old format (except the evolution graphs widgets). Simplified the Dashboard.js, widgetMenu.js, cleaned up what was a messy code. - Added sentence in Widgetize to let users know they can easily export the Piwik dashboard in an iframe. - Changed the way translations used in Javascript are loaded: all translations strings finishing by _js will be loaded to be used in the templates when calling {loadJavascriptTranslations plugins='YOUR_PLUGIN_NAME'} - Moved all templates in plugins under plugins/$PLUGIN/templates/ - 'Khtml (Konqueror, Safari)' now displayed as 'KHTML (Safari, Chrome)' git-svn-id: http://dev.piwik.org/svn/trunk@1072 59fd770c-687e-43c8-a1e3-f5a4ff64c105 --- LICENSE | 2 +- core/API/ResponseBuilder.php | 13 +- core/Archive/Array/IndexedByDate.php | 5 +- core/Archive/Array/IndexedBySite.php | 1 + core/Archive/Single.php | 5 + core/ArchiveProcessing.php | 12 +- core/ArchiveProcessing/Day.php | 10 - core/ArchiveProcessing/Period.php | 2 +- core/Controller.php | 29 +- core/DataTable/Array.php | 10 +- .../ColumnCallbackAddColumnPercentage.php | 28 +- core/DataTable/Filter/SafeDecodeLabel.php | 9 +- core/DataTable/Renderer/Console.php | 15 +- core/DataTable/Renderer/Csv.php | 21 +- core/DataTable/Renderer/Html.php | 6 - core/DataTable/Renderer/Php.php | 11 +- core/DataTable/Renderer/Rss.php | 6 - core/DataTable/Renderer/Xml.php | 4 +- core/DataTable/Simple.php | 24 +- core/Date.php | 29 +- core/FrontController.php | 1 + core/Period.php | 4 +- core/Period/Day.php | 14 +- core/Period/Month.php | 7 + core/Period/Range.php | 12 +- core/Period/Week.php | 11 + core/Period/Year.php | 7 + core/Piwik.php | 9 + core/PluginsFunctions/WidgetsList.php | 17 +- core/Site.php | 5 + .../function.loadJavascriptTranslations.php | 48 +- core/Translate.php | 19 +- core/Url.php | 4 + core/ViewDataTable.php | 46 + core/ViewDataTable/GenerateGraphData.php | 73 +- .../GenerateGraphData/ChartEvolution.php | 247 +-- core/ViewDataTable/GenerateGraphHTML.php | 2 +- core/ViewDataTable/HtmlTable.php | 51 +- core/ViewDataTable/HtmlTable/AllColumns.php | 3 - core/ViewDataTable/HtmlTable/Goals.php | 2 - core/ViewDataTable/Sparkline.php | 95 +- core/Visualization/Chart.php | 180 +- core/Visualization/Chart/Evolution.php | 126 +- core/Visualization/Chart/Pie.php | 61 +- core/Visualization/Chart/VerticalBar.php | 56 +- core/Visualization/OpenFlashChart.php | 1637 ----------------- core/Visualization/Sparkline.php | 44 +- lang/en.php | 78 +- libs/javascript/json2.js | 29 + libs/open-flash-chart/open-flash-chart.swf | Bin 64600 -> 271000 bytes .../php-ofc-library/README.txt | 16 + .../php-ofc-library/dot_base.php | 231 +++ .../php-ofc-library/json_format.php | 86 + .../php-ofc-library/ofc_area_base.php | 40 + .../php-ofc-library/ofc_area_hollow.php | 10 + .../php-ofc-library/ofc_area_line.php | 10 + .../php-ofc-library/ofc_bar.php | 34 + .../php-ofc-library/ofc_bar_3d.php | 22 + .../php-ofc-library/ofc_bar_base.php | 78 + .../php-ofc-library/ofc_bar_filled.php | 39 + .../php-ofc-library/ofc_bar_glass.php | 109 ++ .../php-ofc-library/ofc_bar_sketch.php | 29 + .../php-ofc-library/ofc_bar_stack.php | 50 + .../php-ofc-library/ofc_hbar.php | 64 + .../php-ofc-library/ofc_line.php | 115 ++ .../php-ofc-library/ofc_line_base.php | 92 + .../php-ofc-library/ofc_line_dot.php | 33 + .../php-ofc-library/ofc_line_hollow.php | 9 + .../php-ofc-library/ofc_line_style.php | 11 + .../php-ofc-library/ofc_menu.php | 56 + .../php-ofc-library/ofc_pie.php | 257 +++ .../php-ofc-library/ofc_radar_axis.php | 47 + .../php-ofc-library/ofc_radar_axis_labels.php | 15 + .../ofc_radar_spoke_labels.php | 15 + .../php-ofc-library/ofc_scatter.php | 47 + .../php-ofc-library/ofc_scatter_line.php | 43 + .../php-ofc-library/ofc_shape.php | 25 + .../php-ofc-library/ofc_sugar.php | 43 + .../php-ofc-library/ofc_title.php | 39 + .../php-ofc-library/ofc_tooltip.php | 67 + .../php-ofc-library/ofc_upload_image.php | 70 + .../php-ofc-library/ofc_x_axis.php | 104 ++ .../php-ofc-library/ofc_x_axis_label.php | 45 + .../php-ofc-library/ofc_x_axis_labels.php | 46 + .../php-ofc-library/ofc_x_legend.php | 15 + .../php-ofc-library/ofc_y_axis.php | 16 + .../php-ofc-library/ofc_y_axis_base.php | 131 ++ .../php-ofc-library/ofc_y_axis_right.php | 6 + .../php-ofc-library/ofc_y_legend.php | 15 + .../open-flash-chart-object.php | 109 ++ .../php-ofc-library/open-flash-chart.php | 174 ++ misc/widget_example_lastvisits.html | 2 +- plugins/Actions/Actions.php | 6 +- plugins/CoreHome/templates/calendar.js | 38 +- plugins/CoreHome/templates/datatable.css | 12 +- plugins/CoreHome/templates/datatable.js | 24 +- .../CoreHome/templates/datatable_footer.tpl | 1 - plugins/CoreHome/templates/datatable_js.tpl | 1 - plugins/CoreHome/templates/header_message.tpl | 4 +- .../CoreHome/templates/js_css_includes.tpl | 2 - plugins/CoreHome/templates/piwik_tag.tpl | 1 + plugins/CoreHome/templates/sparkline.js | 88 +- plugins/CoreHome/templates/styles.css | 20 +- plugins/Dashboard/Controller.php | 22 +- plugins/Dashboard/Dashboard.php | 1 + plugins/Dashboard/templates/Dashboard.js | 424 ++--- plugins/Dashboard/templates/dashboard.css | 23 +- plugins/Dashboard/templates/header.tpl | 22 +- plugins/Dashboard/templates/index.tpl | 83 +- plugins/Dashboard/templates/standalone.tpl | 5 + plugins/Dashboard/templates/widgetMenu.js | 453 +++-- .../ExampleFeedburner/ExampleFeedburner.php | 4 +- .../{ => templates}/feedburner.tpl | 0 plugins/ExamplePlugin/ExamplePlugin.php | 17 +- plugins/ExampleRssWidget/ExampleRssWidget.php | 6 +- .../{ => templates}/styles.css | 0 plugins/Feedback/Controller.php | 4 +- plugins/Feedback/{ => templates}/index.tpl | 0 plugins/Feedback/{ => templates}/sent.tpl | 0 plugins/Goals/API.php | 36 +- plugins/Goals/Controller.php | 112 +- plugins/Goals/Goals.php | 1 - plugins/Goals/templates/overview.tpl | 19 +- plugins/Goals/templates/release_notes.tpl | 4 +- .../templates/title_and_evolution_graph.tpl | 26 +- plugins/Live/API.php | 3 +- plugins/Live/Live.php | 2 +- plugins/Provider/Provider.php | 2 +- plugins/Referers/API.php | 2 +- plugins/Referers/Controller.php | 80 +- plugins/Referers/Referers.php | 10 +- plugins/Referers/templates/index.tpl | 42 +- .../SitesManager/templates/SitesManager.js | 2 +- plugins/UserCountry/API.php | 2 +- plugins/UserCountry/Controller.php | 2 +- plugins/UserCountry/UserCountry.php | 4 +- plugins/UserCountry/{ => templates}/index.tpl | 0 plugins/UserSettings/Controller.php | 2 +- plugins/UserSettings/UserSettings.php | 16 +- .../UserSettings/{ => templates}/index.tpl | 0 .../UsersManager/templates/UsersManager.js | 2 +- plugins/VisitFrequency/API.php | 35 +- plugins/VisitFrequency/Controller.php | 91 +- plugins/VisitFrequency/VisitFrequency.php | 4 +- plugins/VisitFrequency/sparklines.tpl | 13 - .../VisitFrequency/{ => templates}/index.tpl | 4 +- .../VisitFrequency/templates/sparklines.tpl | 11 + plugins/VisitTime/Controller.php | 2 +- plugins/VisitTime/VisitTime.php | 6 +- plugins/VisitTime/{ => templates}/index.tpl | 0 plugins/VisitorInterest/Controller.php | 2 +- plugins/VisitorInterest/VisitorInterest.php | 5 +- .../VisitorInterest/{ => templates}/index.tpl | 0 plugins/VisitsSummary/API.php | 51 +- plugins/VisitsSummary/Controller.php | 103 +- plugins/VisitsSummary/VisitsSummary.php | 7 +- plugins/VisitsSummary/sparklines.tpl | 13 - .../VisitsSummary/{ => templates}/index.tpl | 7 +- .../VisitsSummary/templates/sparklines.tpl | 13 + plugins/Widgetize/templates/iframe.tpl | 15 +- plugins/Widgetize/templates/index.tpl | 57 +- plugins/Widgetize/templates/js.tpl | 2 +- plugins/Widgetize/templates/widgetize.js | 123 +- tests/core/DataTable/Renderer.test.php | 25 +- tests/core/Url.test.php | 12 + themes/default/common.js | 34 + 166 files changed, 4474 insertions(+), 3386 deletions(-) delete mode 100644 core/Visualization/OpenFlashChart.php create mode 100644 libs/javascript/json2.js create mode 100644 libs/open-flash-chart/php-ofc-library/README.txt create mode 100644 libs/open-flash-chart/php-ofc-library/dot_base.php create mode 100644 libs/open-flash-chart/php-ofc-library/json_format.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_area_base.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_area_line.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_base.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_hbar.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_line.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_line_base.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_line_dot.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_line_style.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_menu.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_pie.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_scatter.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_shape.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_sugar.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_title.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_tooltip.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_upload_image.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_x_axis.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_x_legend.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_y_axis.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php create mode 100644 libs/open-flash-chart/php-ofc-library/ofc_y_legend.php create mode 100644 libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php create mode 100644 libs/open-flash-chart/php-ofc-library/open-flash-chart.php create mode 100644 plugins/Dashboard/templates/standalone.tpl rename plugins/ExampleFeedburner/{ => templates}/feedburner.tpl (100%) rename plugins/ExampleRssWidget/{ => templates}/styles.css (100%) rename plugins/Feedback/{ => templates}/index.tpl (100%) rename plugins/Feedback/{ => templates}/sent.tpl (100%) rename plugins/UserCountry/{ => templates}/index.tpl (100%) rename plugins/UserSettings/{ => templates}/index.tpl (100%) delete mode 100644 plugins/VisitFrequency/sparklines.tpl rename plugins/VisitFrequency/{ => templates}/index.tpl (68%) create mode 100644 plugins/VisitFrequency/templates/sparklines.tpl rename plugins/VisitTime/{ => templates}/index.tpl (100%) rename plugins/VisitorInterest/{ => templates}/index.tpl (100%) delete mode 100644 plugins/VisitsSummary/sparklines.tpl rename plugins/VisitsSummary/{ => templates}/index.tpl (65%) create mode 100644 plugins/VisitsSummary/templates/sparklines.tpl diff --git a/LICENSE b/LICENSE index 6d5606bb24..5e08270fef 100644 --- a/LICENSE +++ b/LICENSE @@ -1,2 +1,2 @@ -# GNU/GPL v3 or later +# GNU/GPL v3 or later see misc/license.txt diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php index 52e2d0ee14..1f6f04c8fb 100644 --- a/core/API/ResponseBuilder.php +++ b/core/API/ResponseBuilder.php @@ -156,11 +156,16 @@ class Piwik_API_ResponseBuilder // if asked for original dataStructure if($format == 'original') { - // if the original dataStructure is a simpleDataTable and has only one row, we return the value - if($dataTable instanceof Piwik_DataTable_Simple - && $dataTable->getRowsCount() == 1) + // if the original dataStructure is a simpleDataTable + // and has only one column, we return the value + if($dataTable instanceof Piwik_DataTable_Simple) { - return $dataTable->getRowFromId(0)->getColumn('value'); + $columns = $dataTable->getFirstRow()->getColumns(); + if(count($columns) == 1) + { + $values = array_values($columns); + return $values[0]; + } } // by default "original" data is not serialized diff --git a/core/Archive/Array/IndexedByDate.php b/core/Archive/Array/IndexedByDate.php index 57ab78bb1c..f9fe5eb3a1 100644 --- a/core/Archive/Array/IndexedByDate.php +++ b/core/Archive/Array/IndexedByDate.php @@ -34,6 +34,7 @@ class Piwik_Archive_Array_IndexedByDate extends Piwik_Archive_Array $table->metadata[$archive->getPrettyDate()] = array( 'timestamp' => $archive->getTimestampStartDate(), 'site' => $archive->getSite(), + 'period' => $archive->getPeriod(), ); } @@ -78,7 +79,7 @@ class Piwik_Archive_Array_IndexedByDate extends Piwik_Archive_Array foreach($queries as $table => $aIds) { $inIds = implode(', ', $aIds); - $sql = "SELECT value, name, idarchive, UNIX_TIMESTAMP(date1) as timestamp + $sql = "SELECT value, name, UNIX_TIMESTAMP(date1) as timestamp FROM $table WHERE idarchive IN ( $inIds ) AND name IN ( $inNames )"; @@ -87,7 +88,7 @@ class Piwik_Archive_Array_IndexedByDate extends Piwik_Archive_Array foreach($values as $value) { - $arrayValues[$value['timestamp']][$value['name']] = $value['value']; + $arrayValues[$value['timestamp']][$value['name']] = (float)$value['value']; } } diff --git a/core/Archive/Array/IndexedBySite.php b/core/Archive/Array/IndexedBySite.php index 1a27c10ce5..7dbf0f5a30 100644 --- a/core/Archive/Array/IndexedBySite.php +++ b/core/Archive/Array/IndexedBySite.php @@ -66,6 +66,7 @@ class Piwik_Archive_Array_IndexedBySite extends Piwik_Archive_Array private function getValues($fields) { + $arrayValues = array(); foreach($this->loadValuesFromDB($fields) as $value) { $arrayValues[$value['idsite']][$value['name']] = $value['value']; diff --git a/core/Archive/Single.php b/core/Archive/Single.php index e4d6c4d472..475d5319eb 100644 --- a/core/Archive/Single.php +++ b/core/Archive/Single.php @@ -107,6 +107,11 @@ class Piwik_Archive_Single extends Piwik_Archive $this->period = $period; } + public function getPeriod() + { + return $this->period; + } + /** * Returns the timestamp of the first date in the period for this Archive. * This is used to sort archives by date when working on a Archive_Array diff --git a/core/ArchiveProcessing.php b/core/ArchiveProcessing.php index 3418447d10..d2b5c6f72f 100644 --- a/core/ArchiveProcessing.php +++ b/core/ArchiveProcessing.php @@ -173,6 +173,13 @@ abstract class Piwik_ArchiveProcessing */ protected $debugAlwaysArchive = false; + /** + * If the archive has at least 1 visit, this is set to true. + * + * @var bool + */ + public $isThereSomeVisits = false; + /** * Constructor */ @@ -290,11 +297,6 @@ abstract class Piwik_ArchiveProcessing { return null; } - else - { - $this->isThereSomeVisits = true; - } - return $this->idArchive; } diff --git a/core/ArchiveProcessing/Day.php b/core/ArchiveProcessing/Day.php index 7fcc512c46..1b0a21c19b 100644 --- a/core/ArchiveProcessing/Day.php +++ b/core/ArchiveProcessing/Day.php @@ -22,16 +22,6 @@ */ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing { - /** - * If the archive has at least 1 visit, this is set to true. - * - * @var bool - */ - public $isThereSomeVisits = false; - - /** - * Constructor - */ function __construct() { parent::__construct(); diff --git a/core/ArchiveProcessing/Period.php b/core/ArchiveProcessing/Period.php index e2bcfda5c9..06cd6ab894 100644 --- a/core/ArchiveProcessing/Period.php +++ b/core/ArchiveProcessing/Period.php @@ -267,7 +267,7 @@ class Piwik_ArchiveProcessing_Period extends Piwik_ArchiveProcessing $nbVisits = $record['nb_visits']->value; $nbVisitsConverted = $record['nb_visits_converted']->value; - $this->isThereSomeVisits = ( $nbVisits!= 0); + $this->isThereSomeVisits = ( $nbVisits > 0); if($this->isThereSomeVisits === false) { return; diff --git a/core/Controller.php b/core/Controller.php index ed615103a9..8718b20cf2 100644 --- a/core/Controller.php +++ b/core/Controller.php @@ -68,6 +68,21 @@ abstract class Piwik_Controller return 'index'; } + protected $standardColumnNameToTranslation = array( + 'label' => 'General_ColumnLabel', + 'nb_visits' => 'General_ColumnNbVisits', + 'nb_actions' => 'General_ColumnNbActions', + 'max_actions' => 'General_ColumnMaxActions', + 'sum_visit_length' => 'General_ColumnSumVisitLength', + 'nb_uniq_visitors' => 'General_ColumnNbUniqVisitors', + 'nb_actions_per_visit' => 'General_ColumnActionsPerVisit', + 'avg_time_on_site' => 'General_ColumnAvgTimeOnSite', + 'bounce_rate' => 'General_ColumnBounceRate', + + 'revenue_per_visit' => 'General_ColumnValuePerVisit', + 'goals_conversion_rate' => 'General_ColumnVisitsWithConversions', + ); + /** * Given an Object implementing Piwik_iView interface, we either: * - echo the output of the rendering if fetch = false @@ -88,6 +103,9 @@ abstract class Piwik_Controller 'controllerActionCalledWhenRequestSubTable' => $view->getControllerActionCalledWhenRequestSubTable(), ) ); + + $standardColumnNameToTranslation = array_map('Piwik_Translate', $this->standardColumnNameToTranslation); + $view->setColumnsTranslations($standardColumnNameToTranslation); $view->main(); $rendered = $view->getView()->render(); if($fetch) @@ -118,7 +136,7 @@ abstract class Piwik_Controller if( !is_null($this->date)) { $view->setParametersToModify( - $this->getGraphParamsModified( array('date'=>$this->strDate)) + $this->getGraphParamsModified( array('date' => $this->strDate)) ); } @@ -192,20 +210,22 @@ abstract class Piwik_Controller } /** - * Returns the current URL to use in a <img src=X> to display a sparkline. + * Returns the current URL to use in a img src=X to display a sparkline. * $action must be the name of a Controller method that requests data using the Piwik_ViewDataTable::factory * It will automatically build a sparkline by setting the viewDataTable=sparkline parameter in the URL. * It will also computes automatically the 'date' for the 'last30' days/weeks/etc. * * @param string $action, eg. method name of the controller to call in the img src + * @param array array of name => value of parameters to set in the generated GET url * @return string the generated URL */ - protected function getUrlSparkline( $action ) + protected function getUrlSparkline( $action, $customParameters = array() ) { $params = $this->getGraphParamsModified( array( 'viewDataTable' => 'sparkline', 'action' => $action, 'module' => $this->pluginName) + + $customParameters ); $url = Piwik_Url::getCurrentQueryStringWithParametersModified($params); return $url; @@ -214,7 +234,8 @@ abstract class Piwik_Controller protected function setGeneralVariablesView($view) { $oDate = Piwik_Date::factory($this->strDate); - $localizedDateFormat = Piwik_Translate('CoreHome_LocalizedDateFormat'); + //TODO TO FIX + $localizedDateFormat = Piwik_Translate('CoreHome_DayFormat'); $view->prettyDate = $oDate->getLocalized($localizedDateFormat); $view->date = $this->strDate; diff --git a/core/DataTable/Array.php b/core/DataTable/Array.php index 63bbd6704b..11b812e894 100644 --- a/core/DataTable/Array.php +++ b/core/DataTable/Array.php @@ -111,7 +111,7 @@ class Piwik_DataTable_Array */ public function filter($className, $parameters = array()) { - foreach($this->array as $table) + foreach($this->array as $id => $table) { $table->filter($className, $parameters); } @@ -161,6 +161,14 @@ class Piwik_DataTable_Array $table->enableRecursiveSort(); } } + + public function deleteColumns($columns) + { + foreach($this->array as $table) + { + $table->deleteColumns($columns); + } + } } diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php index 7032a3a873..15ffab66c5 100644 --- a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php +++ b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php @@ -16,22 +16,32 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnPercentage extends Piwik_Dat { private $columnValueToRead; private $columnNamePercentageToAdd; - private $totalValueUsedToComputePercentage; + private $columnNameUsedAsDivisor; + private $totalValueUsedAsDivisor; private $percentagePrecision; /** * @param Piwik_DataTable $table * @param string $columnValueToRead * @param string $columnNamePercentageToAdd - * @param double $totalValueUsedToComputePercentage + * @param numeric|string $totalValueUsedToComputePercentageOrColumnName + * if a numeric value is given, we use this value as the divisor to process the percentage. + * if a string is given, this string is the column name's value used as the divisor. * @param int $percentagePrecision precision 0 means "11", 1 means "11.2" */ - public function __construct( $table, $columnValueToRead, $columnNamePercentageToAdd, $totalValueUsedToComputePercentage, $percentagePrecision = 0 ) + public function __construct( $table, $columnValueToRead, $columnNamePercentageToAdd, $totalValueUsedToComputePercentageOrColumnName, $percentagePrecision = 0 ) { parent::__construct($table); $this->columnValueToRead = $columnValueToRead; $this->columnNamePercentageToAdd = $columnNamePercentageToAdd; - $this->totalValueUsedToComputePercentage = $totalValueUsedToComputePercentage; + if(is_numeric($totalValueUsedToComputePercentageOrColumnName)) + { + $this->totalValueUsedAsDivisor = $totalValueUsedToComputePercentageOrColumnName; + } + else + { + $this->columnNameUsedAsDivisor = $totalValueUsedToComputePercentageOrColumnName; + } $this->percentagePrecision = $percentagePrecision; $this->filter(); } @@ -41,7 +51,15 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnPercentage extends Piwik_Dat foreach($this->table->getRows() as $key => $row) { $value = $row->getColumn($this->columnValueToRead); - $percentage = round( 100 * $value / $this->totalValueUsedToComputePercentage, $this->percentagePrecision); + if(!is_null($this->totalValueUsedAsDivisor)) + { + $divisor = $this->totalValueUsedAsDivisor; + } + else + { + $divisor = $row->getColumn($this->columnNameUsedAsDivisor); + } + $percentage = Piwik::getPercentageSafe($value, $divisor, $this->percentagePrecision); $row->addColumn($this->columnNamePercentageToAdd, $percentage); } } diff --git a/core/DataTable/Filter/SafeDecodeLabel.php b/core/DataTable/Filter/SafeDecodeLabel.php index fc293d9107..454d4599f4 100644 --- a/core/DataTable/Filter/SafeDecodeLabel.php +++ b/core/DataTable/Filter/SafeDecodeLabel.php @@ -28,13 +28,18 @@ class Piwik_DataTable_Filter_SafeDecodeLabel extends Piwik_DataTable_Filter { foreach($this->table->getRows() as $row) { - $row->setColumn( $this->columnToDecode, + $value = $row->getColumn($this->columnToDecode); + if($value !== false) + { + $row->setColumn( + $this->columnToDecode, htmlspecialchars( htmlspecialchars_decode( - urldecode($row->getColumn($this->columnToDecode)), + urldecode($value), ENT_QUOTES), ENT_QUOTES) ); + } } } } diff --git a/core/DataTable/Renderer/Console.php b/core/DataTable/Renderer/Console.php index b0c00e3f6f..d324370024 100644 --- a/core/DataTable/Renderer/Console.php +++ b/core/DataTable/Renderer/Console.php @@ -29,16 +29,27 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer $this->prefixRows = $str; } - protected function renderDataTableArray(Piwik_DataTable_Array $table, $prefix ) + protected function renderDataTableArray(Piwik_DataTable_Array $tableArray, $prefix ) { $output = "Piwik_DataTable_Array<hr>"; $prefix = $prefix . ' '; - foreach($table->getArray() as $descTable => $table) + foreach($tableArray->getArray() as $descTable => $table) { $output .= $prefix . "<b>". $descTable. "</b><br>"; $output .= $prefix . $this->renderTable($table, $prefix . ' '); $output .= "<hr>"; } + $output .= "Metadata<br>"; + foreach($tableArray->metadata as $id => $metadata) + { + $output .= "<br>"; + $output .= $prefix . " <b>$id</b> <br>"; + foreach($metadata as $name => $value) + { + $output .= $prefix . $prefix . "$name => $value"; + } + } + $output .= "<hr>"; return $output; } diff --git a/core/DataTable/Renderer/Csv.php b/core/DataTable/Renderer/Csv.php index 55a4887370..53dbc25a8d 100644 --- a/core/DataTable/Renderer/Csv.php +++ b/core/DataTable/Renderer/Csv.php @@ -110,16 +110,21 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer protected function renderDataTable( $table ) { - if($table instanceof Piwik_DataTable_Simple - && $table->getRowsCount() == 1) + if($table instanceof Piwik_DataTable_Simple) { - $str = 'value' . $this->lineEnd . $this->formatValue($table->getRowFromId(0)->getColumn('value')); - return $str; + $row = $table->getFirstRow(); + if($row !== false) + { + $columnNameToValue = $row->getColumns(); + if(count($columnNameToValue) == 1) + { + $value = array_values($columnNameToValue); + $str = 'value' . $this->lineEnd . $this->formatValue($value[0]); + return $str; + } + } } - - $csv = array(); - - $allColumns = array(); + $csv = $allColumns = array(); foreach($table->getRows() as $row) { $csvRow = array(); diff --git a/core/DataTable/Renderer/Html.php b/core/DataTable/Renderer/Html.php index ef9664ba23..6601a6c7ad 100644 --- a/core/DataTable/Renderer/Html.php +++ b/core/DataTable/Renderer/Html.php @@ -51,12 +51,6 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer { return "<b><i>Empty table</i></b> <br>\n"; } - if($table instanceof Piwik_DataTable_Simple - && $table->getRowsCount() ==1) - { - $table->deleteColumn('label'); - } - static $depth=0; $i = 1; $someMetadata = false; diff --git a/core/DataTable/Renderer/Php.php b/core/DataTable/Renderer/Php.php index b098fedeb8..1fcfea5d3b 100644 --- a/core/DataTable/Renderer/Php.php +++ b/core/DataTable/Renderer/Php.php @@ -97,7 +97,6 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer } } - // A DataTable_Simple is already flattened so no need to do some crazy stuff to convert it else if($dataTable instanceof Piwik_DataTable_Simple) { $flatArray = $this->renderSimpleTable($dataTable); @@ -198,9 +197,15 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer protected function renderSimpleTable($table) { $array = array(); - foreach($table->getRows() as $row) + + $row = $table->getFirstRow(); + if($row === false) + { + return $array; + } + foreach($row->getColumns() as $columnName => $columnValue) { - $array[$row->getColumn('label')] = $row->getColumn('value'); + $array[$columnName] = $columnValue; } return $array; } diff --git a/core/DataTable/Renderer/Rss.php b/core/DataTable/Renderer/Rss.php index 311925a9e7..fc8565bf66 100644 --- a/core/DataTable/Renderer/Rss.php +++ b/core/DataTable/Renderer/Rss.php @@ -95,16 +95,10 @@ class Piwik_DataTable_Renderer_Rss extends Piwik_DataTable_Renderer protected function renderDataTable($table) { - if($table->getRowsCount() == 0) { return "<b><i>Empty table</i></b> <br>\n"; } - if($table instanceof Piwik_DataTable_Simple - && $table->getRowsCount() ==1) - { - $table->deleteColumn('label'); - } $i = 1; $tableStructure = array(); diff --git a/core/DataTable/Renderer/Xml.php b/core/DataTable/Renderer/Xml.php index f509c3e9bf..5d70a44bf8 100644 --- a/core/DataTable/Renderer/Xml.php +++ b/core/DataTable/Renderer/Xml.php @@ -160,9 +160,9 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer { if(is_array($dataTableSimple)) { - $dataTableSimple = "\n" . $this->renderDataTableSimple($dataTableSimple, $prefixLines . "\t") . "\t" ; + $dataTableSimple = "\n" . $this->renderDataTableSimple($dataTableSimple, $prefixLines . "\t") . $prefixLines . "\t"; } - $xml .= $prefixLines . "\t<result $nameDescriptionAttribute=\"$valueAttribute\">".$dataTableSimple. $prefixLines . "</result>\n"; + $xml .= $prefixLines . "\t<result $nameDescriptionAttribute=\"$valueAttribute\">".$dataTableSimple. "</result>\n"; } } return $xml; diff --git a/core/DataTable/Simple.php b/core/DataTable/Simple.php index 33c9f87b79..8dfdbaefec 100644 --- a/core/DataTable/Simple.php +++ b/core/DataTable/Simple.php @@ -34,28 +34,6 @@ class Piwik_DataTable_Simple extends Piwik_DataTable */ function addRowsFromArray($array) { - foreach($array as $label => $value) - { - $row = new Piwik_DataTable_Row; - $row->addColumn('label', $label); - $row->addColumn('value', $value); - $this->addRow($row); - } - } - - /** - * Returns the 'value' column of the row that has a label '$label'. - * - * @param string Label of the row we want the value - * @return false|mixed The 'value' column of the row labelled $label - */ - function getColumn( $label ) - { - $row = $this->getRowFromLabel($label); - if($row === false) - { - return false; - } - return $row->getColumn('value'); + $this->addRowsFromSimpleArray(array($array)); } } diff --git a/core/Date.php b/core/Date.php index fc708ffd86..394adab8d4 100644 --- a/core/Date.php +++ b/core/Date.php @@ -237,20 +237,23 @@ class Piwik_Date return date($part, $this->getTimestamp()); } - /** - * Returns a localized representation of a date or datepart - * - * @see Windows compatible arguments http://msdn.microsoft.com/en-us/library/fe06s4ak(VS.71).aspx - * @param string OPTIONAL Part of the date to return (in strftime format), if null timestamp is returned - * @return integer|string date or datepart - */ - public function getLocalized($part = null) + //TODO to test + public function getLocalized($template) { - if(is_null($part)) - { - return $this->getTimestamp(); - } - return strftime($part, $this->getTimestamp()); + $day = $this->toString('j'); + $dayOfWeek = $this->toString('N'); + $monthOfYear = $this->toString('n'); + $patternToValue = array( + "%day%" => $day, + "%shortMonth%" => Piwik_Translate('General_ShortMonth_'.$monthOfYear), + "%longMonth%" => Piwik_Translate('General_LongMonth_'.$monthOfYear), + "%shortDay%" => Piwik_Translate('General_ShortDay_'.$dayOfWeek), + "%longDay%" => Piwik_Translate('General_LongDay_'.$dayOfWeek), + "%longYear%" => $this->toString('Y'), + "%shortYear%" => $this->toString('y'), + ); + $out = str_replace(array_keys($patternToValue), array_values($patternToValue), $template); + return $out; } /** diff --git a/core/FrontController.php b/core/FrontController.php index bccd477520..8270f53212 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -235,6 +235,7 @@ class Piwik_FrontController Piwik::createAccessObject(); require_once "CoreUpdater/Controller.php"; + //TODO should not be a controller! $updaterController = new Piwik_CoreUpdater_Controller(); $updaterController->checkForCoreAndPluginsUpdates(); diff --git a/core/Period.php b/core/Period.php index 50201bf583..b5fbd33e0e 100644 --- a/core/Period.php +++ b/core/Period.php @@ -221,7 +221,8 @@ abstract class Piwik_Period public function __toString() { - return $this->toString(); + $elements = $this->toString(); + return implode(",", $elements); } public function get( $part= null ) @@ -234,6 +235,7 @@ abstract class Piwik_Period } abstract public function getPrettyString(); + abstract public function getLocalizedShortString(); } diff --git a/core/Period/Day.php b/core/Period/Day.php index e4597945de..55f158a796 100644 --- a/core/Period/Day.php +++ b/core/Period/Day.php @@ -7,12 +7,20 @@ class Piwik_Period_Day extends Piwik_Period { protected $label = 'day'; - + public function getPrettyString() { $out = $this->getDateStart()->toString() ; return $out; } + public function getLocalizedShortString() + { + //"Mon 15 Aug" + $date = $this->getDateStart(); + $template = "%shortDay% %day% %shortMonth%"; + $out = $date->getLocalized($template); + return $out; + } public function isFinished() { @@ -37,4 +45,8 @@ class Piwik_Period_Day extends Piwik_Period { return $this->date->toString("Y-m-d"); } + public function __toString() + { + return $this->toString(); + } } diff --git a/core/Period/Month.php b/core/Period/Month.php index 57fd1d25c5..3d6e9f9d77 100644 --- a/core/Period/Month.php +++ b/core/Period/Month.php @@ -7,6 +7,13 @@ class Piwik_Period_Month extends Piwik_Period { protected $label = 'month'; + public function getLocalizedShortString() + { + //"Aug 09" + $out = $this->getDateStart()->getLocalized("%shortMonth% %shortYear%"); + return $out; + } + public function getPrettyString() { $out = $this->getDateStart()->toString('Y-m'); diff --git a/core/Period/Range.php b/core/Period/Range.php index d3cdc1982a..dea4ed73ad 100644 --- a/core/Period/Range.php +++ b/core/Period/Range.php @@ -12,7 +12,17 @@ class Piwik_Period_Range extends Piwik_Period $this->strDate = $strDate; $this->defaultEndDate = null; } - + public function getLocalizedShortString() + { + //"30 Dec 08 - 26 Feb 09" + $dateStart = $this->getDateStart(); + $dateEnd = $this->getDateEnd(); + $template = "%day% %shortMonth% %shortYear%"; + $shortDateStart = $dateStart->getLocalized($template); + $shortDateEnd = $dateEnd->getLocalized($template); + $out = "$shortDateStart - $shortDateEnd"; + return $out; + } public function getPrettyString() { $out = "From ".$this->getDateStart()->toString() . " to " . $this->getDateEnd()->toString(); diff --git a/core/Period/Week.php b/core/Period/Week.php index f24002c878..f0c682241a 100644 --- a/core/Period/Week.php +++ b/core/Period/Week.php @@ -7,6 +7,17 @@ class Piwik_Period_Week extends Piwik_Period { protected $label = 'week'; + + public function getLocalizedShortString() + { + //"Week 30 Dec - 6 Jan 09" + $dateStart = $this->getDateStart(); + $dateEnd = $this->getDateEnd(); + $shortDateStart = $dateStart->getLocalized("%day% %shortMonth%"); + $shortDateEnd = $dateEnd->getLocalized("%day% %shortMonth% %shortYear%"); + $out = "$shortDateStart - $shortDateEnd"; + return $out; + } public function getPrettyString() { diff --git a/core/Period/Year.php b/core/Period/Year.php index 5ff4f083a7..c916e5ca7a 100644 --- a/core/Period/Year.php +++ b/core/Period/Year.php @@ -9,6 +9,13 @@ class Piwik_Period_Year extends Piwik_Period { protected $label = 'year'; + public function getLocalizedShortString() + { + //"2009" + $out = $this->getDateStart()->getLocalized("%longYear%"); + return $out; + } + public function getPrettyString() { $out = $this->getDateStart()->toString('Y'); diff --git a/core/Piwik.php b/core/Piwik.php index ae7360c375..8f928ccf3f 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -407,6 +407,15 @@ class Piwik return sprintf("$symbol%.2f", $value); } + static public function getPercentageSafe($dividend, $divisor, $precision = 0) + { + if($divisor == 0) + { + return 0; + } + return round(100 * $dividend / $divisor, $precision); + } + static public function getPrettyTimeFromSeconds($numberOfSeconds) { $numberOfSeconds = (double)$numberOfSeconds; diff --git a/core/PluginsFunctions/WidgetsList.php b/core/PluginsFunctions/WidgetsList.php index d06f8e8aef..e8339543f7 100644 --- a/core/PluginsFunctions/WidgetsList.php +++ b/core/PluginsFunctions/WidgetsList.php @@ -4,9 +4,9 @@ function Piwik_GetWidgetsList() return Piwik_WidgetsList::get(); } -function Piwik_AddWidget( $pluginName, $controllerMethodToCall, $widgetTitle ) +function Piwik_AddWidget( $widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters = array()) { - Piwik_WidgetsList::add($pluginName, $controllerMethodToCall, $widgetTitle); + Piwik_WidgetsList::add($widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters); } class Piwik_WidgetsList @@ -19,8 +19,17 @@ class Piwik_WidgetsList return self::$widgets; } - static function add($pluginName, $controllerMethodToCall, $widgetTitle) + static function add($widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters) { - self::$widgets[$pluginName][] = array( $widgetTitle, $controllerMethodToCall ); + $widgetCategory = Piwik_Translate($widgetCategory); + $widgetName = Piwik_Translate($widgetName); + $widgetUniqueId = 'widget' . $controllerName . $controllerAction; + self::$widgets[$widgetCategory][] = array( + 'name' => $widgetName, + 'uniqueId' => $widgetUniqueId, + 'parameters' => array ( 'module' => $controllerName, + 'action' => $controllerAction + ) + $customParameters + ); } } diff --git a/core/Site.php b/core/Site.php index eeb7ef68c0..4b04df8915 100644 --- a/core/Site.php +++ b/core/Site.php @@ -28,6 +28,11 @@ class Piwik_Site } } + function __toString() + { + return "site id=".$this->getId().", name=".$this->getName(); + } + function getName() { return self::$infoSites[$this->id]['name']; diff --git a/core/SmartyPlugins/function.loadJavascriptTranslations.php b/core/SmartyPlugins/function.loadJavascriptTranslations.php index 64d218160b..bd1a7fc634 100644 --- a/core/SmartyPlugins/function.loadJavascriptTranslations.php +++ b/core/SmartyPlugins/function.loadJavascriptTranslations.php @@ -1,38 +1,24 @@ <?php /** - * inserts javascript translation array into the template from given plugins - * must be called with 'plugins' argument which consists of space-separated module names (i.e. plugins) - * - * - * Example (use in template): + * Load translation strings suffixed with _js for a given list of modules. + * This function needs to be called when you want to i18n the user interface. * + * How to use the function in smarty templates: * {loadJavascriptTranslations plugins='SitesManager CoreHome General'} * - * loads javascript array translations from main translation file ('General') - * and both 'CoreHome' and 'SitesManager' plugins translations - * - * Note: You can put noHtml=1 option in order to output pure JS code - * - * only translations with '_fs' suffix will be loaded + * This will load the javascript translations array for the modules specified as parameters. + * Only translations string with their ids suffixed with '_js' will be loaded + * Note: You can specify disableOutputScriptTag=1 and the returned value won't be enclosed in Javascript tags. * - * in order to use translation in your javascript use _pk_translate function - * (it is always loaded with translations): + * You can then translate strings in javascript by calling the javascript function: + * _pk_translate('MY_TRANSLATION_STRING_js') * - * <script type="text/javascript"> - * alert(_pk_translate('MY_TRANSLATION_STRING')) - * </script> - * - * Note: Use translation string from your translation file WITHOUT '_js' suffix. - * - * _pk_translate DOES NOT support printf() arguments, but you can call: - * - * sprintf(_pk_translate('_NB_OF_EGGS'),'ten') - * (where _NB_OF_EGGS is defined in translation file as i.e. 'There is %s eggs on the table') - * - * sprintf() function is by default included when loading translations + * _pk_translate does NOT support printf() arguments, but you can call: + * sprintf(_pk_translate('MyPlugin_numberOfEggs_js'),'ten') + * where you would have the following in your translation file plugins/MyPlugin/lang/en.php: + * 'MyPlugin_numberOfEggs_js' => 'There are %s eggs.' */ - function smarty_function_loadJavascriptTranslations($params, &$smarty) { static $pluginTranslationsAlreadyLoaded = array(); @@ -45,12 +31,9 @@ function smarty_function_loadJavascriptTranslations($params, &$smarty) return; } $pluginTranslationsAlreadyLoaded[] = $params['plugins']; - $translate = Piwik_Translate::getInstance(); - $jsTranslations = $translate->getJavascriptTranslations(explode(' ',$params['plugins'])); - - $jsCode = ""; - - if( isset($params['noHtml']) ) + $jsTranslations = Piwik_Translate::getInstance()->getJavascriptTranslations(explode(' ',$params['plugins'])); + $jsCode = ''; + if( isset($params['disableOutputScriptTag']) ) { $jsCode .= $jsTranslations; } @@ -60,6 +43,5 @@ function smarty_function_loadJavascriptTranslations($params, &$smarty) $jsCode .= $jsTranslations; $jsCode .= '</script>'; } - return $jsCode; } diff --git a/core/Translate.php b/core/Translate.php index 48b53029c6..3917bca56f 100644 --- a/core/Translate.php +++ b/core/Translate.php @@ -113,24 +113,17 @@ class Piwik_Translate foreach($GLOBALS['Piwik_translations'] as $key => $value) { - $matches = array(); - - if( preg_match($moduleRegex,$key,$matches) ) { - $varName = $matches[1].'_'.$matches[2]; - $varValue = $value; - - $js .= "".$varName.": '".str_replace("'","\\'",$varValue)."',"; + if( preg_match($moduleRegex,$key) ) { + $js .= '"'.$key.'": "'.str_replace('"','\"',$value).'",'; } - - $matches = null; } $js = substr($js,0,-1); $js .= '};'; $js .= 'if(typeof(piwik_translations) == \'undefined\') { var piwik_translations = new Object; }'. 'for(var i in translations) { piwik_translations[i] = translations[i];} '; - $js .= 'function _pk_translate(tvar, str) { '. - 'var s = str; if( typeof(piwik_translations[tvar]) != \'undefined\' ){ s = piwik_translations[tvar]; }'. - 'return s;}'; + $js .= 'function _pk_translate(translationStringId) { '. + 'if( typeof(piwik_translations[translationStringId]) != \'undefined\' ){ return piwik_translations[translationStringId]; }'. + 'return "The string "+translationStringId+" was not loaded in javascript. Make sure it is prefixed with _js";}'; return $js; } @@ -175,5 +168,3 @@ function Piwik_TranslateException($message, $args = array()) return $message; } } - - diff --git a/core/Url.php b/core/Url.php index e0e221e06f..27b57310ec 100644 --- a/core/Url.php +++ b/core/Url.php @@ -174,6 +174,10 @@ class Piwik_Url $query = ''; foreach($urlValues as $name => $value) { + if(empty($value)) + { + continue; + } if(is_array($value)) { foreach($value as $theValue) diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php index 9854c2b081..c30cb185d6 100644 --- a/core/ViewDataTable.php +++ b/core/ViewDataTable.php @@ -109,6 +109,13 @@ abstract class Piwik_ViewDataTable */ protected $view = null; + /** + * Array of columns names translations + * + * @var array + */ + protected $columnsTranslations = array(); + /** * Method to be implemented by the ViewDataTable_*. * This method should create and initialize a $this->view object @see Piwik_iView @@ -755,6 +762,45 @@ abstract class Piwik_ViewDataTable $this->variablesDefault['filter_sort_order'] = $order; } + + /** + * Sets translation string for given column + * + * @param string $columnName column name + * @param string $columnTranslation column name translation + */ + public function setColumnTranslation( $columnName, $columnTranslation ) + { + $this->columnsTranslations[$columnName] = $columnTranslation; + } + + /** + * Returns column translation if available, in other case given column name + * + * @param string $columnName column name + */ + public function getColumnTranslation( $columnName ) + { + if( isset($this->columnsTranslations[$columnName]) ) + { + return $this->columnsTranslations[$columnName]; + } + else + { + return $columnName; + } + } + + /** + * Sets columns translations array. + * + * @param array $columnsTranslations An associative array indexed by column names, eg. array('nb_visit'=>"Numer of visits") + */ + public function setColumnsTranslations( $columnsTranslations ) + { + $this->columnsTranslations += $columnsTranslations; + } + /** * Sets a custom parameter, that will be printed in the javascript array associated with each datatable * diff --git a/core/ViewDataTable/GenerateGraphData.php b/core/ViewDataTable/GenerateGraphData.php index c041ed75ed..bf5285cca9 100644 --- a/core/ViewDataTable/GenerateGraphData.php +++ b/core/ViewDataTable/GenerateGraphData.php @@ -37,13 +37,25 @@ abstract class Piwik_ViewDataTable_GenerateGraphData extends Piwik_ViewDataTable */ protected $graphLimit = null; + protected $columnsToDisplay = array(); + + public function setColumnsToDisplay($columns) + { + $this->columnsToDisplay = $columns; + } + + public function getColumnsToDisplay() + { + return $this->columnsToDisplay; + } + /** * Sets the number max of elements to display (number of pie slice, vertical bars, etc.) * If the data has more elements than $limit then the last part of the data will be the sum of all the remaining data. * * @param int $limit */ - function setGraphLimit( $limit ) + public function setGraphLimit( $limit ) { $this->graphLimit = $limit; } @@ -57,7 +69,7 @@ abstract class Piwik_ViewDataTable_GenerateGraphData extends Piwik_ViewDataTable { return $this->graphLimit; } - + public function main() { if($this->mainAlreadyExecuted) @@ -82,52 +94,41 @@ abstract class Piwik_ViewDataTable_GenerateGraphData extends Piwik_ViewDataTable ) ); } - $this->dataAvailable = $this->dataTable->getRowsCount() != 0; - - if(!$this->dataAvailable) + $this->isDataAvailable = $this->dataTable->getRowsCount() != 0; + + if(!$this->isDataAvailable) { - $this->view->customizeGraph(); - $this->view->title(Piwik_Translate('General_NoDataForGraph'), '{font-size: 25px;}'); + $this->view->setTitle(Piwik_Translate('General_NoDataForGraph'), '{font-size: 25px;}'); } else { - $data = $this->generateDataFromDataTable(); - $this->view->setData($data); - $this->view->customizeGraph(); + $this->generateDataFromDataTable(); } + //TODO rename + $this->view->customizeGraph(); } - - /** - * Returns a format friendly array from the dataTable - * - * @return array - */ + + //TODO rename protected function generateDataFromDataTable() { $this->dataTable->applyQueuedFilters(); + // We apply a filter to the DataTable, decoding the label column (useful for keywords for example) - $this->dataTable->filter('ColumnCallbackReplace', - array('label','urldecode') - ); - $data = array(); - foreach($this->dataTable->getRows() as $row) + $this->dataTable->filter('ColumnCallbackReplace', array('label','urldecode') ); + + $xLabels = $this->dataTable->getColumn('label'); + $columnNames = array_keys($this->dataTable->getFirstRow()->getColumns()); + unset($columnNames[array_search('label',$columnNames)]); + + $columnNameToTranslation = $columnNameToValue = array(); + foreach($columnNames as $columnName) { - $label = $row->getColumn('label'); - $value = $row->getColumn('nb_uniq_visitors'); - - // case no unique visitors - if($value === false) - { - $value = $row->getColumn('nb_visits'); - } - - $data[] = array( - 'label' => $label, - 'value' => $value, - 'url' => $row->getMetadata('url'), - ); + $columnNameToTranslation[$columnName] = $this->getColumnTranslation($columnName); + $columnNameToValue[$columnName] = $this->dataTable->getColumn($columnName); } - return $data; + $this->view->setAxisXLabels($xLabels); + $this->view->setAxisYValues($columnNameToValue); + $this->view->setAxisYLabels($columnNameToTranslation); } } diff --git a/core/ViewDataTable/GenerateGraphData/ChartEvolution.php b/core/ViewDataTable/GenerateGraphData/ChartEvolution.php index 0dd6c56468..30ee37fd1f 100644 --- a/core/ViewDataTable/GenerateGraphData/ChartEvolution.php +++ b/core/ViewDataTable/GenerateGraphData/ChartEvolution.php @@ -12,196 +12,133 @@ class Piwik_ViewDataTable_GenerateGraphData_ChartEvolution extends Piwik_ViewDat { return 'generateDataChartEvolution'; } + function __construct() { require_once "Visualization/Chart/Evolution.php"; $this->view = new Piwik_Visualization_Chart_Evolution; } - var $lineLabels = array(); - var $data = array(); - - private function generateLine( $dataArray, $columns, $schema = "##label## ##column##" ) + protected function generateDataFromDataTable() { - $data = array(); - foreach($dataArray as $keyName => $table) + $this->dataTable->applyQueuedFilters(); + if(!($this->dataTable instanceof Piwik_DataTable_Array)) { - $table->applyQueuedFilters(); - // initialize data (default values for all lines is 0) - $dataRow = array(); - $rows = $table->getRows(); - foreach($rows as $row) - { - $rowLabel = $schema; - if( strpos($rowLabel, "##label##") !== false ) - { - $rowLabel = str_replace("##label##", $row->getColumn('label'), $rowLabel); - } - foreach($columns as $col) - { - $label = $rowLabel; - if( strpos($label, "##column##") !== false ) - { - $label = str_replace("##column##", $col, $label); - } - if( !isset($this->lineLabels[$label]) ) - { - $this->lineLabels[$label] = count($this->lineLabels); - } - $lineNb = $this->lineLabels[$label]; - - $value = $row->getColumn($col); - - $dataRow['value'.$lineNb] = $value; - } - } - $data[] = $dataRow; + throw new Exception("Expecting a DataTable_Array with custom format to draw an evolution chart"); } - return $data; - } - - private function generateLabels( $dataArray ) - { - $data = array(); - - foreach($dataArray as $keyName => $table) + $xLabels = $uniqueIdsDataTable = array(); + foreach($this->dataTable->metadata as $idDataTable => $metadataDataTable) { - $table->applyQueuedFilters(); - - $data[] = array('label' => $keyName); + $xLabels[] = $metadataDataTable['period']->getLocalizedShortString(); + $uniqueIdsDataTable[] = $idDataTable; } - return $data; - } - - private function addArray( &$data, $newData ) - { - for($i = 0; $i < count($newData); $i++) + // list of column names requested to be plotted, we only need to forward these to the Graph object + $columnNameRequested = $this->getColumnsToDisplay(); + + $columnNameToValue = array(); + foreach($this->dataTable->getArray() as $idDataTable => $dataTable) { - foreach($newData[$i] as $key => $value) + if($dataTable->getRowsCount() > 1) { - $data[$i][$key] = $value; + throw new Exception("Expecting only one row per DataTable"); } - } - } - - private function fillValues( &$data ) - { - $nbLines = count($this->lineLabels); - - for($i = 0; $i < count($data); $i++) - { - for($j = 0; $j < $nbLines; $j++) + $row = $dataTable->getFirstRow(); + if($row !== false) { - if( !isset($data[$i]['value'.$j]) ) + foreach($row->getColumns() as $columnName => $columnValue) { - $data[$i]['value'.$j] = 0; + if(array_search($columnName, $columnNameRequested) !== false) + { + $columnNameToValue[$columnName][$idDataTable] = $columnValue; + } } } } - } - - /* - * generates data for evolution graph from a numeric DataTable (DataTable that has only 'label' and 'value' columns) - */ - protected function generateDataFromNumericDataTable($dataArray, $siteLabel = "") - { - $columnsToDisplay = Piwik_Common::getRequestVar('columns', array(), 'array'); - - // for numeric we want to have only one column name - if( count($columnsToDisplay) != 1 ) - { - $columnsToDisplay = array( 'nb_visits' ); - } - $label = $siteLabel . array_shift($columnsToDisplay); - $this->addArray($this->data, $this->generateLabels($dataArray)); - $this->addArray($this->data, $this->generateLine($dataArray,array('value'),$label)); - $this->fillValues($this->data); - } - - /* - * generates data for evolution graph from a DataTable that has named columns (i.e. 'nb_hits', 'nb_visits') - */ - protected function generateDataFromRegularDataTable($dataArray, $siteLabel = "") - { - // get list of columns to display i.e. array('nb_hits','nb_visits') - $columnsToDisplay = Piwik_Common::getRequestVar('columns', array(), 'array'); - - // default column - if( count($columnsToDisplay) == 0 ) + // make sure all column values are set (at least zero) in order for all unique idDataTable + $columnNameToValueCleaned = array(); + foreach($uniqueIdsDataTable as $uniqueIdDataTable) { - $columnsToDisplay = array( 'nb_visits' ); - } - - $this->addArray($this->data, $this->generateLabels($dataArray)); - $this->addArray($this->data, $this->generateLine($dataArray, $columnsToDisplay, $siteLabel."##label## ##column##")); - $this->fillValues($this->data); - } - - protected function handleSiteGenerateDataFromDataTable($dataArray, $siteLabel = "") - { - // detect if we got numeric Datatable or regular DataTable - foreach($dataArray as $table) - { - $row = $table->getFirstRow(); - - if( $row != null ) + foreach($columnNameToValue as $columnName => $idDataTableToColumnValue) { - $columns = $row->getColumns(); - - // if we got 2 columns - 'label' and 'value' this is numeric DataTable - if( count($columns) == 2 && isset($columns['label']) && isset($columns['value']) ) + if(isset($idDataTableToColumnValue[$uniqueIdDataTable])) { - $this->generateDataFromNumericDataTable($dataArray, $siteLabel); + $columnValue = $idDataTableToColumnValue[$uniqueIdDataTable]; } else { - $this->generateDataFromRegularDataTable($dataArray, $siteLabel); + $columnValue = 0; } - break; + $columnNameToValueCleaned[$columnName][] = $columnValue; } } - } - - public function generateDataFromDataTable() - { - $data = array(); - - if( $this->dataTable->getRowsCount() ) + $columnNames = array_keys($columnNameToValueCleaned); + $columnNameToTranslation = array(); + $columnNameToType = array(); + $nameToType = array( + '_rate' => '%', + '_revenue' => Piwik::getCurrency(), + ); + foreach($columnNames as $columnName) { - $row = null; - - // find first table with rows - foreach($this->dataTable->getArray() as $idsite => $table) + $columnNameToTranslation[$columnName] = $this->getColumnTranslation($columnName); + $columnNameToType[$columnName] = false; + foreach($nameToType as $pattern => $type) { - // detect if we got data from more than one site - if( $table instanceof Piwik_DataTable_Array) - { - // multiple sites - $site = new Piwik_Site($idsite); - - $this->handleSiteGenerateDataFromDataTable($table->getArray(), $site->getName()." "); - } - else if( $table instanceof Piwik_DataTable_Simple && $this->dataTable->getKeyName() == 'idSite') - { - // multiple sites (when numeric DataTable) - $site = new Piwik_Site($idsite); - - $this->handleSiteGenerateDataFromDataTable($table->getFirstRow()->getColumn('value')->getArray(), $site->getName()." "); - } - else + if(strpos($columnName, $pattern) !== false) { - // single site - $this->handleSiteGenerateDataFromDataTable($this->dataTable->getArray()); + $columnNameToType[$columnName] = $type; break; - } - } + } + } + } + $this->view->setAxisXLabels($xLabels); + $this->view->setAxisYValues($columnNameToValueCleaned); + $this->view->setAxisYLabels($columnNameToTranslation); + $this->view->setAxisYValuesTypes($columnNameToType); + + $firstDatatable = reset($this->dataTable->metadata); + $period = $firstDatatable['period']; + switch($period->getLabel()) { + case 'day': $steps = 7; break; + case 'week': $steps = 10; break; + case 'month': $steps = 6; break; + case 'year': $steps = 2; break; + default: $steps = 10; break; + } + $this->view->setXSteps($steps); + + if($this->isLinkEnabled()) + { + $axisXOnClick = array(); + foreach($this->dataTable->metadata as $idDataTable => $metadataDataTable) + { + $period = $metadataDataTable['period']; + $dateInUrl = $period->getDateStart(); + $link = Piwik_Url::getCurrentUrlWithoutQueryString() . + Piwik_Url::getCurrentQueryStringWithParametersModified( array( + 'date' => $dateInUrl, + 'module' => 'CoreHome', + 'action' => 'index', + 'viewDataTable' => null, // we reset the viewDataTable parameter (useless in the link) + 'idGoal' => null, // we reset idGoal + 'columns' => null, + )); + $axisXOnClick[] = $link; + } + $this->view->setAxisXOnClick($axisXOnClick); + } + } - } - array_unshift($this->data, array_keys($this->lineLabels)); - - return $this->data; + private function isLinkEnabled() + { + static $linkEnabled; + if(!isset($linkEnabled)) + { + $linkEnabled = !Piwik_Common::getRequestVar('disableLink', 0, 'int'); + } + return $linkEnabled; } } diff --git a/core/ViewDataTable/GenerateGraphHTML.php b/core/ViewDataTable/GenerateGraphHTML.php index 90ccfa54e7..0523531a82 100644 --- a/core/ViewDataTable/GenerateGraphHTML.php +++ b/core/ViewDataTable/GenerateGraphHTML.php @@ -127,7 +127,7 @@ abstract class Piwik_ViewDataTable_GenerateGraphHTML extends Piwik_ViewDataTable $return .= ' </noscript></div></div> <script type="text/javascript"> -swfobject.embedSWF("'.$pathToLibraryOpenChart.'open-flash-chart.swf", "'. $obj_id .'_swf", "'. $width . '", "' . $height . '", "9.0.0", false, {"data":"'.$url.'"}, {"allowScriptAccess":"sameDomain","wmode":"opaque"}, {"bgcolor":"#FFFFFF"}); +swfobject.embedSWF("'.$pathToLibraryOpenChart.'open-flash-chart.swf", "'. $obj_id .'_swf", "'. $width . '", "' . $height . '", "9.0.0", false, {"data-file":"'.$url.'"}, {"allowScriptAccess":"sameDomain","wmode":"opaque"}, {"bgcolor":"#FFFFFF"}); </script>'; } diff --git a/core/ViewDataTable/HtmlTable.php b/core/ViewDataTable/HtmlTable.php index 7eb9e5160e..ac6d56ca44 100644 --- a/core/ViewDataTable/HtmlTable.php +++ b/core/ViewDataTable/HtmlTable.php @@ -25,13 +25,6 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable * @var array */ protected $columnsToDisplay = array(); - - /** - * Array of columns names translations - * - * @var array - */ - protected $columnsTranslations = array(); /** * Set to true when the DataTable must be loaded along with all its children subtables @@ -63,11 +56,6 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable $this->dataTableTemplate = 'CoreHome/templates/datatable.tpl'; $this->variablesDefault['enable_sort'] = '1'; - // load general columns translations - $this->setColumnTranslation('nb_visits', Piwik_Translate('General_ColumnNbVisits')); - $this->setColumnTranslation('label', Piwik_Translate('General_ColumnLabel')); - $this->setColumnTranslation('nb_uniq_visitors', Piwik_Translate('General_ColumnNbUniqVisitors')); - $this->handleLowPopulation(); } @@ -174,44 +162,6 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable $this->columnsToDisplay[] = $columnName; } - /** - * Sets translation string for given column - * - * @param string $columnName column name - * @param string $columnTranslation column name translation - */ - public function setColumnTranslation( $columnName, $columnTranslation ) - { - $this->columnsTranslations[$columnName] = $columnTranslation; - } - - /** - * Returns column translation if available, in other case given column name - * - * @param string $columnName column name - */ - public function getColumnTranslation( $columnName ) - { - if( isset($this->columnsTranslations[$columnName]) ) - { - return $this->columnsTranslations[$columnName]; - } - else - { - return $columnName; - } - } - - /** - * Sets columns translations array. - * - * @param array $columnsTranslations An associative array indexed by column names, eg. array('nb_visit'=>"Numer of visits") - */ - public function setColumnsTranslations( $columnsTranslations ) - { - $this->columnsTranslations = $columnsTranslations; - } - /** * Returns array( * array('name' => 'nb_visits', 'displayName' => 'Visits'), @@ -281,6 +231,7 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable } return $requestString; } + /** * Set the flag to load the datatable recursively so we can search on subtables as well * diff --git a/core/ViewDataTable/HtmlTable/AllColumns.php b/core/ViewDataTable/HtmlTable/AllColumns.php index 786763abf1..2efdfbf129 100644 --- a/core/ViewDataTable/HtmlTable/AllColumns.php +++ b/core/ViewDataTable/HtmlTable/AllColumns.php @@ -37,8 +37,5 @@ class Piwik_ViewDataTable_HtmlTable_AllColumns extends Piwik_ViewDataTable_HtmlT 'bounce_rate')); $this->dataTable->filter('ColumnCallbackReplace', array('avg_time_on_site', create_function('$averageTimeOnSite', 'return Piwik::getPrettyTimeFromSeconds($averageTimeOnSite);'))); $this->dataTable->filter('ColumnCallbackReplace', array('bounce_rate', create_function('$bounceRate', 'return $bounceRate."%";'))); - $this->setColumnTranslation('nb_actions_per_visit', Piwik_Translate('General_ColumnActionsPerVisit')); - $this->setColumnTranslation('avg_time_on_site', Piwik_Translate('General_ColumnAvgTimeOnSite')); - $this->setColumnTranslation('bounce_rate', Piwik_Translate('General_ColumnBounceRate')); } } diff --git a/core/ViewDataTable/HtmlTable/Goals.php b/core/ViewDataTable/HtmlTable/Goals.php index 1bc961940e..6f4f46ad65 100644 --- a/core/ViewDataTable/HtmlTable/Goals.php +++ b/core/ViewDataTable/HtmlTable/Goals.php @@ -70,8 +70,6 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable protected function postDataTableLoadedFromAPI() { parent::postDataTableLoadedFromAPI(); - $this->setColumnTranslation('revenue_per_visit', 'Value per Visit'); - $this->setColumnTranslation('goals_conversion_rate', 'Visits with Conversions'); $this->columnsToPercentageFilter[] = 'goals_conversion_rate'; foreach($this->columnsToPercentageFilter as $columnName) { diff --git a/core/ViewDataTable/Sparkline.php b/core/ViewDataTable/Sparkline.php index 8b694468ee..1982cba555 100644 --- a/core/ViewDataTable/Sparkline.php +++ b/core/ViewDataTable/Sparkline.php @@ -22,6 +22,18 @@ class Piwik_ViewDataTable_Sparkline extends Piwik_ViewDataTable { return 'sparkline'; } + + protected $columnsToDisplay = array(); + + public function setColumnsToDisplay($columns) + { + $this->columnsToDisplay = $columns; + } + + public function getColumnsToDisplay() + { + return $this->columnsToDisplay; + } /** * @see Piwik_ViewDataTable::main() @@ -37,82 +49,55 @@ class Piwik_ViewDataTable_Sparkline extends Piwik_ViewDataTable // we load the data with the filters applied $this->loadDataTableFromAPI(); - $this->dataAvailable = $this->dataTable->getRowsCount() != 0; - if(!$this->dataAvailable) + $this->isDataAvailable = $this->dataTable->getRowsCount() != 0; + if(!$this->isDataAvailable) { throw new Exception(Piwik_Translate('General_NoDataForGraph')); } - $data = $this->generateDataFromDataTableArray($this->dataTable); + $values = $this->getValuesFromDataTable($this->dataTable); $graph = new Piwik_Visualization_Sparkline; - $graph->setData($data); + $graph->setValues($values); $graph->main(); $this->view = $graph; } - /** - * Given a Piwik_DataTable_Array made of DataTable_Simple rows, returns a php array with the structure: - * array( - * array( label => X, value => Y), - * array( label => A, value => B), - * ... - * ) - * - * This is used for example for the evolution graph (last 30 days visits) or the sparklines. - * - * @param Piwik_DataTable_Array $dataTableArray - * @return array - */ - protected function generateDataFromDataTableArray( Piwik_DataTable_Array $dataTableArray) + protected function getValuesFromDataTable( Piwik_DataTable_Array $dataTableArray) { - $data = array(); + $dataTableArray->applyQueuedFilters(); + + $columns = $this->getColumnsToDisplay(); + $columnToPlot = false; + if(!empty($columns)) + { + $columnToPlot = $columns[0]; + } + $values = array(); foreach($dataTableArray->getArray() as $keyName => $table) { - if($table instanceof Piwik_DataTable_Array) + $value = 0; + if($table->getRowsCount() > 1) { - throw new Exception("Operation not supported (yet)"); + throw new Exception("Expecting only one row per DataTable"); } - $value = false; - $onlyRow = $table->getFirstRow(); if($onlyRow !== false) { - $value = $onlyRow->getColumn('value'); - if($value == false) + if(!empty($columnToPlot)) { - // TEMP - // quite a hack, useful in the case at this point we do have a normal row with nb_visits, nb_actions, nb_uniq_visitors, etc. - // instead of the dataTable_Simple row (label, value) - // to do it properly we'd need to - // - create a filter that removes columns - // - apply this filter to keep only the column called nb_uniq_visitors - // - rename this column as 'value' - // and at this point the getcolumn('value') would have worked - // this code is executed eg. when displaying a sparkline for the last 30 days displaying the number of unique visitors coming from search engines - - //TODO solution: use a filter rename column etc. - - // another solution would be to add a method to the Referers API giving directly the integer 'visits from search engines' - // and we would build automatically the dataTable_array of datatatble_simple from these integers - // but we'd have to add this integer to be recorded during archiving etc. - $value = $onlyRow->getColumn('nb_uniq_visitors'); - if($value === false) - { - $value = $onlyRow->getColumn('nb_visits'); - } + $value = $onlyRow->getColumn($columnToPlot); + } + // if not specified, we load by default the first column found + // eg. case of getLastDistinctCountriesGraph + else + { + $columns = $onlyRow->getColumns(); + $value = current($columns); } } - - if($value === false) - { - $value = 0; - } - $data[] = array( - 'label' => $keyName, - 'value' => $value - ); + $values[] = $value; } - return $data; + return $values; } } diff --git a/core/Visualization/Chart.php b/core/Visualization/Chart.php index c86e80a933..2f12137255 100644 --- a/core/Visualization/Chart.php +++ b/core/Visualization/Chart.php @@ -9,78 +9,160 @@ * @package Piwik_Visualization */ -require_once "Visualization/OpenFlashChart.php"; +require_once "libs/open-flash-chart/php-ofc-library/open-flash-chart.php"; + /** * Generates the data in the Open Flash Chart format, from the given data. - * Uses Open flash chart PHP library @see Piwik_Visualization_OpenFlashChart * * @package Piwik_Visualization */ -abstract class Piwik_Visualization_Chart extends Piwik_Visualization_OpenFlashChart +abstract class Piwik_Visualization_Chart implements Piwik_iView { - protected $dataGraph = array(); + /** + * @var Piwik_Visualization_OpenFlashChart + */ + protected $chart = null; + + protected $xLabels = array(); + protected $xOnClick = array(); + protected $xSteps = 2; + + protected $yLabels = array(); + protected $yValues = array(); - function setData($data) + function __construct() { - $this->dataGraph = $data; + $this->chart = new open_flash_chart(); } - function getCount() + public function setAxisXLabels($xLabels) { - return count($this->dataGraph); + $this->xLabels = $xLabels; } - function customizeGraph() + public function setAxisYValues($values) { - $this->set_num_decimals ( 0 ); - $this->set_is_decimal_separator_comma( false ); - $this->set_is_thousand_separator_disabled( true ); - $this->y_axis_colour = '#ffffff'; - $this->x_axis_colour = '#596171'; - $this->x_grid_colour = $this->y_grid_colour = '#E0E1E4'; - - // approx 5 x labels on the graph - $steps = ceil($this->getCount() / 5); - $steps = $steps + $steps % 2; // make sure modulo 2 - - $this->set_x_label_style( 10, $this->x_axis_colour, 0, $steps, $this->x_grid_colour ); - $this->set_x_axis_steps( $steps / 2 ); - - - $stepsY = ceil($this->getCount() / 4); - $this->y_label_steps( $stepsY / 3 ); - $this->y_label_steps( 4 ); - - $this->bg_colour = '#ffffff'; - $this->set_inner_background('#ffffff'); - - $this->set_tool_tip( '#x_label# <br>#val# #key# ' ); + $this->yValues = $values; + } + + public function setAxisYLabels($labels) + { + $this->yLabels = $labels; + } + + public function setAxisXOnClick($onClick) + { + $this->xOnClick = $onClick; + } + + //TODO call + make sure matches beginning of period? (hard..) + // day -> every 7 days + // week & year -> 1, plot last + // month -> every 12 months, plot last 24 + public function setXSteps($steps) + { + $this->xSteps = $steps; + } + + protected function getDataSetsToDisplay() + { + if(empty($this->yValues)) { + return false; + } + return array_keys($this->yValues); } - function prepareData() - { - $label = $data = array(); - $max = 0; - foreach($this->dataGraph as $row) + public function getMaxValue() + { + $datasetsIds = $this->getDataSetsToDisplay(); + if($datasetsIds === false) + { + return 0; + } + $maxCrossDataSets = false; + foreach($datasetsIds as $dataset) { - $label[] = $row['label']; - $data[] = $row['value']; - - if($row['value'] > $max) + $maxValue = max($this->yValues[$dataset]); + if($maxCrossDataSets === false + || $maxValue > $maxCrossDataSets) { - $max = $row['value']; + $maxCrossDataSets = $maxValue; } } - $this->arrayData = $data; - $this->arrayLabel = $label; + if($maxCrossDataSets > 10) + { + $maxCrossDataSets = $maxCrossDataSets + 10 - $maxCrossDataSets % 10; + } + return $maxCrossDataSets; + } + + public function setTitle($text, $css) + { + $title = new title($text); + $title->set_style($css); + $this->chart->set_title($title); + } + + public function render() + { + return $this->chart->toPrettyString(); + } + + function customizeGraph() + { + $this->chart->set_number_format($num_decimals = 0, + $is_fixed_num_decimals_forced = true, + $is_decimal_separator_comma = false, + $is_thousand_separator_disabled = false); + + $gridColour = '#E0E1E4'; + $countValues = count($this->xLabels); + $maxValue = $this->getMaxValue(); + $minValue = 0; - $this->arrayLabel = str_replace(","," -",$this->arrayLabel); + // X Axis + $this->x = new x_axis(); + $this->x->set_colour( '#596171' ); + $this->x->set_grid_colour( $gridColour ); + $this->x->set_steps($this->xSteps); - $this->maxData = $max; - if($this->maxData > 10) + // X Axis Labels + $this->x_labels = new x_axis_labels(); + $this->x_labels->set_size(11); + //manually fix the x labels step as this doesn't work in this OFC release.. + $xLabelsStepped = $this->xLabels; + foreach($xLabelsStepped as $i => &$xLabel) { - $this->maxData = $max + 10 - $max % 10; + if(($i % $this->xSteps) != 0) + { + $xLabel = ''; + } } + $this->x_labels->set_labels($xLabelsStepped); + $this->x_labels->set_steps(2); + $this->x->set_labels($this->x_labels); + + // Y Axis + $this->y = new y_axis(); + $this->y->set_colour('#ffffff'); + $this->y->set_grid_colour($gridColour); + $stepsCount = 2; + $stepsEveryNLabel = ceil(($maxValue - $minValue) / $stepsCount); + if($maxValue == 0) + { + $maxValue = 1; + } + $this->y->set_range( $minValue, $maxValue, $stepsEveryNLabel); + + // Tooltip + $this->tooltip = new tooltip(); + $this->tooltip->set_shadow( true ); + $this->tooltip->set_stroke( 1 ); + + // Attach elements to the graph + $this->chart->set_x_axis($this->x); + $this->chart->set_y_axis($this->y); + $this->chart->set_tooltip($this->tooltip); + $this->chart->set_bg_colour('#ffffff'); } - } diff --git a/core/Visualization/Chart/Evolution.php b/core/Visualization/Chart/Evolution.php index 66005ca6a9..6cef02f6e0 100644 --- a/core/Visualization/Chart/Evolution.php +++ b/core/Visualization/Chart/Evolution.php @@ -16,94 +16,90 @@ require_once "Visualization/Chart.php"; * * @package Piwik_Visualization */ -class Piwik_Visualization_Chart_Evolution extends Piwik_Visualization_Chart +class Piwik_Visualization_Chart_Evolution extends Piwik_Visualization_Chart { + protected $yValuesType = array(); + function setAxisYValuesTypes($yValuesTypes) + { + $this->yValuesTypes = $yValuesTypes; + } + function customizeGraph() { parent::customizeGraph(); - + $dataSetsToDisplay = $this->getDataSetsToDisplay(); + if($dataSetsToDisplay === false) + { + return; + } + $colors = array( "0x3357A0", - "0x9933CC", "0xCC3399", + "0x9933CC", "0x80a033", "0xFD9816", "0x246AD2", "0xFD16EA", "0x49C100", - ); - - // first row in array contains line labels (legend) - $legendLabels = array_shift($this->dataGraph); - - $line = array(); - - // define labels - foreach($legendLabels as $nbLabel => $labelName) - { - $line[$nbLabel] = new line_hollow( 1, 3, $colors[$nbLabel] ); - $line[$nbLabel]->key( $labelName, 10 ); - } - - $maxData = 0; - $xLabels = array(); - $cnt = count($this->dataGraph); + ); - // loop over data - foreach($this->dataGraph as $values) + $i = 0; + foreach($dataSetsToDisplay as $dataSetToDisplay) { - // add x axis value (label) - array_push($xLabels, $values['label']); + $color = $colors[$i]; + + $labelName = $this->yLabels[$dataSetToDisplay]; + $d = new hollow_dot(); + $d->size(3)->halo_size(0)->colour($color); + + $line = new line(); + $line->set_default_dot_style($d); + $line->set_key($labelName, 11); + $line->set_width( 1 ); + $line->set_colour( $color ); - // loop over values for all lines (y axis values) - for($j = 0; $j < count($legendLabels); $j++) - { - // get the y axis value for line $j - $dotValue = $values['value'.$j]; + // Line Values + // Note: we have to manually create the dot values as the steps feature doens't work on X axis + // when it's working again, we can remove code below and set generic tooltip above: // ->tooltip('#x_label#<br>#val# '.$labelName) + $yValues = $this->yValues[$dataSetToDisplay]; + $labelName = $this->yLabels[$dataSetToDisplay]; + $lineValues = array(); + $j = 0; + foreach($this->xLabels as $label) { + $value = $yValues[$j]; + $lineValue = new hollow_dot($value); - // find maximum y axis value - if( $dotValue > $maxData ) - { - $maxData = $dotValue; - } - - $link = null; - if($this->isLinkEnabled()) + $unit = ''; + if(!empty($this->yValuesTypes[$dataSetToDisplay])) { - $spacePosition = strpos($values['label'],' '); - if($spacePosition === false) - { - $spacePosition = strlen($values['label']); - } - $link = Piwik_Url::getCurrentScriptName() . - Piwik_Url::getCurrentQueryStringWithParametersModified( array( - 'date' => substr($values['label'],0,$spacePosition), - 'module' => 'CoreHome', - 'action' => 'index', - 'viewDataTable' => null, // we reset the viewDataTable parameter (useless in the link) - 'idGoal' => null, // we reset idGoal - )); - // add the dot on the chart and link it - $line[$j]->add_link($dotValue, $link); + $unit = $this->yValuesTypes[$dataSetToDisplay]; } - else + // set the Y Label to display the right unit + $this->y->set_label_text("#val#$unit"); + + $lineValue->tooltip("$label<br>$value$unit $labelName"); + if(!empty($this->xOnClick)) { - $line[$j]->add($dotValue); + $lineValue->on_click('redirectToUrl("'.$this->xOnClick[$j].'")'); } + $lineValues[] = $lineValue; + $j++; } + $line->set_values( $lineValues ); + $lines[] = $line; + $i++; } - $this->data_sets = $line; - $this->set_y_max( $maxData ); - $this->set_x_labels( $xLabels ); - } - - private function isLinkEnabled() - { - static $linkEnabled; - if(!isset($linkEnabled)) + foreach($lines as $line) + { + $this->chart->add_element($line); + } + // if one column is a percentage we set the grid accordingly + // note: it is invalid to plot a percentage dataset along with a numeric dataset + //TODO only if the max was 100!! + if(array_search('%', $this->yValuesTypes) !== false) { - $linkEnabled = !Piwik_Common::getRequestVar('disableLink', 0, 'int'); + $this->y->set_range( 0, 100, 50); } - return $linkEnabled; } } diff --git a/core/Visualization/Chart/Pie.php b/core/Visualization/Chart/Pie.php index 46b5aace60..8ea8e7e2ec 100644 --- a/core/Visualization/Chart/Pie.php +++ b/core/Visualization/Chart/Pie.php @@ -11,28 +11,61 @@ require_once "Visualization/Chart.php"; /** - * - * Customize the Pie chart style for the flash graph + * Customize & set values for the Flash Pie chart * * @package Piwik_Visualization */ class Piwik_Visualization_Chart_Pie extends Piwik_Visualization_Chart { + // return the first dataset id from the list + protected function getDataSetsToDisplay() + { + $dataSetsToDisplay = parent::getDataSetsToDisplay(); + if($dataSetsToDisplay === false) + { + return false; + } + return array_slice($dataSetsToDisplay, 0, 1); + } + function customizeGraph() { parent::customizeGraph(); - $this->prepareData(); - - for($i = 0, $cnt = count($this->arrayLabel); $i < $cnt; $i++) - { - $label = $this->arrayLabel[$i]; - $this->arrayLabel[$i] = (strlen($label) > 20 ? substr($label, 0, 20).'...' : $label); - } - $this->set_x_label_style( 12, $this->x_axis_colour, 0, 2, $this->bg_colour ); - $this->pie(60,'#505050','{font-size: 12px; color: #142448}', true); - $this->pie_values( $this->arrayData, $this->arrayLabel ); - $this->pie_slice_colours( array('#3C5A69','#679BB5','#695A3C','#B58E67','#969696') ); + $dataSetsToDisplay = $this->getDataSetsToDisplay(); + if($dataSetsToDisplay === false) + { + return; + } + $dataSetToDisplay = current($dataSetsToDisplay); + + // create the Pie + $pie = new pie(); + $pie->set_alpha(0.6); + $pie->set_start_angle( 35 ); + $pie->add_animation( new pie_fade() ); + $pie->set_label_colour('#142448'); + $pie->set_colours( array('#3C5A69','#679BB5','#695A3C','#B58E67','#969696') ); + + // create the Pie values + $yValues = $this->yValues[$dataSetToDisplay]; + $labelName = $this->yLabels[$dataSetToDisplay]; + $sum = array_sum($yValues); + $pieValues = array(); + $i = 0; + foreach($this->xLabels as $label) { + $value = $yValues[$i]; + $i++; + // we never plot empty pie slices (eg. visits by server time pie chart) + if($value <= 0) { + continue; + } + $pieValue = new pie_value($value, $label); + $percentage = round(100 * $value / $sum); + $pieValue->set_tooltip("$label <br>$percentage% ($value $labelName)"); + $pieValues[] = $pieValue; + } + $pie->set_values($pieValues); - $this->set_tool_tip( '#x_label# <br>#val# ' ); + $this->chart->add_element($pie); } } diff --git a/core/Visualization/Chart/VerticalBar.php b/core/Visualization/Chart/VerticalBar.php index d94272df9b..a87487bb51 100644 --- a/core/Visualization/Chart/VerticalBar.php +++ b/core/Visualization/Chart/VerticalBar.php @@ -12,25 +12,59 @@ require_once "Visualization/Chart.php"; /** - * - * Customize the Vertical bar chart style for the flash graph + * Customize & set values for the flash Vertical bar chart * * @package Piwik_Visualization - * */ class Piwik_Visualization_Chart_VerticalBar extends Piwik_Visualization_Chart { + // return the first dataset id from the list + protected function getDataSetsToDisplay() + { + $dataSetsToDisplay = parent::getDataSetsToDisplay(); + if($dataSetsToDisplay === false) + { + return false; + } + return array_slice($dataSetsToDisplay, 0, 1); + } + function customizeGraph() { parent::customizeGraph(); - $this->prepareData(); - $this->set_data( $this->arrayData ); - $this->set_x_labels( $this->arrayLabel ); - $this->set_x_label_style( 12, $this->x_axis_colour, 0, 2, $this->bg_colour ); - $this->set_x_axis_steps( 2 ); - $this->set_y_max( $this->maxData ); - $this->y_label_steps( 2 ); - $this->bar_filled( 50, '#3B5AA9', '#063E7E', 'visits', 10 ); + $dataSetsToDisplay = $this->getDataSetsToDisplay(); + if($dataSetsToDisplay === false) + { + return; + } + $dataSetToDisplay = current($dataSetsToDisplay); + + $this->x->set_grid_colour('#ffffff'); + $this->x_labels->set_steps(2); + $this->x->set_stroke(1); + + // create the Bar object + $bar = new bar_filled('#3B5AA9', '#063E7E'); + $bar->set_alpha(0.5); + $bar->set_key($this->yLabels[$dataSetToDisplay], 12); + $bar->set_tooltip( '#val# #key#'); + + // create the bar values + $yValues = $this->yValues[$dataSetToDisplay]; + $labelName = $this->yLabels[$dataSetToDisplay]; + $sum = array_sum($yValues); + $barValues = array(); + $i = 0; + foreach($this->xLabels as $label) { + $value = $yValues[$i]; + $barValue = new bar_value($value); + $percentage = round(100 * $value / $sum); + $barValue->set_tooltip("$label <br>$value $labelName ($percentage%)"); + $barValues[] = $barValue; + $i++; + } + $bar->set_values($barValues); + $this->chart->add_element($bar); } } diff --git a/core/Visualization/OpenFlashChart.php b/core/Visualization/OpenFlashChart.php deleted file mode 100644 index 1b65f3a0fa..0000000000 --- a/core/Visualization/OpenFlashChart.php +++ /dev/null @@ -1,1637 +0,0 @@ -<?php -/** - * Piwik - Open source web analytics - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later - * @version $Id: OpenFlashChart.php 566 2008-07-21 00:34:43Z matt $ - * - * @package Piwik_Visualization - * @subpackage OFC - */ - -require_once "iView.php"; - - -/** - * Original class provided by Open Flash Chart - * - * @package Piwik_Visualization - */ -abstract class Piwik_Visualization_OpenFlashChart implements Piwik_iView -{ - function __construct() - { - $this->data_sets = array(); - $this->data = array(); - $this->links = array(); - $this->width = 250; - $this->height = 200; - $this->js_path = 'js/'; - $this->swf_path = ''; - $this->x_labels = array(); - $this->y_min = ''; - $this->y_max = ''; - $this->x_min = ''; - $this->x_max = ''; - $this->y_steps = ''; - $this->title = ''; - $this->title_style = ''; - $this->occurence = 0; - - $this->x_offset = ''; - - $this->x_tick_size = -1; - - $this->y2_max = ''; - $this->y2_min = ''; - - // GRID styles: - $this->x_axis_colour = ''; - $this->x_axis_3d = ''; - $this->x_grid_colour = ''; - $this->x_axis_steps = 1; - $this->y_axis_colour = ''; - $this->y_grid_colour = ''; - $this->y2_axis_colour = ''; - - // AXIS LABEL styles: - $this->x_label_style = ''; - $this->y_label_style = ''; - $this->y_label_style_right = ''; - - - // AXIS LEGEND styles: - $this->x_legend = ''; - $this->x_legend_size = 20; - $this->x_legend_colour = '#000000'; - - $this->y_legend = ''; - $this->y_legend_right = ''; - //$this->y_legend_size = 20; - //$this->y_legend_colour = '#000000'; - - $this->lines = array(); - $this->line_default['type'] = 'line'; - $this->line_default['values'] = '3,#87421F'; - //$this->js_line_default = 'flashvars["line"] = "3,#87421F";'; - - $this->bg_colour = ''; - $this->bg_image = ''; - - $this->inner_bg_colour = ''; - $this->inner_bg_colour_2 = ''; - $this->inner_bg_angle = ''; - - // PIE chart ------------ - $this->pie = ''; - $this->pie_values = ''; - $this->pie_colours = ''; - $this->pie_labels = ''; - - $this->tool_tip = ''; - - // which data lines are attached to the - // right Y axis? - $this->y2_lines = array(); - - // Number formatting: - $this->y_format=''; - $this->num_decimals=''; - $this->is_fixed_num_decimals_forced=''; - $this->is_decimal_separator_comma=''; - $this->is_thousand_separator_disabled=''; - - $this->output_type = ''; - - // - // set some default value incase the user forgets - // to set them, so at least they see *something* - // even is it is only the axis and some ticks - // - $this->set_y_min( 0 ); - $this->set_y_max( 20 ); - $this->set_x_axis_steps( 1 ); - $this->y_label_steps( 5 ); - } - - /** - * Set the unique_id to use for the flash object id. - */ - function set_unique_id() - { - $this->unique_id = uniqid(rand(), true); - } - - /** - * Get the flash object ID for the last rendered object. - */ - function get_unique_id() - { - return ($this->unique_id); - } - - /** - * Set the base path for the swfobject.js - * - * @param base_path a string argument. - * The path to the swfobject.js file - */ - function set_js_path($path) - { - $this->js_path = $path; - } - - /** - * Set the base path for the open-flash-chart.swf - * - * @param path a string argument. - * The path to the open-flash-chart.swf file - */ - function set_swf_path($path) - { - $this->swf_path = $path; - } - - /** - * Set the type of output data. - * - * @param type a string argument. - * The type of data. Currently only type is js, or nothing. - */ - function set_output_type($type) - { - $this->output_type = $type; - } - - /** - * returns the next line label for multiple lines. - */ - function next_line() - { - $line_num = ''; - if( count( $this->lines ) > 0 ) - $line_num = '_'. (count( $this->lines )+1); - - return $line_num; - } - - // escape commas (,) - static function esc( $text ) - { - // we replace the comma so it is not URL escaped - // if it is, flash just thinks it is a comma - // which is no good if we are splitting the - // string on commas. - $tmp = str_replace( ',', '#comma#', $text ); - //$tmp = utf8_encode( $tmp ); - // now we urlescape all dodgy characters (like & % $ etc..) - return urlencode( $tmp ); - } - - /** - * Format the text to the type of output. - */ - function format_output($function,$values) - { - if($this->output_type == 'js') - { - $tmp = 'flashvars["' . $function . '"] = "' . $values . '";'; - } - else - { - $tmp = '&'. $function .'='. $values .'&'; - } - - return $tmp; - } - - /** - * Set the text and style of the title. - * - * @param title a string argument. - * The text of the title. - * @param style a string. - * CSS styling of the title. - */ - function set_title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the width of the chart. - * - * @param width an int argument. - * The width of the chart frame. - */ - function set_width( $width ) - { - $this->width = $width; - } - - /** - * Set the height of the chart. - * - * @param height an int argument. - * The height of the chart frame. - */ - function set_height( $height ) - { - $this->height = $height; - } - - /** - * Set the base path of the swfobject. - * - * @param base a string argument. - * The base path of the swfobject. - */ - function set_base( $base='js/' ) - { - $this->base = $base; - } - - // Number formatting: - function set_y_format( $val ) - { - $this->y_format = $val; - } - - function set_num_decimals( $val ) - { - $this->num_decimals = $val; - } - - function set_is_fixed_num_decimals_forced( $val ) - { - $this->is_fixed_num_decimals_forced = $val?'true':'false'; - } - - function set_is_decimal_separator_comma( $val ) - { - $this->is_decimal_separator_comma = $val?'true':'false'; - } - - function set_is_thousand_separator_disabled( $val ) - { - $this->is_thousand_separator_disabled = $val?'true':'false'; - } - - /** - * Set the data for the chart - * @param a an array argument. - * An array of the data to add to the chart. - */ - function set_data( $a ) - { - $this->data[] = implode(',',$a); - } - - // UGH, these evil functions are making me fell ill - function set_links( $links ) - { - // TO DO escape commas: - $this->links[] = implode(',',$links); - } - - // $val is a boolean - function set_x_offset( $val ) - { - $this->x_offset = $val?'true':'false'; - } - - /** - * Set the tooltip to be displayed on each chart item.\n - * \n - * Replaceable tokens that can be used in the string include: \n - * #val# - The actual value of whatever the mouse is over. \n - * #key# - The key string. \n - * \<br> - New line. \n - * #x_label# - The X label string. \n - * #x_legend# - The X axis legend text. \n - * Default string is: "#x_label#<br>#val#" \n - * - * @param tip a string argument. - * A formatted string to show as the tooltip. - */ - function set_tool_tip( $tip ) - { - $this->tool_tip = $this->esc( $tip ); - } - - /** - * Set the x axis labels - * - * @param a an array argument. - * An array of the x axis labels. - */ - function set_x_labels( $a ) - { - $tmp = array(); - foreach( $a as $item ) - $tmp[] = $this->esc( $item ); - $this->x_labels = $tmp; - } - - /** - * Set the look and feel of the x axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - * @param orientation an int argument. - * The orientation of the x-axis text. - * 0 - Horizontal - * 1 - Vertical - * 2 - 45 degrees - * @param step an int argument. - * Show the label on every $step label. - * @param grid_colour a string argument. - */ - function set_x_label_style( $size, $colour='', $orientation=0, $step=-1, $grid_colour='' ) - { - $this->x_label_style = $size; - - if( strlen( $colour ) > 0 ) - $this->x_label_style .= ','. $colour; - - if( $orientation > -1 ) - $this->x_label_style .= ','. $orientation; - - if( $step > 0 ) - $this->x_label_style .= ','. $step; - - if( strlen( $grid_colour ) > 0 ) - $this->x_label_style .= ','. $grid_colour; - } - - /** - * Set the background colour. - * @param colour a string argument. - * The hex colour value. - */ - function set_bg_colour( $colour ) - { - $this->bg_colour = $colour; - } - - /** - * Set a background image. - * @param url a string argument. - * The location of the image. - * @param x a string argument. - * The x location of the image. 'Right', 'Left', 'Center' - * @param y a string argument. - * The y location of the image. 'Top', 'Bottom', 'Middle' - */ - function set_bg_image( $url, $x='center', $y='center' ) - { - $this->bg_image = $url; - $this->bg_image_x = $x; - $this->bg_image_y = $y; - } - - /** - * Attach a set of data (a line, area or bar chart) to the right Y axis. - * @param data_number an int argument. - * The numbered order the data was attached using set_data. - */ - function attach_to_y_right_axis( $data_number ) - { - $this->y2_lines[] = $data_number; - } - - /** - * Set the background colour of the grid portion of the chart. - * @param col a string argument. - * The hex colour value of the background. - * @param col2 a string argument. - * The hex colour value of the second colour if you want a gradient. - * @param angle an int argument. - * The angle in degrees to make the gradient. - */ - function set_inner_background( $col, $col2='', $angle=-1 ) - { - $this->inner_bg_colour = $col; - - if( strlen($col2) > 0 ) - $this->inner_bg_colour_2 = $col2; - - if( $angle != -1 ) - $this->inner_bg_angle = $angle; - } - - /** - * Internal function to build the y label style for y and y2 - */ - function _set_y_label_style( $size, $colour ) - { - $tmp = $size; - - if( strlen( $colour ) > 0 ) - $tmp .= ','. $colour; - return $tmp; - } - - /** - * Set the look and feel of the y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_label_style( $size, $colour='' ) - { - $this->y_label_style = $this->_set_y_label_style( $size, $colour ); - } - - /** - * Set the look and feel of the right y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_right_label_style( $size, $colour='' ) - { - $this->y_label_style_right = $this->_set_y_label_style( $size, $colour ); - } - - function set_x_max( $max ) - { - $this->x_max = floatval( $max ); - } - - function set_x_min( $min ) - { - $this->x_min = floatval( $min ); - } - - /** - * Set the maximum value of the y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_max( $max ) - { - $this->y_max = floatval( $max ); - } - - /** - * Set the minimum value of the y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_min( $min ) - { - $this->y_min = floatval( $min ); - } - - /** - * Set the maximum value of the right y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_right_max( $max ) - { - $this->y2_max = floatval($max); - } - - /** - * Set the minimum value of the right y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_right_min( $min ) - { - $this->y2_min = floatval($min); - } - - /** - * Show the y label on every $step label. - * - * @param val an int argument. - * Show the label on every $step label. - */ - function y_label_steps( $val ) - { - $this->y_steps = intval( $val ); - } - - function title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the parameters of the x legend. - * - * @param text a string argument. - * The text of the x legend. - * @param font_size an int argument. - * The font size of the x legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_x_legend( $text, $size=-1, $colour='' ) - { - $this->x_legend = $this->esc( $text ); - if( $size > -1 ) - $this->x_legend_size = $size; - - if( strlen( $colour )>0 ) - $this->x_legend_colour = $colour; - } - - /** - * Set the size of the x label ticks. - * - * @param size an int argument. - * The size of the ticks in pixels. - */ - function set_x_tick_size( $size ) - { - if( $size > 0 ) - $this->x_tick_size = $size; - } - - /** - * Set how often you would like to show a tick on the x axis. - * - * @param steps an int argument. - * Show a tick ever $steps. - */ - function set_x_axis_steps( $steps ) - { - if ( $steps > 0 ) - $this->x_axis_steps = $steps; - } - - /** - * Set the depth in pixels of the 3D X axis slab. - * - * @param size an int argument. - * The depth in pixels of the 3D X axis. - */ - function set_x_axis_3d( $size ) - { - if( $size > 0 ) - $this->x_axis_3d = intval($size); - } - - /** - * The private method of building the y legend output. - */ - function _set_y_legend( $text, $size, $colour ) - { - $tmp = $text; - - if( $size > -1 ) - $tmp .= ','. $size; - - if( strlen( $colour )>0 ) - $tmp .= ','. $colour; - - return $tmp; - } - - /** - * Set the parameters of the y legend. - * - * @param text a string argument. - * The text of the y legend. - * @param font_size an int argument. - * The font size of the y legend text. - * @param colour a string argument - * The hex colour value of the font colour. - */ - function set_y_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the parameters of the right y legend. - * - * @param text a string argument. - * The text of the right y legend. - * @param font_size an int argument. - * The font size of the right y legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_y_right_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend_right = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the colour of the x axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the x axis line. - * @param grid a string argument. - * The hex colour value of the x axis grid. - */ - function x_axis_colour( $axis, $grid='' ) - { - $this->x_axis_colour = $axis; - $this->x_grid_colour = $grid; - } - - /** - * Set the colour of the y axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the y axis line. - * @param grid a string argument. - * The hex colour value of the y axis grid. - */ - function y_axis_colour( $axis, $grid='' ) - { - $this->y_axis_colour = $axis; - - if( strlen( $grid ) > 0 ) - $this->y_grid_colour = $grid; - } - - /** - * Set the colour of the right y axis line. - * - * @param colour a string argument. - * The hex colour value of the right y axis line. - */ - function y_right_axis_colour( $colour ) - { - $this->y2_axis_colour = $colour; - } - - /** - * Draw a line without markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label - * @param circles an int argument - * Need to find out. - */ - function line( $width, $colour='', $text='', $size=-1, $circles=-1 ) - { - $type = 'line'. $this->next_line(); - - $description = ''; - if( $width > 0 ) - { - $description .= $width; - $description .= ','. $colour; - } - - if( strlen( $text ) > 0 ) - { - $description.= ','. $text; - $description .= ','. $size; - } - - if( $circles > 0 ) - $description .= ','. $circles; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with solid dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_dot( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_dot'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with hollow dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_hollow( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_hollow'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw an area chart. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param alpha an int argument. - * The percentage of transparency of the fill colour. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - * @param fill_colour a string argument. - * The hex colour value of the fill colour. - */ - function area_hollow( $width, $dot_size, $colour, $alpha, $text='', $font_size='', $fill_colour='' ) - { - $type = 'area_hollow'. $this->next_line(); - - $description = "$width,$dot_size,$colour,$alpha"; - - if( strlen( $text ) > 0 ) - $description .= ",$text,$font_size"; - - if( strlen( $fill_colour ) > 0 ) - $description .= ','. $fill_colour; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart with an outline. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param colour_outline a strng argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_filled( $alpha, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'filled_bar'. $this->next_line(); - - $description = "$alpha,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - function bar_sketch( $alpha, $offset, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'bar_sketch'. $this->next_line(); - - $description = "$alpha,$offset,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_3D( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_3d'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart that looks like glass. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param outline_colour a string argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_glass( $alpha, $colour, $outline_colour, $text='', $size=-1 ) - { - $type = 'bar_glass'. $this->next_line(); - - $description = $alpha .','. $colour .','. $outline_colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a faded bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_fade( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_fade'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - function candle( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'candle'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function hlc( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'hlc'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function scatter( $data, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'scatter'. $this->next_line(); - - $description = $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - - // - // Patch by, Jeremy Miller (14th Nov, 2007) - // - /** - * Draw a pie chart. - * - * @param alpha an int argument. - * The percentage of transparency of the pie colour. - * @param $style a string argument. - * CSS style string - * @param label_colour a string argument. - * The hex colour value of the label. - * @param gradient a boolean argument. - * Use a gradient true or false. - * @param border_size an int argument. - * Size of the border in pixels. - */ - function pie( $alpha, $line_colour, $style, $gradient = true, $border_size = false ) - { - $this->pie = $alpha.','.$line_colour.','.$style; - if( !$gradient ) - { - $this->pie .= ','.!$gradient; - } - if ($border_size) - { - if ($gradient === false) - { - $this->pie .= ','; - } - $this->pie .= ','.$border_size; - } - } - - /** - * Set the values of the pie chart. - * - * @param values an array argument. - * An array of the values for the pie chart. - * @param labels an array argument. - * An array of the labels for the pie pieces. - * @param links an array argument. - * An array of the links to the pie pieces. - */ - function pie_values( $values, $labels=array(), $links=array() ) - { - $this->pie_values = implode(',',$values); - $this->pie_labels = implode(',',$labels); - $this->pie_links = implode(",",$links); - } - - /** - * Set the pie slice colours. - * - * @param colours an array argument. - * The hex colour values of the pie pieces. - */ - function pie_slice_colours( $colours ) - { - $this->pie_colours = implode(',',$colours); - } - - - /** - * Render the output. - */ - function render() - { - $tmp = array(); - - //echo headers_sent() ?'yes':'no'; - if( !headers_sent() ) - header('content-type: text; charset: utf-8'); - - if($this->output_type == 'js') - { - $this->set_unique_id(); - - // alternate content (<p></p>) is empty for browsers without Flash - $tmp[] = '<div id="' . $this->unique_id . '"><p></p></div>'; - $tmp[] = '<script type="text/javascript" src="' . $this->js_path . 'swfobject.js"></script>'; - $tmp[] = '<script type="text/javascript">'; - $tmp[] = 'var flashvars = [];'; - } - - if( strlen( $this->title ) > 0 ) - { - $values = $this->title; - $values .= ','. $this->title_style; - $tmp[] = $this->format_output('title',$values); - } - - if( strlen( $this->x_legend ) > 0 ) - { - $values = $this->x_legend; - $values .= ','. $this->x_legend_size; - $values .= ','. $this->x_legend_colour; - $tmp[] = $this->format_output('x_legend',$values); - } - - if( strlen( $this->x_label_style ) > 0 ) - $tmp[] = $this->format_output('x_label_style',$this->x_label_style); - - if( $this->x_tick_size > 0 ) - $tmp[] = $this->format_output('x_ticks',$this->x_tick_size); - - if( $this->x_axis_steps > 0 ) - $tmp[] = $this->format_output('x_axis_steps',$this->x_axis_steps); - - if( strlen( $this->x_axis_3d ) > 0 ) - $tmp[] = $this->format_output('x_axis_3d',$this->x_axis_3d); - - if( strlen( $this->y_legend ) > 0 ) - $tmp[] = $this->format_output('y_legend',$this->y_legend); - - if( strlen( $this->y_legend_right ) > 0 ) - $tmp[] = $this->format_output('y2_legend',$this->y_legend_right); - - if( strlen( $this->y_label_style ) > 0 ) - $tmp[] = $this->format_output('y_label_style',$this->y_label_style); - - $values = '5,10,'. $this->y_steps; - $tmp[] = $this->format_output('y_ticks',$values); - - if( count( $this->lines ) == 0 && count($this->data_sets)==0 ) - { - $tmp[] = $this->format_output($this->line_default['type'],$this->line_default['values']); - } - else - { - foreach( $this->lines as $type=>$description ) - $tmp[] = $this->format_output($type,$description); - } - - $num = 1; - foreach( $this->data as $data ) - { - if( $num==1 ) - { - $tmp[] = $this->format_output( 'values', $data); - } - else - { - $tmp[] = $this->format_output('values_'. $num, $data); - } - - $num++; - } - - $num = 1; - foreach( $this->links as $link ) - { - if( $num==1 ) - { - $tmp[] = $this->format_output( 'links', $link); - } - else - { - $tmp[] = $this->format_output('links_'. $num, $link); - } - - $num++; - } - - if( count( $this->y2_lines ) > 0 ) - { - $tmp[] = $this->format_output('y2_lines',implode( ',', $this->y2_lines )); - // - // Should this be an option? I think so... - // - $tmp[] = $this->format_output('show_y2','true'); - } - - if( count( $this->x_labels ) > 0 ) - $tmp[] = $this->format_output('x_labels',implode(',',$this->x_labels)); - else - { - if( strlen($this->x_min) > 0 ) - $tmp[] = $this->format_output('x_min',$this->x_min); - - if( strlen($this->x_max) > 0 ) - $tmp[] = $this->format_output('x_max',$this->x_max); - } - - $tmp[] = $this->format_output('y_min',$this->y_min); - $tmp[] = $this->format_output('y_max',$this->y_max); - - if( strlen($this->y2_min) > 0 ) - $tmp[] = $this->format_output('y2_min',$this->y2_min); - - if( strlen($this->y2_max) > 0 ) - $tmp[] = $this->format_output('y2_max',$this->y2_max); - - if( strlen( $this->bg_colour ) > 0 ) - $tmp[] = $this->format_output('bg_colour',$this->bg_colour); - - if( strlen( $this->bg_image ) > 0 ) - { - $tmp[] = $this->format_output('bg_image',$this->bg_image); - $tmp[] = $this->format_output('bg_image_x',$this->bg_image_x); - $tmp[] = $this->format_output('bg_image_y',$this->bg_image_y); - } - - if( strlen( $this->x_axis_colour ) > 0 ) - { - $tmp[] = $this->format_output('x_axis_colour',$this->x_axis_colour); - $tmp[] = $this->format_output('x_grid_colour',$this->x_grid_colour); - } - - if( strlen( $this->y_axis_colour ) > 0 ) - $tmp[] = $this->format_output('y_axis_colour',$this->y_axis_colour); - - if( strlen( $this->y_grid_colour ) > 0 ) - $tmp[] = $this->format_output('y_grid_colour',$this->y_grid_colour); - - if( strlen( $this->y2_axis_colour ) > 0 ) - $tmp[] = $this->format_output('y2_axis_colour',$this->y2_axis_colour); - - if( strlen( $this->x_offset ) > 0 ) - $tmp[] = $this->format_output('x_offset',$this->x_offset); - - if( strlen( $this->inner_bg_colour ) > 0 ) - { - $values = $this->inner_bg_colour; - if( strlen( $this->inner_bg_colour_2 ) > 0 ) - { - $values .= ','. $this->inner_bg_colour_2; - $values .= ','. $this->inner_bg_angle; - } - $tmp[] = $this->format_output('inner_background',$values); - } - - if( strlen( $this->pie ) > 0 ) - { - $tmp[] = $this->format_output('pie',$this->pie); - $tmp[] = $this->format_output('values',$this->pie_values); - $tmp[] = $this->format_output('pie_labels',$this->pie_labels); - $tmp[] = $this->format_output('colours',$this->pie_colours); - $tmp[] = $this->format_output('links',$this->pie_links); - } - - if( strlen( $this->tool_tip ) > 0 ) - $tmp[] = $this->format_output('tool_tip',$this->tool_tip); - - - - if( strlen( $this->y_format ) > 0 ) - $tmp[] = $this->format_output('y_format',$this->y_format); - - if( strlen( $this->num_decimals ) > 0 ) - $tmp[] = $this->format_output('num_decimals',$this->num_decimals); - - if( strlen( $this->is_fixed_num_decimals_forced ) > 0 ) - $tmp[] = $this->format_output('is_fixed_num_decimals_forced',$this->is_fixed_num_decimals_forced); - - if( strlen( $this->is_decimal_separator_comma ) > 0 ) - $tmp[] = $this->format_output('is_decimal_separator_comma',$this->is_decimal_separator_comma); - - if( strlen( $this->is_thousand_separator_disabled ) > 0 ) - $tmp[] = $this->format_output('is_thousand_separator_disabled',$this->is_thousand_separator_disabled); - - - $count = 1; - foreach( $this->data_sets as $set ) - { - $tmp[] = $set->toString( $this->output_type, $count>1?'_'.$count:'' ); - $count++; - } - - if($this->output_type == 'js') - { - $tmp[] = 'swfobject.embedSWF("' . $this->swf_path . 'open-flash-chart.swf", "' . $this->unique_id . '", "'. $this->width . '", "' . $this->height . '", "9.0.0", false, flashvars, {bgcolor:"#FFFFFF"}, {id:"ofc",name:"ofc"});'; - $tmp[] = '</script>'; - } - - return implode("\r\n",$tmp); - } -} - -class line -{ - var $line_width; - var $colour; - var $_key; - var $key; - var $key_size; - // hold the data - var $data; - // extra tool tip info: - var $tips; - - function line( $line_width, $colour ) - { - $this->var = 'line'; - - $this->line_width = $line_width; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - function add_data_link_tip( $data, $link, $tip ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'flashvars["'. $this->var.$set_num .'"] = "'. $values .'";'; - $tmp[] = 'flashvars["values'. $set_num .'"] = "'. implode( ',', $this->data ) .'";'; - if( count( $this->links ) > 0 ) - $tmp[] = 'flashvars["links'. $set_num .'"] = "'. implode( ',', $this->links ) .'";'; - if( count( $this->tips ) > 0 ) - $tmp[] = 'flashvars["tool_tips_set'. $set_num .'"] = "'. implode( ',', $this->tips ) .'";'; - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } -} - -class line_hollow extends line -{ - var $dot_size; - - function line_hollow( $line_width, $dot_size, $colour ) - { - parent::line( $line_width, $colour ); - $this->var = 'line_hollow'; - $this->dot_size = $dot_size; - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - else - { - $values[] = ''; - $values[] = ''; - } - $values[] = $this->dot_size; - - return $values; - } -} - -class line_dot extends line_hollow -{ - function line_dot( $line_width, $dot_size, $colour ) - { - parent::line_hollow( $line_width, $dot_size,$colour ); - $this->var = 'line_dot'; - } -} - -class bar -{ - var $colour; - var $alpha; - var $data; - var $links; - var $_key; - var $key; - var $key_size; - var $var; - // extra tool tip info: - var $tips; - - function bar( $alpha, $colour ) - { - $this->var = 'bar'; - - $this->alpha = $alpha; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this - // bar chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'flashvars["'. $this->var.$set_num .'"] = "'. $values . '";'; - $tmp[] = 'flashvars["values'. $set_num .'"] = "'. implode( ',', $this->data ) .'";'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'flashvars["links'. $set_num .'"] = "'. implode( ',', $this->links ) .'";'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'flashvars["tool_tips_set'. $set_num .'"] = "'. implode( ',', $this->tips ) .'";'; - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } - -} - -class bar_3d extends bar -{ - function bar_3d( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_3d'; - } -} - -class bar_fade extends bar -{ - function bar_fade( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_fade'; - } -} - -class bar_outline extends bar -{ - var $outline_colour; - - function bar_outline( $alpha, $colour, $outline_colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'filled_bar'; - $this->outline_colour = $outline_colour; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class bar_glass extends bar_outline -{ - function bar_glass( $alpha, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_glass'; - } -} - -// -// this has an outline colour and a 'jiggle' parameter -// called offset -// -class bar_sketch extends bar_outline -{ - var $offset; - - function bar_sketch( $alpha, $offset, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_sketch'; - $this->offset = $offset; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->offset; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class candle -{ - var $out; - - function candle( $high, $open, $close, $low ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $open; - $this->out[] = $close; - $this->out[] = $low; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class hlc -{ - var $out; - - function hlc( $high, $low, $close ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $low; - $this->out[] = $close; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class point -{ - var $out; - - function point( $x, $y, $size_px ) - { - $this->out = array(); - $this->out[] = $x; - $this->out[] = $y; - $this->out[] = $size_px; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -// PIWIK SPECIAL ALIAS HACK - when updating Open Flash Chart, leave this line unchanged -class graph extends Piwik_Visualization_OpenFlashChart {} diff --git a/core/Visualization/Sparkline.php b/core/Visualization/Sparkline.php index b0e60dbcbd..5dba26696a 100644 --- a/core/Visualization/Sparkline.php +++ b/core/Visualization/Sparkline.php @@ -21,15 +21,12 @@ require_once 'sparkline/lib/Sparkline_Line.php'; class Piwik_Visualization_Sparkline implements Piwik_iView { /** - * Sets data. Must have format: array( array('value' => X),array('value' =>Y ), ...) - * + * Array with format: array( x, y, z, ... ) * @param array $data */ - function setData($data) + function setValues($data) { - $this->data = $data; - $this->width = self::getWidth(); - $this->height = self::getHeight(); + $this->values = $data; } static public function getWidth() @@ -39,14 +36,17 @@ class Piwik_Visualization_Sparkline implements Piwik_iView static public function getHeight() { - return 20; + return 25; } function main() { - $data = $this->data; + $width = self::getWidth(); + $height = self::getHeight(); + + $data = $this->values; $sparkline = new Sparkline_Line(); - $sparkline->SetColor('lineColor', 22,44,74); // dark blue + $sparkline->SetColor('lineColor', 22, 44, 74); // dark blue $sparkline->SetColorHtml('red', '#FF7F7F'); $sparkline->SetColorHtml('blue', '#55AAFF'); $sparkline->SetColorHtml('green', '#75BF7C'); @@ -54,37 +54,31 @@ class Piwik_Visualization_Sparkline implements Piwik_iView $data = array_reverse($data); $min = $max = $last = null; $i = 0; - - foreach($this->data as $row) + foreach($this->values as $value) { - $value = $row['value']; $sparkline->SetData($i, $value); if( null == $min || $value <= $min[1]) { $min = array($i, $value); } - if(null == $max || $value >= $max[1]) { $max = array($i, $value); } - $last = array($i, $value); - $i++; + $i++; } - $sparkline->SetYMin(0); - $sparkline->SetPadding(2); // setpadding is additive - $sparkline->SetPadding(0,//13 font height - 3, //4 * (strlen("$last[1]")), - 0, //imagefontheight(FONT_2), - 0); + $sparkline->setYMax($max[1] + 1); // the +1 seems to be mandatory to not lose some pixels when value = max + $sparkline->SetPadding( 3, 0, 2, 0); $font = FONT_2; - $sparkline->SetFeaturePoint($min[0]-1, $min[1], 'red', 5); - $sparkline->SetFeaturePoint($max[0]-1, $max[1], 'green', 5); - $sparkline->SetFeaturePoint($last[0]-1, $last[1], 'blue',5); + // the -0.5 is a hack as the sparkline samping rendering is obviously slightly bugged + // (see also fix marked as //FIX FROM PIWIK in libs/sparkline/lib/Sparkline.php) + $sparkline->SetFeaturePoint($min[0] -0.5, $min[1], 'red', 5); + $sparkline->SetFeaturePoint($max[0] -0.5, $max[1], 'green', 5); + $sparkline->SetFeaturePoint($last[0] -0.5, $last[1], 'blue', 5); $sparkline->SetLineSize(3); // for renderresampled, linesize is on virtual image - $sparkline->RenderResampled($this->width, $this->height, 'lineColor'); + $sparkline->RenderResampled($width, $height); $this->sparkline = $sparkline; } diff --git a/lang/en.php b/lang/en.php index 0db6022f04..26e63e35ad 100644 --- a/lang/en.php +++ b/lang/en.php @@ -40,12 +40,17 @@ $translations = array( 'General_Visitors' => 'Visitors', 'General_ColumnNbUniqVisitors' => 'Unique visitors', 'General_ColumnNbVisits' => 'Visits', + 'General_ColumnNbActions' => 'Actions', + 'General_ColumnMaxActions' => 'Maximum actions in one visit', + 'General_ColumnSumVisitLength' => 'Total time spent by visitors (in seconds)', 'General_ColumnLabel' => 'Label', 'General_ColumnActionsPerVisit' => 'Actions per Visit', 'General_ColumnAvgTimeOnSite' => 'Avg. Time on Site', 'General_ColumnBounceRate' => 'Bounce Rate', 'General_ColumnPageviews' => 'Pageviews', 'General_ColumnUniquePageviews' => 'Unique Pageviews', + 'General_ColumnValuePerVisit' => 'Value per Visit', + 'General_ColumnVisitsWithConversions' => 'Visits with Conversions', 'General_Save' => 'Save', 'General_Website' => 'Website', 'General_NoDataForGraph' => 'No data for this graph', @@ -56,6 +61,44 @@ $translations = array( 'General_YouAreCurrentlyViewingDemoOfPiwik' => "You are currently viewing the demo of %s; %sdownload%s the full version! Check out %s", 'General_PiwikXIsAvailablePleaseUpdateNow' => "Piwik %s is available. %s Please update now!%s (see %s changes%s).", 'General_BackToPiwik' => "Back to Piwik", + 'General_ShortMonth_1' => "Jan", + 'General_ShortMonth_2' => "Feb", + 'General_ShortMonth_3' => "Mar", + 'General_ShortMonth_4' => "Apr", + 'General_ShortMonth_5' => "May", + 'General_ShortMonth_6' => "Jun", + 'General_ShortMonth_7' => "Jul", + 'General_ShortMonth_8' => "Aug", + 'General_ShortMonth_9' => "Sep", + 'General_ShortMonth_10' => "Oct", + 'General_ShortMonth_11' => "Nov", + 'General_ShortMonth_12' => "Dec", + 'General_LongMonth_1' => "January", + 'General_LongMonth_2' => "February", + 'General_LongMonth_3' => "March", + 'General_LongMonth_4' => "April", + 'General_LongMonth_5' => "May", + 'General_LongMonth_6' => "June", + 'General_LongMonth_7' => "July", + 'General_LongMonth_8' => "August", + 'General_LongMonth_9' => "September", + 'General_LongMonth_10' => "October", + 'General_LongMonth_11' => "November", + 'General_LongMonth_12' => "December", + 'General_ShortDay_1' => "Mon", + 'General_ShortDay_2' => "Tue", + 'General_ShortDay_3' => "Wed", + 'General_ShortDay_4' => "Thu", + 'General_ShortDay_5' => "Fri", + 'General_ShortDay_6' => "Sat", + 'General_ShortDay_7' => "Sun", + 'General_LongDay_1' => "Monday", + 'General_LongDay_2' => "Tuesday", + 'General_LongDay_3' => "Wednesday", + 'General_LongDay_4' => "Thursday", + 'General_LongDay_5' => "Friday", + 'General_LongDay_6' => "Saturday", + 'General_LongDay_7' => "Sunday", 'CorePluginsAdmin_Plugins' => 'Plugins', 'CorePluginsAdmin_PluginsManagement' => 'Plugins Management', 'CorePluginsAdmin_MainDescription' => 'Plugins extend and expand the functionality of Piwik. Once a plugin is installed, you may activate it or deactivate it here.', @@ -83,7 +126,7 @@ $translations = array( 'CoreHome_ExcludeLowPopulation_js' => 'Exclude low population', 'CoreHome_PageOf_js' => '%s of %s', 'CoreHome_Loading_js' => 'Loading...', - 'CoreHome_LocalizedDateFormat' => '%A %d %B %Y', + 'CoreHome_DayFormat' => '%longDay% %day% %longMonth% %longYear%', 'CoreHome_PeriodDay' => 'Day', 'CoreHome_PeriodWeek' => 'Week', 'CoreHome_PeriodMonth' => 'Month', @@ -151,11 +194,11 @@ $translations = array( 'Dashboard_AddWidget' => 'Add a widget...', 'Dashboard_DeleteWidgetConfirm' => 'Are you sure you want to delete this widget from the dashboard?', 'Dashboard_SelectWidget' => 'Select the widget to add in the dashboard', - 'Dashboard_AddPreviewedWidget' => 'Add previewed widget to the dashboard', - 'Dashboard_WidgetPreview' => 'Widget preview', + 'Dashboard_AddPreviewedWidget_js' => 'Add previewed widget to the dashboard', + 'Dashboard_WidgetPreview_js' => 'Widget preview', + 'Dashboard_Close_js' => 'Close', 'Dashboard_TitleWidgetInDashboard_js' => 'Widget already in dashboard', 'Dashboard_TitleClickToAdd_js' => 'Click to add to dashboard', - 'Dashboard_LoadingPreview_js' => 'Loading preview, please wait...', 'Dashboard_LoadingWidget_js' => 'Loading widget, please wait...', 'Dashboard_WidgetNotFound_js' => 'Widget not found', 'Referers_Referers' => 'Referers', @@ -164,6 +207,7 @@ $translations = array( 'Referers_DirectEntry' => 'Direct Entry', 'Referers_Websites' => 'Websites', 'Referers_Campaigns' => 'Campaigns', + 'Referers_MetricsFromRefererTypeGraphLegend' => '%1s (from %2s)', 'Referers_Evolution' => 'Evolution over the period', 'Referers_Type' => 'Referer Type', 'Referers_DetailsByRefererType' => 'Details by Referer Type', @@ -171,11 +215,12 @@ $translations = array( 'Referers_TypeSearchEngines' => '%s from search engines', 'Referers_TypeWebsites' => '%s from websites', 'Referers_TypeCampaigns' => '%s from campaigns', - 'Referers_Other' => 'Other', - 'Referers_OtherDistinctSearchEngines' => '%s distinct search engines', - 'Referers_OtherDistinctKeywords' => '%s distinct keywords', - 'Referers_OtherDistinctWebsites' => '%1s distinct websites (using %2s distinct urls)', - 'Referers_OtherDistinctCampaigns' => '%s distinct campaigns', + 'Referers_Distinct' => 'Distinct Referers by Referer Type', + 'Referers_DistinctSearchEngines' => 'distinct search engines', + 'Referers_DistinctKeywords' => 'distinct keywords', + 'Referers_DistinctCampaigns' => 'distinct campaigns', + 'Referers_DistinctWebsites' => 'distinct websites', + 'Referers_UsingNDistinctUrls' => ' (using %2s distinct urls)', 'Referers_SubmenuEvolution' => 'Evolution', 'Referers_SubmenuSearchEngines' => 'Search engines & keywords', 'Referers_SubmenuWebsites' => 'Websites', @@ -185,6 +230,7 @@ $translations = array( 'Referers_WidgetExternalWebsites' => 'List of external Websites', 'Referers_WidgetSearchEngines' => 'Best search engines', 'Referers_WidgetOverview' => 'Overview', + 'UserSettings_VisitorSettings' => 'Visitor Settings', 'UserSettings_BrowserFamilies' => 'Browser families', 'UserSettings_Browsers' => 'Browsers', 'UserSettings_Plugins' => 'Plugins', @@ -480,8 +526,8 @@ $translations = array( 'VisitsSummary_NbActions' => '%s actions (page views)', 'VisitsSummary_TotalTime' => '%s total time spent by the visitors', 'VisitsSummary_MaxNbActions' => '%s max actions in one visit', - 'VisitsSummary_NbBounced' => '%s visitors have bounced (left the site after one page)', - 'VisitsSummary_EvolutionPeriods' => 'Evolution on the last 30 %s', + 'VisitsSummary_NbVisitsBounced' => '%s visits have bounced (left the site after one page)', + 'VisitsSummary_EvolutionOverLastPeriods' => 'Evolution over the last %s', 'VisitsSummary_Report' => 'Report', 'VisitsSummary_GenerateTime' => '%s seconds to generate the page', 'VisitsSummary_GenerateQueries' => '%s queries executed', @@ -491,11 +537,16 @@ $translations = array( 'VisitsSummary_WidgetOverviewGraph' => 'Overview with graph', 'VisitsSummary_SubmenuOverview' => 'Overview', 'VisitFrequency_Evolution' => 'Evolution over the period', + 'VisitFrequency_ColumnReturningVisits' => 'Returning Visits', + 'VisitFrequency_ColumnActionsByReturningVisits' => 'Actions by Returning Visits', + 'VisitFrequency_ColumnMaximumActionsByAReturningVisit' => 'Maximum Actions by a Returning Visit', + 'VisitFrequency_ColumnTotalTimeSpentByReturningVisits' => 'Total time spent by Returning Visits (in seconds)', + 'VisitFrequency_ColumnBounceRateForReturningVisits' => 'Bounce rate for Returning Visits', 'VisitFrequency_ReturnVisits' => '%s returning visits', 'VisitFrequency_ReturnActions' => '%s actions by the returning visits', 'VisitFrequency_ReturnMaxActions' => '%s maximum actions by a returning visit', 'VisitFrequency_ReturnTotalTime' => '%s total time spent by returning visits', - 'VisitFrequency_ReturnBounces' => '%s times that a returning visit has bounced (left the site after one page)', + 'VisitFrequency_ReturnBounceRate' => '%s returning visits have bounced (left the site after one page)', 'VisitFrequency_WidgetOverview' => 'Frequency overview', 'VisitFrequency_WidgetGraphReturning' => 'Graph returning visits', 'VisitFrequency_SubmenuFrequency' => 'Frequency', @@ -634,6 +685,9 @@ $translations = array( 'Installation_ErrorInvalidState' => 'Error: it seems you try to skip a step of the Installation process, or your cookies are disabled, or the Piwik configuration file is already created. %sMake sure your cookies are enabled%s and go back %s to the first page of the installation %s.', 'Provider_WidgetProviders' => 'Providers', 'Provider_SubmenuLocationsProvider' => 'Locations & provider', + 'Goals_ColumnConversions' => 'Conversions', + 'Goals_ColumnConversionRate' => 'Conversion Rate', + 'Goals_ColumnRevenue' => 'Revenue', 'DBStats_DatabaseUsage' => 'Database usage', 'DBStats_MainDescription' => 'Piwik is storing all your web analytics data in the Mysql database. Currently, Piwik tables are using %s.', 'DBStats_Table' => 'Table', diff --git a/libs/javascript/json2.js b/libs/javascript/json2.js new file mode 100644 index 0000000000..d7c3fb5d13 --- /dev/null +++ b/libs/javascript/json2.js @@ -0,0 +1,29 @@ +// see http://www.json.org/js.html +if(!this.JSON){JSON={};} +(function(){function f(n){return n<10?'0'+n:n;} +if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+ +f(this.getUTCMonth()+1)+'-'+ +f(this.getUTCDate())+'T'+ +f(this.getUTCHours())+':'+ +f(this.getUTCMinutes())+':'+ +f(this.getUTCSeconds())+'Z';};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};} +var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';} +function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);} +if(typeof rep==='function'){value=rep.call(holder,key,value);} +switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';} +gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';} +v=partial.length===0?'[]':gap?'[\n'+gap+ +partial.join(',\n'+gap)+'\n'+ +mind+']':'['+partial.join(',')+']';gap=mind;return v;} +if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}} +v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+ +mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}} +if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;} +rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');} +return str('',{'':value});};} +if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}} +return reviver.call(holder,key,value);} +cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+ +('0000'+a.charCodeAt(0).toString(16)).slice(-4);});} +if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;} +throw new SyntaxError('JSON.parse');};}}()); \ No newline at end of file diff --git a/libs/open-flash-chart/open-flash-chart.swf b/libs/open-flash-chart/open-flash-chart.swf index 85b590a28f4a5cea29eefa8c7cad6b551e29de4a..9496b1a5c0d55297ec43d60534d87792b2d2469b 100644 GIT binary patch literal 271000 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u<z^^dJz2j3T0sG9UIvBn*b4|7z_YiWEPzW?WSq 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±2bH$M48f>OMn6*< zF?K2?gXboByt+B;U9J|>>YA$57lJZI>(&MJ*cBHG8wOQ&z|uFt0qML~p+-<5tsJz} z66IR;+>W=QGQP}dnmxF!#-t#taisb9_Rsy_oHWAgW=!&=iWl1xdQWvT*QOHg*B-Ez zAv9FAjdPfm;&_WG;Pk)0jrr9d4ty;7yHtClc?mzK8O^o+x=v!+{=_=rk9`v5U=HE- zfcG+9<yg`xokap6cDQ>R|9Ar7&#ZIDNemkB!uq^yijZJxd&kU=P%Cm>brO}H-E*d9 ziKqwBK~|V`Whe2|wB{%%m}z;lu9tv@7^M%@)hIF?A~>)J>v9}5gz?I-EZP*2IoO!f zXztNc*wSq(zDr|cSs|@%rDa%H0e`eB>CJD^@vU8>Z!^K#BeN7Zl47d2vfjO8TlaA$ z6D%20pnbvEn2{uUb8Ryc(aDwQ(ko+&Kkmw=sOlH=WIg8uYq#riT#NBCaL8h^ABKYa zggM6Bd`Z(`H#6GyOvXt@%*qdzBs3<21~pMb=#Xc<k#JQwnq$ysL7i-MpNC2M9G$F( z&1{+UCv}Fe28!?(n04Es{}}S;=6R2THav-2GW{E<=h)x5b=x$_xbV4Svh-3D9&V-Q zERxGqC3J7MGu>8vg?l-UbO~)1^^l~Ma`YE|aA+-CmAI$~2d1;A4_Gc4<gA#;A#~15 z3P3q>bP}R5<CLq?7Z!mgLZx*k)TAaY@o81;<Is^`0I<_Ctqn+rJfwROyZBpqtbfAm za?1P1RLFm`jk6y!d`^n%=4o3(Il6*Wp`>9irlo#kWgybAW8FVKBg8`3wJMFSf#ILr zYZCFRNM*@2F#myZUrN`kXbJrN(BYKtQ>FE{!1;bzJ{WZ#iqZb)&69fE?o)X#OC-o4 zv#h<fvxU<2AqBsasl2s{(EN;XPk^dZ+}w6J(aO38b8+8=p~LaPMVWSa4x)lDv9%H{ zH0)hU-JVeCtE63>*xph;J7j|Lx*Mw%tPE}55*P~aBJb_r0<-v&2sSn}+!@7{GZv1c z*pR-oME#$DW1Ye$Po({5#UvhoI>~32W8F))Q(Xa{ZPnk1gPDo3*B!KgAqb6smQKul zF~$&RzE4skz~v|N>MwVqb<=4cE(8B*iFtc?Z!qj3KD}^xtow!Re^ijZ?O=5ii8`YW zZ=b~)RN0(wm}Hmo2Thn#S>~fAm|^<V%4tU4c-IT~yBa=It+u)-03vBg0FbM`NSbC3 zN+1hB%O|DX&h@-pk#TPr50D%kj^%m=NW5CtQ9$F1-N+Mta>y9h(08-@Z5KO^n*aTg zGetHfL<)<@MNh>E`BUb?9e3FaScbu;ETRsFY2v|tlI-o1!vLd6I$`D8z~u)Zvhr=B zCo%ilNudXbhb3xV+=ra<F~X39eua0x#MM`={|kGWW_Ej~lS2t|R#Ziimg<2*tLZf2 z5~VeY!hwi7jkOi!oWTO0>V4c5^Qm8q{=T7~MaTl6G@-B%<$v|rKMT{)gnoQpKX~W8 z#J}w6HCxSOars#(Z8Y+ZtneediG{5saSQxDl51DQwdbp`A>c%ILyTt141}o)Q^$|6 z{FYWrRJJ4nQI+nK0c8H!WXKRrP>wO`txuf4OsqnbQh}^Xpy;z~YT>`l<<V-}uTzq6 z9Ei?bVCYMXB%CVgtJV@AuKLh1Y}|h5-hKPjL@>?CGI&H7k_qtSmR*0Qhm=PV>tZ-$ zJ~Zvc!@)ttU7n>Cbk4ZRt3CFAit8D<u@4=oCnN!6OSc(Ql3cJ!Y!+SD(lq%I9Ex1& z_C+TH-biRsfL)g8UGjd=eM#b{@SZmnZ~bdO7%%(F|Jwi2=T%c^GHTG7o3Tw!&r{DZ zHKTWslw!I)KAyK*$-IWK7{$p5&D_wI@==fK!YV(Z_Ag)(?Br7)i6SqtOi3ixrfkJ& z@fYA=LERN~O-o6R^Q=9c?J*PBT?NsLQY!R_vdBs_P&5~SJCL_9m43P++~-^~GFwVE z@(bWRD^E)uXfM0#$levqX)p3oHP6%c2^3Z+6bJxP^ivBVO1nibdTJEUcfXRE(GolW zXr@nK)^}rLI<DzzgnLOBN?DHr$@ixHoW)F{t-mheqNpI;kR4hMq-%_x-|6}UJHsav z8Qhelq}vR3lUyG*L!nW2YmZheoow{YuaHpjr6yciu8Iu9W7etb#qSo1{lxWE$xIp( z_ccjx;3+~TH5Qf@LF~-33hLL@ZClKORIpoSRUc{UDza7VGSmnQll&`CsSX>$ae^N{ zill0%6X_>t>>ll@u=Y5jo^I+^dJws8S)StSD$vbTQ<js-i1xoQXvwai>CkoE;zR*@ z<wTNFlf3Tb$r3L*?4Di)Mi*085c1e|4%9T=l?tRh_k_~r`uRFkKXn>AfTK?qFtrKl zC+uQ<GMmL%wHoruGO=YewTKDXZNj6MzaQIMm_^aw8uk%6Ku00l+*&A&OVPF6AW-;? z?M%3QsxTtFk>9zYEtOkqvYOt~y{_FaGz{`fX#Orj1!fa&Dl1FNV}Ql&a-7dNT1Z)% z<HOcVK^vD=siujqO@V2q)=O$~27uflgrO&e?a73XO+L~@ZR*^_S}UDf(R;PhGEvU0 z`ZcUb@TyeOz4NQ-+MD0fs`SJfWK#ixh-GZKpSC^dUUWl*EGI)v=@p4Xh3BqRnZ%BS zYgD5QIXSMt-CvnfQ_a%?!7VFH2UKuaH<tbvz-KmENWQ@Sck+V7Gl99(??wF(feoCb z<3E<-y^8yG%vox8aOq@gZSPDb6hK=kz^}e%*`D@tS3NI+2<w5Q%vnac&QH#ar~;Pf z62Nb9Y=J%BDejzviJiJXN-fXqIB3sHqa@MUsVkT1oj53}kFQ_a;Lg8?dcJU_)W6+6 z)j8Lt+a)7>wC*{nV2&r1F0}DqJu~t4_J8o5Z}oc0#)y8Gdxgn|I{L?)3FXv_Ys`B~ z2qvkT%rfA2N7M<^X`rsSz@dz<gp3;_Q)zh=A%>3n9A^f}vJ_G|F0OVrO}=0g0woY; z$o=vUGJK-z#Jk`4=c*~GrNPb#;Xk>zi8z{@8~IYkuybWOXT-=FeOs#SsjWBNN5djx zF*Z3B<bN)ddAkmez$j(YaN1uXpnF0~p)>LJUm$~w5{bj-&qBugNLr03J8IYPS0_w< zRFoU;Oon!j{%4K%-NLA>T5L8D_|TBES{-uN`6qlkwWf5kxt+3>XOXtIO*SXt76IxN z*fllSR`Lvk=)gK)V;!evi;UO9Z=K|ecH3pzMlIKivU)0MYR+Gsa^inSN<c757<yDZ zHXE#st>M5`lU6yql+PFx!WTtJvkMq_78+~?zS4<}0u8m<Ep*#ATRHc9nPWTj%zf~% z4Z$NvU_xbXA~|y8yX!_AsqqrwD`u_kD5k|{F)fvl;A!(nw8U8-@3i&`XStY~omEyy z4-+efVGt#$24OMRRWB0>bO$3wB?t$b;T^UY4H4C+R+DQQD-^sm((wM<HV9(gf}s>l zzj9ic72Jk#78;q)n)S@RJ-6^+QLeRQ%JIVj<%(7_tYIF167@K`MGA|7RxP`Yr9jQ9 z{)ZoFfG2cG39M$CqS6?G65-vYgIZyfmTJoZgoYZ#ll=)rL4HxFwx8@xgS+<3+-XE@ zuHU+@XY!e1ngB1-NzCL6S}CNiz0*-!n}h4HENW&68<UV$65`~a!TCOR#&}P4cwODJ z8X7(dSOsxu^0M8bCN@aE;*4uhOObDvq`WwF?My-`<Oa&69>V}H%VgWVTED#pzjN&m zJ(>ycMGp07{>5V4`%oGjr+y3h=hpV^GrlWV@&yDkskYW7Hb?b>#i82ekkAk*>F1!< z_L7Z$RyAzy?W)=W!ks5sdCH}Eplm%_#orQ>zHK@p{sD|;@_FWgBJxv+5$23-d}%8E z)<iK>GgpL%iNGlpW$x^gzHGU6S#NYAg;8fKY+1wSneGyT`M-6^byhWmzbvamv3taA zqStQZJ)G;W0XF~UX@kxYZR;U)T*x0IZm*D9B&uVEiarT_a4L_Ej&ZU&`JN@TDWvM; zGNKFdV1i+{gj$pyg5w^O)ER(4In=osy1SUg6qb?GF@^R6GXi7Mdil!L+Ou7v6tUdw z5-EImy>f%g#U|H<NlCm;b_JNtmWGM}TA)(M-Ov7$Y49hz2di4DIba&ynXbDKIjGiK zx{n!k=eNhB_8Oq6xbQ#ORjF<VynDUsERTW|<CNr-Ak%|cM%n4v=Ir=q-)9Qrvw#{6 zQ&S_~tIb@2|JrVRmt33e*J?FRDmRIm*t?czuhsQe@xITC*J~5K(_}4hGgFK&@zdQM zf!ZQ#ld`yFZLpdBl=Rx{-u0%i<=|&}CZO-}FLt&WIq_n1oi8w$I|qK6X!J>zC$Q>s zvrvWiB(@d!c`c=Sl`bzZ)L3-o%M~#3z)Mo<x;OQd3_6l3*71@RWrbtY+W><&|k zx8#nxN-0<dDMKV7+8DsP?KLN*6erb0nuto0Mh?iCm-rT8Zzr2n&Q9N%h?bRN>CFuz zOcQQ2$#uqtXfkj#7ud%69xK+`!E-08WCyc9J%vR+ZE>y=P!-6HFu>R9aXK#iu-`0F zQxIy@s!pq=2MSbC;%){FmwV2R;XUHV68EMc`>mwzQ1Q)^<=lHX3g=eyHwTvhn~Wf} z81Lx$cYUxwRpqQCroIn5HqZU4O2e{~pO^?Q#!EAq4p3F6dPMf^@kLPDr(0*V2K_OX zZ~UuHkjA1b_mUp5*`m4a{E?WPpO>{-r4?<p57W}xTd!Ta`5M3O@~GKXz@1yOLVv0L zgAA<{ZCG{8jlH~~JkjoXfPvT@zV<>FGTz9}j0V%{WZXaeLa7B_mt-B*y5n*sl{xk( zThgc0TBs%UrT#|GDRpKW#dad&da>Ki!lxN2wrQe?*e3U$`AAv#{&sx)L&Er6SWhC| zsW2C#pPa>yYGcGFTJA)2RY8|y?q4wJZmK+sdkxK+l~TVTM8t~#6;GsK9H&4#wPiLj z`s+q<jkIL8_KcookH&93yCkt4AXEPFG1eHsb7tzc6lA(yBB$Tw`BTqS+SEXdEGqem zF%CP81ix2wih=$VtEkmm+O&Mz{pu*KHaW&2x@?t|%+zBaNGgTd`s5h6!Ck1e^!t4V zLtkJiL{SChyoRFoyfea#vfQc^)N?gZR^U=SvRX?qPujGVpeq_}=cR`7#HbmX|4o^h z^DQqHb5x`6n}6pz4dV+-(_{t&oJ{9DZqK&bfG5rkA+W38FY&L?)5^E*8a2qc^QGF@ zZ1lr>t8F(ye&~-%bMC)E5{;?M5IVsKSWzjm@J%#nY@oK%MKF^dP%gAsHsxRvBI|Jn zbn2R^7me!$S+c0m)@)!b{Jp1&FutbBQPO|6gtFf7H{z+(unHpi0(ef|7MJanVZCR+ zC;p9buR@tr_;jm$n-fVtxJk)h*mpv`hs|HhtIoaeY3A~1hT^|<qipr%`|iJ((lGBU zbOOy*U~qBDxy2?kW=FMIvY8YpZ<Dax;wY|O6m&e$Ho4McnY|jRnmEtBV7tK7XoAOD z$G_;R@LkEKr!3%9*?xA~sU341anLfB;Cn8wulo_3LrwB9x<8)pmu95T-GJIn-tfh^ zfJt84#W)z<Tpl=t^f(dsc3%R|Ay!+|Zm;n)GEo+ltOU?$ZyWySPqPHLciveMY?R6d ztwzpZ5Kv0Z3rxOq{>M2}m@WamPZm7lCCjZJB+^>l@2>y8wMD}Hx<P=hZoO18a@=O7 z<MZ>v0H5d4hqV^Y)2MCPxX=qjw#~W~Awz@x^ZpPlfTJm(sjF)-%589|*-MZ6MitG- z&hsfHW2D!z?6cxt2f;9}qnWv;dR4Hr0aHk{@mIBNyJt3~jLe5Z^1zjQj)wpfi3Si; zf&-9dgVM{uR>R>R5}f1;eaUyx3O}vIR8Gqfz4rJGUuKSJX*ksE-pFRcdP;Gp`2NHs zPCtrMTCMMxH=Vg!rOQKzCl?c&HSz?eCL{}Hmo!|}Ieq9#N{_8d308}}d_puCk4Y(t zxeUqY@st?YWd$sbj*soHZZ*CItfr5Z^eNkwY*wikO3b0<_!@x|8sQ-3A>kQjD-RDS z*<l|9$1=~Bn@goGlZ(KEa)E(l#|tF13B#y~y8V<hUVOB>f8!U&9%@Ujh|3UNgTOh( zctmeUB5NwL-BzQ?4$F=!^hOnt2g%&=e2m7}JVjqYvOynIBI{hdF1EZ=mrUP21FB{) z>>uedk08~buCQ<a`0#_c5j`{hcHluz&MJEc=B=&Y<Vg%IUZu~G-~Lq+%j2xc#cRl3 zoakY82427-!M{0AeTyQ&^Mz(+WT_)0HL&wx;I}E+ERZ%9(om&bA@4F$t|ON(5SA^N zl`XC*tuveAPxI8^$SH5Y>i;)HNlMbvORj;@=y7YmEZZg{{4~xwDLs79?x{{%7#HC< zU!a_8ozJCya3+UpNTJUIpu5XGEt*Kga6+b(VXAU>z{!Okgffg|O2W{m;;~De7hItD zg;PtqJo-ANbd*@&A&a+w)@FO5+@Qs;pa1KuQdjD&UVdBodqX<wY^ZMNM_l4S)GKLG zeQ*`HxbI6_G2@~*PkC?THO((+Lfv+SP)<>>?D`)7u0T=0Q6Q5MvCq_@e<HR+9s2jU zG^OMHR<+dmt6z3M>k(eOpT>^O3iQaoYV>}*UTCyBrK9E0_{u6BQJ2|qB-<}4G+L$f zf=-zo3N?Ci?xtzhZ@;)RgHc%>_N*g0v!G#S$IL>Oz#6d>)`6!K^0ZFa@fD$)%C8v{ z3YlL|&OuYM+RVcqGpsMQDz>3<pAFLs4dkZ-$PD^cvMc7fE`GTkWe>8~nS;5R>5#9E zFhx4(djL8CaMSlPG><pH8pu*v4$EhStjJkECEagr5RK%{ogipfZ#GN{kQ)c~KKoGE zi<uO+CRp~W3q@&?(M6UfDw~W6)D^M@UWz@`c%3dXinZrd(dMi`*v~<X<P=gblC6!1 ze6^kK=wR<6`0J_s^$z@X5c&M|Lix&tvYt?=y<SwOj$!Mt;)+yjyQ+5S(nY*z{dBSk zyL#l=XW(VHBXBjq>sepo#96PaJ@y-S>t&3Abs|5ri`Ux!H@4pt*3a!C=lqm>H7_OI zE7ya@A@2<<l(BuB73i71Up{EF8pz+Czu^?JHJdh!v{<ltsB9R3u<ArjKc(SU<DE_( z@8@0XMpy;NDS&a4kxnft86ZqaP`O<4u*rH4O}5(0m;|$&0is@A2d23^GQXX{C<PH@ z?FZBnM@>!1rx$-2S_(bQ=>)Gy??emaJE{Wf@r>Jc<pqs=Mp_^*8KtDW$#lyPr|dhi zilLrldu??PGabf)j3kGDc#yJ`xPtzA=~BD{-E<OBFI}dJX@p)>5SeEkSw@7=WWW|; zIHu%bKv~bM=+rVN*FIm)%y}nph>AQB?XlRQKF}d@nK@~}Gg*YB1&>-~q++j(l@>f* zmKyR4-Ni}SXW4<YY;Pbj`?Q#7`Vcx84W7_w0k0h`aL${F=Clvj5mFF1<&}|wJ{hMV zGguY$Og9iEEpSY1l`7z~3KcjPN7TSUIs!5Rr|mLI&?lpWgk@MQ6UepgjVO*7!m#36 z3_Hctz<mJ1QUjL;GGfptW0B8oM=3tBCo$;@FOF91w<22i2nFxt7i#oQ_^-iF5NL;z z;-_=D%rt)*^-e#!lpoW4QC2#ZheCg9hCefSo0E}V>pr>TiT4MNfuv9e>doF3iH#Gm z`$$Y~+M-d@7EP1diP*$C^bb}}9s1|8Uf0CYLhh7?vb623l{~Rd<Xb84rWB;*XXX{g z1!l^S2jR9&g#}UmTphD=I|q4>Kk-b%28~>#Imjce9XepM3A<U#LDH_m+-A9*Gx8gt zVuZCHNq6TZhrE%>OO`L9TzSdC$5|{h%<=^uL50~dZS!8wYXQ}~Fw3AVDOS0{)}(^x zyvy_6H8Kn6T?b1u3j>G7X7D)KnT@T4^%9GvJ33k?<N1-XvHte<cNK3~GiyAi;>-dp zJ}EhVIlua`m|<6)(Iq2|+P9<JWmdPJWmWfE=ji#h{4MPZWGhy@Gu&y**o;c$q~(u) z=zow}byxLZDozu7qZI3yInVlo0C{x2LAO&>H)dX-?5>2?_56?5s{2%}r|Rl&_~YZ9 z-0#=?anJjowR7>`cSsf+=vJB7XgO1h3JY^{XfN!65kp(q21WS=x%qm7W=$LX-QLkQ zZ23xy3bY^d(+4Pi`Di>NJ>J<kD`?+k<{&p(!-S*+(V%6E7T5)bwN7l%rWLxibxPnW zpetGHG+m@whv26DtyZh1&XmAM5e0OPgcT?)JKd3kK&lZJeT<%C9iO>gZQiV5Zd#Ev zc;pt>R%Rd3+Ye(r^3#hzf{CFYr1(={NK;k#+vOIa@iDFtlRjFI{X!n5`*S<^vs1cc zW*24q1Lyd)*k8@ykqXc2BJKP*dD0+1Y>6xWu*LqGB(5+w&;BAL&icf{{&*vfUNG68 zl*Cz|l-QqmP?W&uFm{~4*B>%c;G2=S;tx@5^VDgXmhz)iNm}2hM3kBl@*VPTX87a% zLVh9HwXWU)JEIIo*Sc~cFA%ZMO52wv1fr~~r8w(T+E{r=7i-31MAF_fmOZS?@R)+M zTJlqgnto80B~{aJJ)kpR&dl)B3t+$L54`R%tjAh<ELta4qaCZTZEnZAG`V1|z@{^$ zV=jiH$KL(L$?x7AR-bJ1vLP=&;&pi{Vh}EfuV@WdIu4<cM?0K&znY)%j_Bf-R-GAZ zn|HA;S$u2jh|NcVik!$3DT-))cu=e4g-NYiwZa~+;kP<K%fI{m)g1xa%<gJG7Gl-I z>eldAukN>h)x+x5@CQTv)yqjD<Pru+gx5hD&p!KXAbxnAx+VN7=<qsE)$qqX9!vwf z`n2#mPnY0@KMp;0?Vt45E#*hX;_B3TJSbnUM7U02U8<GMZs>Io^6RE=YXXU~$9df2 zZrP!1j$Wr0b)sUS>RM8(Hi?Fxu%G_8hBUSvxjAuiUeVFT@?ssaR^N|x73I-q4zLkB z=Qsnxb(2MGy*l;kq}Qn+`w#87g6*ouzMauER>U@H6zIi7#RkLC^MjF+tRrW;SIZBU ztP!MT<>uy@>ACiRGV5ny{-Ie?Z<f$5v6Yz`^vmx99P$tK#KpxqWEA?!sZ&Z;uB4ou zf)A*iWKCNdd9`Y;xVT^fbi|(JBorr)s0{htO+iHa*e<a(W4p$_;g2O<u@#){OFd8b zyNX|!$A^`8m>%yf{W3j1vg~8_cyIesH>!R!@W?#g47@UrcNM=ukH4?|J+Aoup3sNn z@kX+|5A&3`i*pv=vzhiCTYd_C-ru~4cF0*!6Xd6w;9JjT1H6tY;T`GeZCUA#sV*5( zQa&{$EESn4E1sI_q=1srDJkKy{>zG|q`G8?CGRZ0$ulg0@KTp|hIP5;N~SXpiC%Tq z2e#JB5OzC{MF&nr?2AKT-}&+U6rP{TJEri|6y7nFr>63h6rPf5NcFE;PCNd>3vT=U zf_zrs>X?h{(e*Nx6ItKI8MB(f{_{@Qqi3dswJsr{QqvR$d|@Ta71p4Hw?Ucr|Np&7 zqNUQeBhL1rUkCUNX<5d5YWj=q&3L0d*`@LBnjw8Yyk^Nx@2=?&8lwpGhuWeP82rS5 zbQizOh!4ZcRs7UH-V4bRUk$`NYx?bP0^(gnT9Txt_{BeI33=LY#jy;<h+uT<vj9q= z<cA3Hk)f(=Ud0j$Z6?&(pEgid0^bkF0tG)wutKcYH1Up_e)&9r@)z<M0>vo)=zx61 zA7zvs<$;$Les{>X0`b;+bbA-!34C=)H%M86w(4=2IT3QgC7UW>Kjh@vhqmkqk9_x# zlxzI~0>j#TnR1;$2@6a*U6jU$JM>&eqYb<cOD!YcKpUp#W()LxI*eB_shV<Drs);4 zFTJoMQm2Kaz=);KU}KF~vJtRM$PY=eXg~-)X;mSROf7h=6~hs0*)g&1z!?u6+Zyt( zjx<w|IcMPgYP`Q<@m~dt51#89_UGxC%vDV0hBcQPR@OodH0uk%#8wHd6DO-tEJ}+q zqFhlGqkK`(QB|TIjCwfg(WshHwW8`oJrNZj^}H`ZSE63?b!WQb8^C;nSkzGF`-u6% zeUad-B=%N9y9iYU93|o#LVn+6a;`AnRp$GN$m`742u?3f%6Qa3?i<V<L%44Q7*S)m zZyW{8;l7W_UBi9rxNkj=+Q5CAxNi&bwsYTOa6ae0FSu_%_Z{TE!`yd-qMzWtQ`~o& zr0#HEl&`X{uL^n$p{a!C5L!iO4WYG!)~it)RNofWw@vl!P@{ILzFn$sFNGXbeTP-w zm#Xh8)%P_qPN}{#s_z@scV6{<tNJby?+4ZQqw2e=`hHS<*Hz!Is_%EzcT@G<QGMMt zUr)`~TZ2?z&DWpYftqiS<{PE?#%aEZns1WkTdn!lYQ7B=xLNaU)qLBCyrB86YQAfl z@4Dvu6^y7qG~Z3lcbmex=|DXR^(Hic&>-D6ME4EXeIv>D5uq`<ZydQ32u;*|lgXV* zXgZ-8gcj?*W#lf`eXGe`r~B6HzKuj~A+!xB@Gt6s;W%aJN@W(E5ZzBi_ZQIvMD#!r zJxD}HI0g&H5TPrMk3`gH5p@-0<yz6yW1<HDRrW<wH>vzu^j20mI-2?iLa2vC`zyPm zsgFcov6xp`H1(6{>y{UNCAt@{JP>UfJs7C+7#>YsB%1n1^cpUO*7M36c=RS7y@f|V zR=H;Me#x$Uf=8d?m4~uu>Jia*EZNGwh-m5+AgNzOQ@^NOC3=n;y~^TJ&xl@Y(d#W| z2g&SIqjy=}y_R#(at@RH*B1Sa8huf<sw?^`@qf4YH!bIm<#g9<k)9x;du!3uHKGRw zxD&Og0d7f6BK~Ti%1=a7w}`$jWukwTPUSze=$pi)UJ*^bBAR+dH1&#T>J`z{8KOVZ zt-=yb9U^*y#h6Gmb&6=}6w%Zvq8IDY`;m0?GQ9_54wmVOWXD*Auh?<+H9NshvQz9d zJHyVh^7!Adb1W>1c`mSvpekJ|5y(7_{fvEwSm#*f@4+zOJ!X;kX=YUf7(cMf?13LC zv}%B2Mp(5gj8(jfaR0TEIxBjrv!B=_KbOf~SULRbOq^p(gw<fbF!2+#J^E{ja8C`y zDa9jQjsuMSCiDH+?<7`}-C%$Dql}pGCzU7eCW+i)?6!<i>rTle>VRAOZrQlqI07E; z&QCK3$a4Wt5ALbQdUDcKw-+y=sUBoX@npfDWWBj|0}-C+Q!>Jn$aX27Ou8Ruefcx} zk(w#Vb4+>$@TZy6c%BX9e;WiZdoC=24d$}mUK~<Va{}tE6i;SlC>5&yFn*^@dBcbE z5!`Boh9h~&W-<;kHi|d;h!RaSnxGpr9!<2{_&e0SGzPSBh_SJ}#W;{okZzkk$HsFP zyU%l&QAccjgmHBOpU9IYQS{bETQ-@unL^R0QpR4HMzuYivl+5}XTmp&d)l+tF0<KX z%L4v6Ryt%3H^SdwA9Ld}6udr{mkbSi0};w_rM6@y=5Z?hKj)XM%4Ae!DV~gw@+O2A zaK}QvsAPmRmiiN0TsA@)6J-LHpl!o4*ix$%)0dUZZAbQr70_XMi2%n6&Q{7Q>a+@V z6uz3XHI`u3T3#}N@O7N!tmhj_W%60s<mHEL<k=XM*%5hc6VG0c4CZbwBNM)bv#nN= z?`$ib<aVCVc33U2vvdPc*yS>8%1y+(Y?l?OXg4n{5dJP=mBW`2KjrK*D`wX{Wn&`r za(Mx=O+G}}2cMS{68@o4UeI1tN5mJL?X%MB#`c%d8+L&AVu*XNJgxT#JH(B1Ec`I# zv^P7#%ZnOu&(Nb3IqXZ$`as}Vd8ytb>?@h-anjqDea*{@8gZN(_Xs|Lst7;H`!ROP zs*Ka6D?$cdF2k2u8o<~YD_VbcwseyXrf7rMH|4fj_&Lh(5O%)&YPx6Ww^Um50(T?L zi+n5}!7kCnbAht}ZGO+$4;)k1IX04Aroith(58PRdK9}tGgo-{1fcQkD!&HdpGpl5 z<7bXJV+y-YIz#ARI99ueX^j19jjO5bw=x5Zg4gr%LgbK*_?@#Gd^-CB(Pywf%LuXQ zEMgYB$(c-GCc9NOfmxJ5c_CH;bFfZY*_+Mol#M-?-L;i}%(|&%riJ;KIJ&D8JdgEI z%LcCJW%*XR3mNOFO2rFUuQH06H)0uMy)A*ItWOz%h~<p+wSqrk{mKUSR|lw8zE`k; zWrJ5SHpq&-k_|2!yoRwMR`6;zwA|qJyu1*rXv5UucG_#%h_ZFIp0SaZ@^x%fsk({S z$k<0#;089jY|5M27+duwHnzNAWURapnK93ojEz&nsS9so<JAdja0x@eHC~cu6=esT zXs5TGO)8`H6OUkAFja6}s6uduV5Z<sp}7V32p%R_xL^^2c?GK=SftP^2^J+-WntVW zM2v9UFW3WuRTa!H9MyywD~yMP^AW+S3s()n9uw>@!W}0(wME$Dg4Y$io(O+Zh^K^j zT8L+a`&kk3R}uc4aQ#hqUl6Vr1xpZ-^+jX@5!p~gCJNR_L^c+piHK|}w3kHW-$i6I zA)1TG79z5xU@wcve~8FdBC@rJOcJb(U~NU@D<bk$5!p^uY%d~T7wioYnJmPcA~Hop zri#ck5t%MnhKTGSB0Gx6P9ic>M7|{=-xgYyVA&!vM|g5YWS)q8M?~g}$N~{rC?bnQ z<hz1(7Oab4T}9-3BJzEqeIOz~6p{ZD?B4>*ieNpMi0TRG1-dsNRYdiHw=bX{pg&jx zn9v5oMcxN9;TyuleZ$}#4tfOKk#I-B9Ss-*7z-E&7!Q~Lm<X5zm<*T#m<pH%m=2i1 z#Qie?vp~-V%mI81m<!%Kxbp!E01M$?1a~oD31BJw%K)DMmczdSunMpmum-Reunw>u zumP|U@SZ^D6;(Hb+`>e)ZGi279e|zS?PenOQ@G$g{2AOmfX@MY0bc<2fxjQ_0k{VN zhd>{Odj#&6OgwT7@D&r)kHduybXQUR1l*JGp8}i)oMA$oWunG8z<B`T)PQUa=&gaO zt?@0wFTf?ai->y(@EzcLzz<B+MAg@%s{Rph1#lH`4e%2ab$$jAAA22!2Cavk4*M1G z8|dEwH$eXZ_fNo0z%9US@K7K1?!dhZm&)9Yi+bGwJpjm4y`Ee=*&9Gj-3M-8KtC?D z{#-mgh>K^30)_#GV?>VR;;-oc=)j}k`v@?ai|592@%(tu695wdli;5Wm;!n#U>fM@ zaAyE!f}RC;HWvw~$%MI}=YgINpjur3cOhUAU@>3`!eQ02WdInlY&m!<0I1o7m2d}B z$AC*Mu^KK~0_(RRJ62oEMdC&-jLlp$fsyIn#>L-vaG~ymo?U?5@P7*TGcG)P0DB>` zkBj>bfIh^<KQKoAaTM;CkU0kTE4atGX!SK0txs~%_6*=Gc;CQ12lqVOZ{c2mdl7I6 z@E!c$!~Fqp8T5~UE1<8!y$1LR@H5~#0P8xIbkX)VxW5B#0R8~{3AhQk1-K2k1Go$5 zrV7>_fY!odhye??C){3u-he);cY{%{At9S9htiuQxy4gqf{U>IOH{38G(5jF~b zO7|mG7^7A3##q330D8t76X2pw-k1p4NuVbKrU0nEr-3&eFhdo|GXc~tv*6BF&1y8} zRq-Y|4*C(BtBRC)kem-#0QN$-ivWuO=xb~V+@+9N2DebW`3aomfE8e^R7DyRN<+h^ zu2w}V5=p}>lQvrw8K66^Q$<Hgc)cnzHv%@P!rZKy8&!0MtyoC5t0Mb8k+WMBIT)=u zn7ne(=W-A|=TpFE08C;zdm#3?D)PPn>;vpa)B~uGL#oJ!`urnsA!8g>MFHy2IHrn1 za*wN`2=2Ql0O-fYNmX<v{%KWoA@{5*x}rV05`9h;?~#ji-Y55hDn3Nren8p3gyMdu ziVukYy(<1i?qyZ{o7^j^=*Eb+ri$*8_*oS_B=L(XdP?FqRrI2nychX;u^X!J{sH!% zP<spRZB_K4;64=GhusCMn<k7Nn&?ODe#Gv_sDQmRF@RV`A59FDs{3hTFhltUN#6hs zD+XW)U?^Z1U^rleCfp<8egqf|7z6)UxZ~kYfIAs51uzvb4KN)r127XX3osin2k<dq zE?^#DK41Z0Az%?;F<=Q`DPS4k6Tou73cyOFvkI^V^g2y=)@x!6+o*}r*yD)Sn=}!= z1tHr3I{-TYyEHL@(d@q)o=*Xv0rn8{b3%IweF4@!DF@;J5eGpW0vsmK5fDd-_!7i1 zBEAA~oQSWH;t6<8lIIkN)0!C1&Ja3FEUe8F*f&I-L*RK$h;QLu1Y81q2lyWF1K={? zM}%L2`xD%sHIe-b=-)Ikjr~sOh9;)7Kf%7GiCOFpA@s%UyAbNGi#a4ThlH|w=wdGU z=1N~LUCd{Fbiw-SVjjb2n9uqVMPs4AE*6sHLXz|j)P*q^f<pnrbdfzm7t1Jgnbb2% z7t6`FT>3`qVg*f2D`-wy!FChEXv-d}i&Z4GN=l8_#TxRhkv??e>`A&<M@g?IBV#>T z66<8VDZ1E5k{hMuG+k__60(`P*ve)R!f@V7?YNcACNE|$c8Gj)klBxkGnWulv3W$y z2YUe#n8voUh43vRA2sk26m2OOpXg!-Rm^sZwUfaz*vVGtKr0DtCoclLt8}rOt<i;d zEufO{ZqUW&Y!m3sy7+?DYwuPl+pdfKYzK&)fL-L-4dPQ>9AKY;*aP^SJbOWW0oVuF z4>$lg2si{d3^)Qf3iuLm4Dc1;xGw(sHQ)s3lYmpYc>Xlt4Cu3P&*|bIJ5T6aLKnck z2)G3J4)8tT2f$^(kAN$HtAJ~Op8!7tt^<An{0jID@H^lJ;19r`fSZ6@fZKpOfV+Th z209*~2cRdQ7oazw51=ogAD};A0AL_s5MVH12w*5+7+^SHgdq;Gksw9^J|fR(5MziK z3t}7*;|Wb5G!d*xL`()Tg@~yjrV%k6#0<bp^2`D;8!(4F9}}7j-#oy4@+<(ckcdSf z789|A&{9LVmJ#s@*vkPc$g>i}D!^*M8o*k>I>36s2EazZCPN%%n?Y<LVk@C-@NFkz z2cezt?IL0~p-<uajEFrTJ}2S}5c`POZ-^u8Abf`ahlz6p#8JSPfMbBK0LKAe15N-= z8saE69_$S0vw&{^=K$vc-vTZGE&?tAz5{#@_yKSk@FU;~;40u6;3vS(fa`!?0KWo$ z1N;uS0r&&(C*UUF7T`AE4&W}Jn?R2M^Z@h};!7H@nZ1N?^#-Glh{50-25OWr(=~CP zjR8FtFcC0Gh+}Lrp(*f9155|Z0L%t_OaXHVwL;x26hKSBUMj>nwv2qAz_%Q*0<e-8 zs|c-zZw+8AdDem00N4oFOscjJ+Dd2}q3wirkjCAFK7-hPzyZKP6yZy_#{ge}J`VS5 zzzM)fz$w6Kz!|_<z&C(%fNzC)P-x~bp+WUU(*F+Nk}wlB^KH#c*38#w_J`zUz>ioQ z*fkJ80e&XWbr8P+eh1tD+$0r$5V}R^HlaJ%Mc+l9x;ccaJD>-))IA;MNEIWr7wF!A zK7hV}et`affq+4P!GIxvp$;?GFk#@M+#}&1<%n^B97AZl!yJG;I-B4S=0t=|2224= z155|ZaF_#`({ww{a7fJrXSTzP1UU!f#}0F@!)49~%mWPLF3if{FLcDX&4)bZA_sQ- ziyh_?N0_-3unf>X+{|*KH6gabVOBL`BFyc~Yn}qE<X-a(+=ULW*&EPJ^_q9VTL4%M zf0GIjjf|-Xp-2QoLLd^6A`v;#e6xbN!BNTF2-pPJ4Dg#VQG#tlO4|WDP{N&XcL8>T z{uJ(K4)Y~vOl8d3VC-|4`yD>>5AHJ$IeZw75ct|*UZv_e0s181lq2RobOwirI0N5V zz&C(%fb$OXCzAXY^aa30M@+Oi#u0-$zU(lsQ_vL$@?XVlSH*n0ih12p#rzd85}d1W zXTTi?I0cxkRY9~H4&((wfE$2b5bEuyf@#VTbHCZhM9c?bszT!f<_Au*KX;10{Eh>t zrwP=HP;V1z`ViHR&>-Yt6yPIbk0#C}LX!ziH)H&8W+8Yk`R5Z_KxiSMMJ8IM8v0N* zvyWK~(N~a;iQIhT!I)T3>k)4QV54b{<qw%pS1_ABjG{ao^9VBdFk0|o^BCMM=ELSf z&`SVk;9ux?80C5x4f!w{^kFpS!$RK*J=*{~O|y9gw2>K8-CV;>b1iq8jUPo%c+`9b z{QVF)05}LZ1UL*h0yt{M)Ij5bI%b+1`C~DEF*kD$rXuvZaZYm^uNf1ENy%wGW}17r zVeaKdOfBT3wmA$i*IC>ANULqG1Iz=xK(B3%2R#}v7%&vD1TY_A!{H7AOeH^H3Scf^ zIba!J7T{yRQouC8Y`_9QKVI8h33nl2I$$QH1z2y^7GwDWC(uGdiwG?yw1m)7Ldyt! zLTI_uT%pybrf{0WG>W;B*sBPwCbWjo7!znMQR@h;C$xdkMndCFa}1)Yo1ErixNIje zcM;l6=u@Y;kJmI0@H*xpjs@TVs_-D-5a2M;7zan;e(5x8)7k~{E5LE5P``$I0&o&= z%4wc<K5m|IK8_&+|2Iw%b`I{hkh|bCPx87b#e8Q>JviT?Fsx3@6XqSXc$8`ORG%~} zn=wzBx13L#yT#KO0#BRwdCWfi8BBuDpnaY(FFT%zc@};18S@}}#+(e802mLL4j8R^ z%x3ZEZt>_k@n&CFJi25&8ay6dFCJYkKIX3&OY!Dzz*i#Pj6vrb;xbpN&xwV6qzh=P zFz;tEe?#2oq33yXG~6+O?V!iP-3|9FquJ>NguejYFM#&~w7!5eUqBi!m=|UEiwJ)a z;V&ZWMU)2s_X5HeIugwFs%dUgxw%z!ny=J{Xnl-|`WPMcAzmLvuMZXV5v4w|QXgvJ zS1ZIcFo&xRQSOE)cS97aAtsWB=6#6}Ze-pD^mH@=s}bgyM&{>gqS?4HbT@|X#?aju zx*J1xV~96~?#9sF7};)Y9#AREO%UEBrYRIPK~2M_Hi5z>NV5sjY+@cl{T>Az18iq6 z#rz$k{U!4_d?x{?0VCCB=KIZ{rddpLh%|$$W@x}>P}9sj3xRWh&s9%M3xu|W;+BvF zs4azSJC>9kfSoQR-V&u~X$}T#b+t5y>MhM-fD4HIJ>as;z{}A7GBm%8%)M-00q+{% zXTUE=;UCb@3R0~g)yn)0oYwFqA<ZO&Bq3b@=w6N_R7n!_B$<CgstrQhLb5GVZ;RC1 zBK5XNy)E>#MeMfdh;0$OEpiDSV!Q(BSIvE{SHXQ1F<v#hX_UWq@VAS34e{C`hwaQB zlG`4swl@#B+9T!mNV&baOteSp@FTpB=81XT><9b?WdDiu{)znj6Pf^^2SDc8n&wEY zra4xtDI$JznKxa@<}JW&z#YI{KsR@?*&WaW&<D^L&=1hxoh-iN1KqG5+~y#7*dVt# z7y(1v$uVyVeW)8bNk*4QHqQf=iDYvEk{a$#iAjYo1${Tg9HFIP!c4)Wn1V?$#f+;N zlV+}h*c!lk%`mrU=`ge1<^o5Cxd$+TWng?}V4P;4A~MV;5xmAN^tEpDidMmVszOW$ zbG)M?23toA6aedp!gn-()~Hu@LIrk0wmP9AI-z5CGS|2|#blblXo=vw1<qUMpW54y z%z|VVB(q|&(KE9UnuT@B4T&uCmPUgl2NF4u$U#^R_&Ly(W8Rfvxd_WeST6Xv2+u`W zF17=1vxlCDusk$C9wvc2bm+X8cOaRESa~Q>p4m$$4f&AD2R|RN^Pwdl8uHEl2pgyu zn1gkX`G;BnxkAVlLaq>Ug^(+RT%kEa>L@~35yFZPR)nx3gcX^iWZ1h1dlzBvnmyEa z&0Ykc$ALFmhIdAIXM}eKuQTFyM%>QkSQ*v@VO<c`1z}wf)&*f*V!E2+W$1edeGj4U zA@n_jzK0={i1vCP?e;#x-$(fS2zwtL_I-1bjPn6_A0W;L;D3NPA3);=<`fzBA;LaH z*oQIyLg<GG{m`7ICkof+=z4nrU%1T^TDrMV|2L%n9YePu2i)d!>1H3jI|B>oHldyl zpk9Q=k#{L{u%3wD%Wb|;faS<-u0qwW1ym|9H^A8p*s2#?6N>$R>6QO;V*ukS{m*-e z&=p1Hj2Q~Im<BOf5DA-795OyUCLw1KnW0E=*}yH=4q+h_l5rE|4(L-Qfh>5G;13x^ zIOiTuXkt<;FO~`@(HIX?9E_=qu>iN!&nknbRD4C|B-{?Mf12X)P`Zi@$b<pyPA4O- z8d2;GVF!Lr8QJUgl9Zx(ELEl5Kvb!^IDul_fwY;YB;u4Gw<m~21yX2)=D;d#WO4o( zmkm+TDm$+vV_P_?7*o5KQ#bB%YF!C1%c(TRy@6Cis!%2zQL_4ir7muBH?@&F5Z4<L zmwUpgn|i{H()sX`cx4i)><Qo!x%Ihige)3{5!%Pxfo>iwO=v{JZKE>%$chupMxb{G zIn<LS($Q)%P1!L^=&{NfMGbi$iAS>linxzLicu70BPygFcyWfUnkvyaF>*YI_BLx6 zmD~ACGFY%QELcbP{E;LtT`W1dSVc2R1yl*CoZ>`S+33i97=|<FDp#eD%C#Uv3A7d~ zuQcvJR|))7MGli-l^Ma>uzMHh;U0SqD4qyP_1s{G;q3nZSbybafoTs|MbJu>G^X@4 z#qT{~{Qu20Jk}4b$_!@wS6)5fWB)Vyf0vh%P2jGINN%?r2WW6P2e8tOT%Ly;Znt7` zH+~_c1`>&Inn*Ocww57O!|$efAj}hG_fR9SvKZ7i0|*PJBJ+l9`H_8Kf0SgXM9P6< zGXnjcd)#vTxS6NK>g@?kZ&8FiZjz~XKP$EmN_13DDF%O#RV`g@k`r8^Jj_$lNC>Xr z!D%#BRxh=Xs?rj!A(O?qd?=VzX@5Knb}aLhosg{QiUpA;FtKpXSV=>s#9SZ9H(H2f z-KB=2T+Ix71_&v=!99TvO!kU3tCt?e9(xw>M0rXr!d8E>*YBv}RXs}jql(vJYn={S zNEPofa~qE!FK)_&rBf!Nl<uvZdp&_dT1!*3JH)z?6JUvjx`ZWWwHE1(2$aMK=}RG< zs)Ugzv&hQHysku9S=OV-a3PWE#dBu4S+GkX^B?WD*ZVRRQd*#_6!mzOxtTP~+#W*? zHMjAfm$`fWxbkS3soqea);84Kfki)}q>=2h*GG5g5+N-kiX7}H#p|}cUImk_Q6^bb zcChgS-OU~BXeFiWZuS3&7g%oHfdJXH|646AB)(<4x<ZTh|6zH`<4JyT=1LiKu2Sq$ z(jmz0E?J&p1^23l;2^zcjQ^^JLnk{wEj^EwoIF$|u)c(Hxk5`#i8X=-Y?KmJj6D+n zCCXk~Ffu*&BC$e6$rZ{I^&j|@JGop(m718S5_Rfy1~SE}8KtJblDj8vkRldlnQ2<d z(JX6#mA9nbYj!BP`YWEQ_9m(lpk`no8!kD7U7k?WxN4bwbLnk#aO>#`;u5>AQpPoQ zMl9}sGH1C<ukBGKYAAFLQmxIY?F0;}&|VX=<^;P;as2=DBy4-nC|_^MNadzXD^-+T zW5G4(|6+D{El<_|&=)WZhVG00`xMJm_W#v746IE5*IViTyfc;8Zvs5V$}XT0cH?^f z-*vN+1KTosf@?YpuG21if*|FAF&-G8rKf7m@DvLL_Q=+*v)nSXdt}8Gh$<~VYm4tG zxzq>qtn%7rL&_^#S(Zjo|68p+Se-btg2JA7Tv1|_x=e|xhq6DRC{HR+DazBzGm7%8 z63>(>e^r#{l)sVhd8YVZV2blari3R@<<w_NL<6SW-w<|WB2!`;QN+efxvz<$G*w=r zqsYHQ?w_ogqBK`pFr{)!rubfFiuWH(@w6fpt(g*;#FPixkf*Jpge$Kw#r3M9v~#;( zV~W;ZQC?TxU`o}0Qd1=}MSqhi6;qfJoywF4)2MmUnG%!16tx3W%#KW{&`D7;mA9Bu z>20PsvX~;WnG*JToLNbE#LQtzja;Tw&!a|vhbfQdGvzM@q`FX1swzcHdF)*Z>g+Zv zEA^Bvai&jsN_1t)v+q#`-&d3mln<Hm%)dzJ-^A*Mwtd>s#f(;-<K00&4~>6wxy=|Q z!P5i&Mm>QNdoha8TjD+v_XWF2KcEKvrGEg(`U8O)4+3g9STcu59PTo!D1Wa!RC<On z%I$E-ygCBtwUI#WM*+3_h|yumXpqgu0JR>(sww{%3#$1z8K(#Qt;WOu$^@X7`@-9H zqSQG_#+)qi6oe%WL|Dt7Ky9YN+aktoKA`+F4At<~H29NI#MJ2^I?ez}n+cRT3n*na zP=`4{=^rzi*yn=mG*2cmA7sV?pf{VwnSLePfU>-W@aHU&;ZT{oSW-(QZr8<pP$|%< zMvImPBnp=i#nn$Fqq56<Na+%`TzaT*-Pj6<|C`F)ovj4<!788+R|EZP4bb~*Wpra5 z=&tK!v<(t(1mnF;viMKOnU5&FSU9rRpKS)e58EPTwo1HB*5r0c??7m8_8xV?owB&Q z!05|%%fL@T4`j&m0EYh3k9`L29yCRq`6yb|1@$A@=a3n}_5u%QU&vVdB;Idj^8h2& z2Z0YUse35t8^#WUa|GkaZ9b-qW!h27lGFL6<s6e5zOp>e#+iRnCNKw5o5GGW>b$bg zehp<4ne5Rgz>TK5okaPZ%uX`58K=x-$|)9S)>6=zry=|?I|FZRv?4zX?*jIXjCKyf zk1J@6C*#bz%1TxV3GHO(A+dpd3%rJ10N%zf0<U71WY)d|y_J10PcVM~y_Q`D-o$<c zUeB%oZ(&z~H?nK8u73i(o&5~Fj$H@d!F~Z=&3=_t{+q0$-@)0;GULoAQ11@vGke($ z;5}4fpR+%#Uh}7nfh>N(ZX)nAcFW@5X3v^WDF+zKuZG&bgEBp%pnUhiUcJQByAb`B zb;BHgk#z^Yz^b^-c;zw^J>a{_deXjH=|v|#3MQH>tT)&{vOZu`RQiIx#`<x$`8VY{ z^YjNZOc?;?4K@(?Pc{hn4>nlxhj7Z@P;h={!+?Kf!+~$I5p;mya*c%NH#SNNeFXX! z_UO~*3(6hFcc8=HrQCPp&&8Q9Dm{4>lyW#9O%atb5|2fU{(Ky#CKxaA1j(N$=}DZ5 zFd4WvpCUO^K@a59fCuyGz<u}(;9-2G44ozMY>BC7_TzInHN?k|8OrC%JkluZ%jbbJ zNKTAH_<U}U;{kkute%DZ6f^59DAOYTtl0orrBaOLHJ&ybB7d@A6FFFu_+r#yBV{^Q zmVjuCq}fuL$})JHDu=jI)os3{9Oe2aU@zy&3Z#3CuLS;*ui`YfuLk`UU&E`K&6E>d zSqq}Ma+)japrM7*OI6l`XsPs5l?@<XRtBlcgK_3Rl%cA*Q7XW4F-qM;wV+}d8Le)X zEx!efkJPQeBh+ocBh~G|!_^&7lBCR3l@Huz8)c4Kb*B{HCGl=9d)}vzoU48&8)6UW zkJZnufW1=c3$T```(&-{mz)C<9|V7%dPwpQgI=f}0bZ;gm7Fi7%rS5lsZ<LK)UPD} zIOwJ7*D~}3==thNE3s2D__V}lWbj!l;2X(0C-Hd{=M`n8s(9VztI8VH_%@^yU63^O z=ymEvNnZlJR;}PR+bJ7W@tx#ZYvA_?*{uEmyh*(*`9Dg0MdHXf^EG9gdf!!qf1%P+ zazMQX`jGk)@J{t-D>F2F?NtCh{fK&9vVVcdUX>Q6&(&W+Z&zs|*`xjj`k?x|EZPkz z`3E@rRa(6ctAEOVbQ7F?Dy?F>RrJtL)mu`KR;*p>Z3OO6@9;?Tb>$d+j#y3kN*xG% zQoT!B$EldIswrQq-BgOyT_ue@fc;8OmAZ~xBzmb#Ij;6rW!?6XGJVOTs_5Y-)P9mv zG0yy_az>@~=X<q3Vw|VXLY1@XK$U8m2H1Bhx+e5d9e=A1mNX5{OO)}8D)squDvh`c zDy`Pvs6(XYp-}UKS}D$alMPd^sFjhzZFRWJ@CcQvW+ViDR!7NnsFnUyKLY0ubu{o# z>KG|G7W8#>9OyV@Jm_E43BWhiiNL?AlYoDh)p|>v4ElyT1^730s?<3R^fh(5)H6e- zi2Pnv_h4m7Rk~>=GSpj}385a^EGaY_ba!ozEFeUCY9C8ISf_eva}m}@JA%0BN`H;4 ziNP9`c7O)SLE1bSiRy2lwm>%UA&7QRhG}HXeI!MPljuloK7>YT3xW|w*bx@0ZnKjz zNy9M0N-$N!09&G(Z?UE73{6?4E>_LAmD!r|2?}6lDRVWNy5?!i)k<cLvQP_K0ac5% z@6kz?Yb!yo(59%>lx5l~S+vy>uK|CtwpOKm(mKh3j!(4plAH$dCE9r4rP>C`*{Cj8 z&0J-TrfovR4ccblbsD0q)wY0KuWhBgyrXQEdD)_EQzOlMWxFP*bAGCAw<@xlvO}8% z#x89KBJI`|fZnO?lqu{|x2a}<^0~%#Bi+5)r{phG_G|1j_z!4%$X}!!*3{48KcelG zvA&RaABA;Rj%jQ^!oJcDkiUy^LSqNvKdBuee^=#<rXGg>oOT5G8|^kK=&W{>!roIZ zXzWXHFKWlg|Gx6Q#=e682kkgY@_}+i6JN{WbRtlaYuc}fe_cCCT~s?o9auY!7+1A3 zq~Tx6ZyGxb|L@v2<o~zwr^e2~e^Wb8{%%aUqp@$nxT{?tMt5{Rom~W@r+$eTJ<!W^ z_8k~~_3w$%6J1PaKY%e%zl>aAQX8UcKgtYU0e7g5Yz@<|f^kj7u(_<7u=+>pDrNB_ z{by_RLuQnI9nrBD7^@4)_(c7eK&i&-RI153MVX-g3a#Vx-#|~&e^;-oW?!aE)2W50 z>o=gHA5&)O#vg&mb98Flx%!`oHe090{aC*#8|W5<vDa9j^V<R8h58*T)Ih8=I=f3< zP49+oV-8}<a-DbAq-CvDQ	bHIxL~k=45LnA^lwWSuU0X*5oHYk|psgWgA@Ij^rq z!?d5|_t(%d^#PjO#KvW_t__rN21z-Jvqc{)=^>C9jwxGLiMvC$B!)^n3}GW+wdzVW zw>gq2r}ZksWfCJ~@JLBtlJoT_ss1CG^k|JrIY!cBC4Zch94|Q&Bxj=3FiA>Imh==E zI#qI}N%`rLGed?_an9&7W!zbkGh2qv2^Q$A{;`ZTSK@id`Y250x-uUWc4$AMfHL-i zV2msJLhV6wG<vYk7eW7ZeKD&1XMG7`jK%b+V*;pZVh{I+t~^r79FN&me|Q-L2N|CL z4>Xnok2F>Q_c2y#a__JTo}tDB>d3}w(8G*1z}=0t!2OMNGSBNJ-auGWHzHtwK{lkZ zN%Ap?C_RiV8Xb{t1$|rJ27Fhi8LgMGon&-%2UsJFowBIAK=(CvQ-Gm<3eOPZGkErB zG@U4S^t}`!)Gy!}Z0rN>ZD3weh8qWDdIu#wB=KSJ`x!^HXcPO>(S|rG3#EQZ4l|Bf z&Q})mxaE9pIhbvfF~&&^vokie;|-;Hw26J~B!iujnopxnr!ZxzVeQ+_V7@k|GG&gT zokh&~Q~@6w-+-KJoCBU`oF|DHn92<raf^*_$&c;PGJ^*3C&mS-_M*g>C~P*iJ%&!& zHW=RlZzP>-4NPUqI^zc#4aQ}X!wz|i)Unn05!`LY72xg0RjrbV9rG^3H3LI;uVHOk zu1WnrLE<yxXN{JN>#`Fe`fh_-WRF41#iz2xKR14n;=fWd3t&50+4)jt=NM(@uz`6| zIb!?{eAKvsI>9FVgrWQa3Y+lLhAQ`le@ZnsCBCLsHL)}Q#!zmNT5QQLS!yp!wLg;D z?~L0Zzc(<aDnA%^Ne(vJbxZDdDR+b9elfb~Fc*yOz`q$ibjYoM5n<>(b!jI`+*_}v z+#=~aMjw#3jlLwe5^KMZ`uYjd*Iz)Qx9A5=eMEoYzG48$tw#43vQ0;l#4s@sVZ+5B z;1OalNvuWB64a(+#1OrbxemQWxQ5E4he=G!^(0{#nGl;SsGg?^s^=+!mgR|ptix$y zxD+1&)f2=>QoR8k%F5(?naKr|g^$H3NX!)<0nZboNp2HXf5FG-b_z?x9yI<IrhFo* zjMZsKjf3nuF%oGl7hB~Zqfxm=jF(X+=yIsj=-((N$_SHm%Xq_#Ehbx~kQ}mxH;Jh_ z^_*!swJlk%>&0{=uu{yB{F$KFidmLwB)Lk=mh>Dc|8XFfs|5}E4Pvfj)QmQ_G1!w^ zg#lw~mmnK*r<ey-+XUH=JM4UumAGBZr&4c6Cl=ZQh<q*<2DI)Ki_pk>M6F8ZPMGFG zES4cym6XF`Dew`h!vkWOWK)eC6rX^7NG#WDnY+-h1z!RGaamhmiIw1f%9N8rSq17d zOxpAjI!q0*8vZ>ns|8;J`3qA1Td@}0y)dl>UkC0FlKZ__5AHrp(DW+vVI@xApnJ92 z8+ET<XOr$#Yi-uOqV5*mYdrp>@>k_W<t60}B}>UyIxDae24lHr`c}jk!?x)P_qpBM zb%oKSiMXTLPF+#K8_(D-uy^aqG{!%L^bGbH!lyILBbWykF>MdLi`nN0TEg}sv1RNF z<X|aV!PI@ap+ez)-C&se4(JBQW@0y^1Ej-@A4HV1>=2@#VdpU}nN0Zyb{M%aoX#Ui zwu;;RGt-ZP@g-Cp1B5x$uXIC?QjS9@`$lJ9>xSkr)!SGNxH6I}qdA=)OySxIsGr7% zaj!a+pR`n-(&+|pCTFLS&@BEjf9#CzeQZBJt9xTV<=>#X7V>kt_b&(ddEHxmFaK8e zx|i__P&AKU)V+^<&M)cS${YB1y7%Ed{CnN&`Go(Vdn>NxmvwK=gZxLRoy)K2-ssKz zs_uRC3w}-a-nWVWq<hW9{Ab<kUB$2K-l{wJFQ}sV{8!yuV;}!b_g2};f7iWX%lQr6 zTWKBtL-&TS;D4er7x0_9_o2`DE!|sf7r(80olE!~-CJQbzpHy4i+DG~8?~NyH@vQ; zyoce9T*G@B-ut)lUWV7Vk@q&dF<W>a!~5WF-q-Lxu$}iayb&vTf5YqF$&YXayKU^Q z&+?iBpyyXU&`=Dt&>+KG=@&lO@M`C%NRdDDA%-{XM?Tc>Vp~1TP@HZoi(c~*A7RLP z9cd`0TN!02nn(G_@Om!u(T0LH8e@39*Z5dNak!OnhWDYKYC~^q4;9Ova4Qp#(OZ0? z;jMC$Pcpm}e&Umn#oK%e3iCamicEJ`r=b|X^XZ0HT;MYdFLwMh4MjzYvkY&=>wLE1 zb^pNUpfq>+$0+Nce6FFec?K3rZ}cC0f#I!shc7g|)w-#R4DWq6_+k|QDqmuF_49nG z;jR1|UuJm2ukcR{uk$;;-0(Us@;)m26`iIp?Q2&c&4IK(9jjJaiE{guRa8i)x*8Ft zs%xNVg1Q#P@nG@vx~Hq_5n-IV0Y#XmZbTJLQ8%F)$E%xBvr$-3y<(EO6}9EZg6j3m zP`9HvY_Gv~AnD2KPUIc~Wfv-Mw}I8tYfMx>Gw9k@-GfS`9Vhm4{BtC-T-^)BD^zUM zu=(1mDqpI~X_b9p$gv80|E@|FE)3K$n!XRB<Fx(A?Rf0~@-R_52o+<sLr7tQ28(jK z#ts`8Pp1tAs}TkwtUs7&M<BIYgT1v)BRgrIM)nV^92hgFHRW4P`A$=Q)Uc3aWmax$ zN_QR0qS9Yi2J2XF_)!A`URS?_X7nnoBbeZ4!qU_g%$}d<nEI5py0S@EF#qh*Bafj@ z_vv3Dub=A2Q6GEtuTiH5^b_cOhxC)E)BXA>G~f~aG|KR~PNQwNeg^e;P(O=iJgk3% zZuF&o4&C>-ejc^|h5jwZ#4-H>`r%RiB1*eQzl2)&O#cr3=PUiB&b~(xPwD4$;|HYp zoqidqf2;op=6U@J<S*)1k=7;s8e(10FYC%RUHMhle=_7$_OoH=Fd45Ka+>?akkj0+ z1|}q?-q4ksIz|IJzB18JrWnc$L;VeEW*fgl{Y>KqlA2{KG?b-=vcd{lErV9dpj8I? z3_8R<E9jsM+Ao6+7{?9SHNQ4a8Om8hId92alrrB+nG42Mi}|x;UX#q9j6V&fn~?mT zg81D9@q37Y7ITPX4wB5l;v=Dq6Uq!LXtoTRDT8K-MM7C7lr8kRGj&<xQ=#k=%9lbp zA(YcXIVY4$Litf(p?Qea!FpViy{;+j3D#Ltcs%Q(De4Q%p($EZ=F$}Xbr!BE#@j4L zQ^Y&0sirvIW$iQtyIWRSQ=Eesds<UmqZn(hDeiHM`835dm9b|vC2SUBCz-~==Q4JR zX$t)jv@>wM%jwT$YD$G&j6JC-k^30S)Rc;c=uenxN~Lp*-9fCV?-;vJW0ikmtcs@i zZZX!6Ys!7yIeS!7qDOG{oTkKl#Mwe{tBm7p5#0MHb5=uB9+<(|VtA|0;cN+9|6$IS z!L4?jv#Of%;7R&}lA02GhO@PBAL^~Lb#Nc<ud?-U9~rE&4REWEQQ3o<^5`s;?SQw& zGL?OxDUYpE*?D;XvR-9gO{uv>Wfe3f?x@NlHKi7I<985P`?AU^YD%3uDyyU^kN4Hs z9u%$a5DZ(m^+s##5ZoswYiyyaDNjz**dn-3&D7XpxKGc~*fO}!%-7f_aGzbNvE^{% zvC-NH_pjJfZH4>XXByiE_ixx2?SlLKL5+P1_l2WK5AKV{HMS3K!YPd%fLs4O(uLdL zlE#k0ZFpH@$KWRZqOs#}8{N>@8MuvaY3v)gO<-!DhugH5&Mv@x38wNTxPON!{5{-e z!*zBUZu8MP`w4D~DLT6jx8)3-{SNnK*m5`E{$r8OZozG}OlNoCwqB{TZknbf!HVh$ zx6MYKJ*Fvbx9V&Fyszxk*$}v|p3vDaxb0v`RMV8#e$d%Gc-vpq*?hRK|Dv;naNqb{ zXG=7V{qs+qErmaMl))a+lsCs3><HK?6AX3|?9|BytF9?&(+qYR-t_4P`;#6A9%YUN z20H^*#u9^_hudMf!M=stag)I=!R@reV3*-$eqpeyaNqjMV86nB`=r5cz|A^ius`5t zpEKAs6fftB!EV8y`-j2q!p*yDupYXmyfc9Qj)|t^j}mME+=8)!4Tf7dU9cf=ix$Gp zg!}GN!A8UFyqW&ki>7qhEm%!W>H39W^TB@as9?1;<^8V(TMq9BrvzIG_rq@lTLt%D z7X@1l_urQVTMM@vyDHdv5Z&1iLSf8ds{89SrWfm~Gkh4|U+0y_j?~Fu{@&Sqe^X`u z8#j&p9c~$oZW^q^K&?~S{tjt1`-%>?4Sz+qqFBC~Lq*DMBZIwhh6RIPI>T7EGc23! z&tO@s<sF0VZ<(s>uiojO`x|voyw5302CF$-AQ6P~manjg8c<i~K%Li=$BsT$=P!s@ zbA+I<sWnH6sTn+rb+~IxZP`t*`yKqv?xN<)Z@$p7hmd6FH`4>;zu(LXkmJOg83B5{ zc(WnVl)qNUUWF({A^rpr;I!;1c!V>+g%25iQEANH>iXgRy#((q6uP-Wjh&HSK$uQ_ zf1Nk~-b7JURWqGU;ptp+s%W`MXKy^PzXR%^pO8*}@zMjl+XF`q>~DFVu{Zkhm-=y~ zTR(pE&BgpcqhTC9|I34iS`OvxV55OtfkI8=rn3?hA}2FT<PXiHs|b9oRBF9Y??YH< zIsxTSXK38%Yzz5W;y{N1VrtDfV(Nho1I1K|O&s#ff2;yFCN<t1B>eM7S9loJ(7EP3 z0dLLuV(OcN5o-Y=Y|yDP!3D?8kI)Qf_-#hrCQY;Y4O;C$Hp^fKvv~$Pl&zv;3=uUK ziJFVWOG5<jHbi7=;0>kLWiJgCtlLnLt^Y6P-ULpH>RK4Dduy-RdWHcM938coK`a6> zYRuClCNF8n2}vg}ftaOv-8H7uNlac|;+VwbeU1Yoii#itid)aH2qL25zM&|h;L=s? z%!n)EhWip%gz4{`bE~Smhe4C~zW4k8`7vGh+~wSJ?>+b2bM6X&nwgJ&N@9V|5KLXD zXBO(|i_lX|{(Jo2rSu|jCl~AOi*>1MvHn|Nx>K~&5<PRVp1uTv9QNC&!WwFj$3lq6 zIz?`1kfh{NLg?J7Cze8+e+{Dn7BzFJe!P~rOy>w<jKs+-){I=~D#(@{D)A-M%my9# zkt(psP)}fwuqW8ltm$%Hzd{F<S2~ZF<x1>cVC75d1v;4ak_JTg>5?)}m(JHEok<3R zwiLb3R7}%44|?Ch-Gj|tV>*=Po(>fq8gjt{y3OKH-#z_a^Qep@dCq1%z6>f3BHB`i z?ke3KM(mq_#x-31&>kSwc}R~h*O^_cJzSDp)!7;*(18Ajbyu?))Cv_L9{|t^TiT8= z^!i(hMZ*ALK%T!as3IT1zT8j;l@LJ`&3RNGK%d7byh=y{0(u69^)Ww$u>{?NK_Bx0 zV%>v<=24?0sgPpp2}vRGuPon^p4rmY3Y=@nvS}TXpE`nE8OZx2Q#_yss;>(B;Bon> zc`rS^#2y2FO3$o-a(oF})lZq3m3r!5&<)Jz1)PVS?_|VLjk)~`;IO5{RXR&P%bWuA zjWcrX&q9{ZvH{<D9B@s~IsJN$z5~!Do?}dqastg6n$`j37`!lT6sHzNhX!#n?NGux z8K9pcG)GUZ(le{|^wlIbQfu_gHF|oj0L;v_;7B3m0lW_2Uzfqx0h}f{Wo51h;F}0Q zelaZ79O$1YUrng5AF|kK<Vsm{62D}zUq!(8S?uQk#D0ved1U-uCJm&H%H&ml91M%L z6my{Aj>>oe%wh)+{8#|<7>oxobjdM}zXl(FQ?V#7C>Ad*7FQLE002GpD8E`k&}VMY zQ~R&S{s@@~XbwuQm`*;4mzf078<6}ate`LEGwY#TH|p`#jCYLzE<4gsyv?vqM~x7v zZ+N6e%(#{W=Zm^Wj1Rt}u?y;uG?BpU##BRlOal;V@usjA^O?59AAqKl@Hbfpj`*1j zDx^}%H#axi(xle*Ix9T`2uaOI{DGxrKpT%$gBI8~(o7by5!%Ebc;EtG{Ny_OlViQ% zxwVf~y2cJb*P0gJ42kYw4BTIgUxUfM7+=ApUK`}oZNQwFX+BT_zWDKhp8X6c@?}6z zb5~V=J~OkPNzw@rt$7so!1(th@QyV}glIXFs9(m9AYW{n_z4oF`&omAaehYh2OYje z44*GUx9NeQWj6es1Ap^a*&wFH#_cN>gsMmsG{pYZDiFy(v(mmA|1bEB!!Ohk)RwpJ zDjW!^t#hyd9Zv)uOF_MzgF(%9!T^@f90TZjh4W}~f-70)d#+Nzyf$OXqs8ag@Ux23 zXBn5m=0^_5T+I>-umO%u%?PqD<(;{Pi|mQmxF`(r3_wTQp{t#^2m-0R$Ix#XXN}{~ zk_RK-AK5&r)NLS60DduX74@R=7|}rS2=W!+15i+n1Hrmj$DS8o43ZGUW!}#$(nX9W zMX~B;)382(qk300j^i|}x8ks#8p08p#S5UhQ&7uqdF%@~R{A(p4hjtp<lxPqM<v(d zkjheQ4i1~`YdKHcf@++M>K%>}fxtvnP)_`aMft&S&Q4%sCw~z%F!@#*PH%&uRg-Rq zVYXU2P}NMUz>$+D4?@3wl@y}XpMW?o?yF2dfj8BP0(m9ACZ+cC5}P0lK44?ylSg@( zJM{LWSo+A+0r5?$)O7%Mts^t9u|zkA@DsiE6Ir?~pZtlJxl?cd2}_@pM_vSxo_YrI zdPrprM+55Ab)a=Ur?T`H^U3denY;A%@3Qo?eDYV2dHb(eIt!_$(YOViiC>bbh+&J$ z>P^7lC6X*Qwh~q5ND{M&zcWmC5~hPeUqKdI#kxDxSRD@hs;e9d)c`{%gdd?Q^{>Gw zt{O@nxdOaA=Xa>JkJ=xQCx7m|rVEeupY!z3^4O1&EEswNNq7)St@}u7l@-eHGI#6k z21~c+lY3xv+rwD;tNG-$+-tv<v-C0f<Z)ggfC6#Uew>^>HlLj6wNGT}cs_ZU*M1mF zA6;J0*csAiad5S#XLAzb=#^Lo<*lf?_Mqy%8hnolzVYCDbnrd4yo#YL%{a==<}^Sg z{vzd@sZyIqX`;)3Po_P9+6nq<0DYC9V*=<Hg5m)bC+O$^I+~zk1L#<SvH_GO=%fHT ziJ)l#G>xFP0BRG|9SMK!@b^{tI|lyZ@OL!)9SeV1_&W*yromrZ%)r4r=scMXx-E@; zt5_5wGY-}ws=y@ydM_yi2g^!T^?~`R&RhBbs6l?H27y*w2vlN-b%@HXnul0u4JJ40 z?HfU-+Nl4Q`h7~y+^4606DZ3palZ~abaIpKysxLelXE`MbM2b|?Is;%#VH)3KcG*S z4mkecNx$HSr#I_OVam*dWa9~qA4iE#NTIA13MBzOF<FwFU3w2$5}Qbk53ws~E)e#7 z=BJf7$%-K3GyRZ$f~0H#k-?;`pnq@DrH4V5KzSYkVFJ*h8i>ajs0J@E&*m*Ht?@@y zwGDL|Fpoi3`Gu6Ko|<}8pPG6M{_^nW!QW)~f0EQh|FWpVPbeAFElRae=RuHls1rN1 zi5+@#*X_K+Xzn_s!z9D{Htx6I###2%{1iF+`@GGvzHY0XgSLcYPD}QW(8(=7Q_#CR zs$w&+i&weUp@=VeJ9pLg+re~1jH$c0=Nj>wG~RW{qz=<o(~s+}SxEQmdDp}q;F_6! z@PPp~XRA3tULXM6xz52Os;v5DAStR03p3X6N5|pcObvjQkazX?pw3{Bj=#(~guD6z zh~VnTZlkvWvw`to<y<B4A3X0W+0%snnflLA7kxrc{Vq^NTNN17XHhrYrYD}{QtD3V z?Wa2Tv-r)N#XsPzb1?9lYeZfs=(d6V16e$Y8o)NaV6((i!f8wPP~z#(?I)fQPS4)I zw+v|P^?}9+t^go?;7mNLOT)AB>^ev*=fXTZ+XC1qORkFWXUgJNMpi2$BLH<V5tXoS z1IyjP^N9;!7=f?TW7v{2-<Tph*D0wRcxJmgT}~|1I0eo!Y&KFLAUiBlVmncEPclH< zwe5vFpE+&*XJF4~e!ma&hiicEN7!tCY&e_-Yvirg^dBoSm~Ys!vl<$!b2`U_Xb$9Y zT4Fv_HztS_*x9TXY67?va68z=CW0pNoW9RK#)3ZfbBI5gF<B9P><gUB%AsIMG&h2{ zNNwWI0wb{j#?)$py!duqLKvb>ku_QQG4;m584}n9IDUFKbWVtd&T6nlaZ1ZaG$1<A zPW20f1Rxwx9~T2E;P#yhjrj9A3(!wR^gl%Of#IHPYHyOdng;y%4qfU&!~uni1cf%3 zyw1YNgirm+RlLj#di-9ML28KTssZXRBI-W?>YhPF>^X}KH0%F3;M>JUknWzX#9!1| z&tMGHbl_~B6JWu)SVRO(7GgqKz@tEtxvfxeE-~US>5QUws0CYc5ex4bq)4us1L1ds z4AonY_ENbz1tfimF-1iS_C#d1BcTChke$hwsR64`;!W8<f&Wn@VR&?C@=}5?YhbFM z1yUe6u6>-;H4aK50WbK1tGx6Xpa-0henn62)Z2H$kh4=qo&B$w=Xm-#POd>NCLGWu z28YXy^s73BJ;j|XjWsxz)zVdsVXa-&>DNTqvpju0D>yj=Y-}+4U)P!MEM@68aE9Wq znTI+47C7=Mc|1=ZJHP|Y{=a6n@P-p4k`M^Jz{{o3B$2=e-p--(8J-h3eU!TBe30i7 zZ|X`UXu|n`V>nb!4b2$@f)?ujE9iM}Nl=bF&O_>d3A@i*`|dt+(0%?4@sGu(5Up~Y z%&n@4)G8jCfT<U`mrp#R@qF@c`ON9<e`DFdLZ>|=(M9(2S3x7FIv!~{qq&hx#?XAT z`LaA%FYxK5x)LP`O`f1!^H?ubEa3SXV^$RkEAWD%ejVph9Vo%u`zpbo;r~fWQ&0*6 zP#j+p0^g8TMV(5e$a~pySl-X}uzVqVKEu)IEYt$Q3551$XQP+bo1KTH`6dS@u0tvW z{SX70{$C^SdBXb~^8Oa&r>gm>b`gMYGhPDXOi@$?`X{(gC=X~W2Tlw-$vZ(OQJb<= zKt(%tB~g&?sMV_W2<qFOUvQNZ6~D8i3P#`T<v_NYy#i<HvWr;ia@KGta3RDoVQAjT zrTE260UH)PjKCuY9*~x*0|s&5t-`Sz>jj`f{9T=WcJ;VcgN0(gI(r$z2_0xcaJhN| z8Yr%wxs+$;GgoaGOS8l)3|9p&oEy%QD|-n;W#$5`=4rB_YCq3U6&eug7AS2-#X+=s zy{@th6bc^{2;dwD@lo>_j{;d=2o|^=#&Gp0iVMm4vYbB_G!Iwr9KiXE@5(CJfna!I zP%n6V4>L{em1%ofrXFDgT}bsX(*r3}n}G*ZmtL7~F3PvpmPYqe#{C}TlYj=+z6Api zRaa&a>#C>f%3J}iuKEE#^AhhI^fNDm-lSmFgOq&<l&C>$2U{v&t9bGA7zbS6S2V)q zkBn;&8M1(_yNnc~vp`2F0D8OF*N3wes^==g0l0o31Fj$ZgSe=A@|jCm1IQRxfl?9- z8K}LO1J+m{WP=s^Z_wAY(ZI&ByceH?6Q2bnzdeQ}_#tPihJp+^Dt;xCFvX8JS2gNS zmoc290fB-2X}YYd+8OA5IfFdt^D<vIfDR<AbFko_HVOIdFbcbrpN1mc9_mJsZcE*u zxaQ+am{h<bcmWz@5Yl1unfVOotWkr-62;%s8G0jCu9m~`z7NTmffe<K{}~yOM?i_l zC9Kf-l@&@^t2r;o`Nvo<wb<FI9-(%ywoXD{nx;up@A-*hs#*uYm_bO?GN5XT(pQm_ z0{R4UDR9OGY*|!P@aQE5#?Dme!>{3LJ~%oIXSU%Q&Lzy%reo{<R56HW@-$g@1?2?& zA<T^C!w9vCGO<uXtOba5S0%(cXqv8$h*d)TGrdODezR8@fD)TQAxuH3;hF+rhlO$t z@&Q{1tQtaH4Tg_~xT}*5Zgt*wRph#SA^5tAaDbd^Z_psipM$hj8i7s!PSUmt{-315 z&`}3fnk)?+GecRA#@LwlF;aFFR{Fnl5Zu*R6RVhqsvr2JaFqEvDtMy?QZ<?PK>*m& zV4kL56r8Rxp*tRmfdgP(;Is!>OZ`VEa{Ug_8WlrEfsw96^TFq!SpjHX8Uc;V0nKEA zrYwC;DZTF{{=hKR8zL1Hp#u|rVXs8B6^WKHO7(h_>SPYX+u@W7NFAV5gQ#Ge1s~G% zdpN-enqvK%kVH1nTKI)#De6Z|DBF;(LjgIAX0T3`4Eio~(hfrqV8-@C0!-I96k{UC zLc!l=G$C+=Y1BUtcum6)wT0FxaIlK$_K(t450a%?$b6_%b#-W%aJxw8Tx~Qvt3`Te zjrdNNk(v^!31z4di>oy@K!?hF1ZFP$RI31B3Pk(3KnnpM>nL8y(USNCUn~O`v`$8b zDjSQ%A3a#8M+poiTEjSk5d2Furl@zyBAlwHxhsZK1Ugy|#>5U2zZU*fg%yUyt`-$m z6Z<MsTjN$kg+Z?b+_cisQ3Y{o-Ky@6x>yWj)VZ~XLJm+bRF!qL^{)cybw=$GHP!WZ zg0se`4r&#vqT1CExf3A=YU91KgtTGx>d2BXyg#n@qMQ>Its|~S1g?-)ql9eoK9H5+ zarH(JsIDQ11Z)piP-YS`<1;BUNySk!{pFOIBT#0QknM}IGCZzHlv%?mb1i7ZtWu|_ z3;BqR7{fW9F+nqyw_ufM!D`WhAk?B3{Dkv>z8cr+?x+<lSnJl5w_t4zwP3ALb3}C& zwP3YT6}Dh9=J_xTW9FC>)_-;EkSL$g*hNw?DynP5cj?^K!zKh|g8~^^##H4&`a{dp zS0<*qF$H0OU_c;nO{kk+p;&Dd@-y=(@YcFXIGuMG!nTyzt*3_g`UVaL8m;mE8YRr6 z;S#2*Ov3zy1k78JfcZ_ROz#PlX}u{s9{f)!S)9McwZ5+j+a@!lr;0kRGUrowas+W& zDSNF@Z6{ZQ%gb~b7>6d{!JSx37SHc+)#NZ-syvf|4GKQfNUwtw-DO_gM*2ET@E<Bz zR}+QVmd{*^_92Vx!}8TTv;-mk@6j5oDw%oU^`D_ZH_O<kL1zS}(1{TL4<&={k7&?+ zq0FGmJL`??>7QfPovO%I6;AY)?7A}h?QA`bdrSVB+0J|VW8Xn5R2aoz=f&m-P!x>T z;{KW$;5nSxiTwt`qQEi(5yKLags8j$u)f2!<%wX$_pxwgc^p7FW8dq_R~3u$UyH@L z#p23h5rDif-GzbKDT9G|WKbZ|)7mQR`;tW(8s_-f#!)XjEwn~w8=qy3nxQrN6UgsR zB_r<7Dp&*umuxsx^uygb*x#TAvUg&w|D~kqZ9w>R2FkOAG;cr^6e#(t3^D2{#*HjL zVJG*NrSHP1f5WI`Ki`P<^M6I)oe2IPE~^^oKKV)g;IVMP^V4@SgBzIg3>DPfF9Sc@ zKkZH34%!#!(6=zjM_n=*bIC-B_ZX}%aGnKD5-P&1=wfK^;3kWF<}T*-`A95jbMc!P z#sXmmay=iP%Oso!0KH5BX_}9pjc`A}faFZHm$k!azQY@aV6adqkB>kb-YpZVb90PH zowK0s$3l^2u~Mg>%~ajAUgx3aQ4KmPsCN1ICMIQ1_x#M+1{np=AJ7ebfqDf9h1BVp za}1IS_cH-IHyaRzyzT|B(=&68?1SiVZoz=;MrhL0Gv|V^ZA1}}Io)RIbB)jsZ}|gv z02cd#p!1C8HH#<Vn#^GW9MLB=X8ojwSh-K;e89P`;Q}etQy;+fKQ#*P?$BbtL|Lu5 zD(NsOw!VG_YB2MR=272;zSLu&dpg59DTuN)j6>@L+)&;^skrI04eW0elF!_WaK0sb z9~AcioEArUuc`GHf-u$$6)L@lp#TadK+a+)F^P>&2NMRTYUVJMiOtY@^+@l0s)!4M zn!?`&MteOn#@P(#ypVG<P|=x<*g3c0bQpHab0`q^<}{~INB>}bdkYf_W?R_j&XmoC zK_iru=Q6d<v^J_ZMIaVu%!#OSRd-ZP?5Hl_#hHlP^AmsIu`vShX`<voBnxQsX?gzi z%!Nj<dqU(M2>VHiCv};Yaj5^7iXDu(!+mLG1p((aYMRZM<$bK-WE5T<HCXqk6~rU0 z00;$Z2bz@ZZ?br|>28&1#?ri`5B4_LdpO0#$|oODmsl@!iP+Cj{hETyLZH-wc}Kg* zKo2U%jEwO4SY1`Ls+ccvjWIVDi-mgNWK4in2lly%TS%}f(efkA_m^RIO&^R)jEd8y z71O0y9rG%y<M;cnjzazDvTU)%An$5q?5G(#QKR0A0MJ}96h|sdh3?@McTP}oXQJ|t z754ke3j5#6d#~y}oA~-X7HSL&_pLEh1;f>sA;I}&B6A+AfeyQb2_x8f7BYA4XU^>g zaFTO};S{+oIbCwIb2GQubS>*KuX$9pkfHgE$3g*$?#x9(UOvV`A7sZx!t+s<Pxgb> zwAg6xXDs_TPCPy?b_FL3%yaI<nC%4!@-fI~!R+`2Bt8xl;sf$nV$kPe@wvok6~bda z!yRD9(WoM3pm8lB>Xbf1d)SNL%%si%7@HFhGmf7}-~(h}Amp`x;dYWv96n-!LN8hg za#{)*J_e1|0zDh&T?S*{f>!qmph|S(&?OcrT^#>t(8DD_ui(Y+W?=-vMTQUA7`O~r zSb!5uqi?2mypXAeY2}#69!&|c7MagH8s<yrrf4|#B}$LeGQe@MG}2;AuC|Z7fEb(M zJZB3=#A(fa6BVxS`Zmjr&KHX?s3<v{4Alx_E+$GBk}y7!gt5n{9sfd=OrOsY!xu&D zdg;E|wK`ze??Qq_kU&=U&rh9sziRXJ{p!s7)aLYk>dXh=^8gM(i<u$I$_yIz2T~B) z2yNrsWdJYVjSH$9@aG=*nXX_29R87S0Z-n~TxR&0%RywW@iSM5&z1Q3rUF?2F5s;t z73d%MhtWUq+2|io0T-aZm}#n_wn6!xV5$4n>=O*TVrs4I0o2kO&ua?$frsB3FK9eF zKtMqNg9NyWfVLqUU&2EBC}#-!sHQ2q9|SCg0K=??oHnbe8|3t6th`H^BGc}5v>JTp zUL%+3MazaPfykqwKG2&2c$hu$BqM|3DKaQ7V;mRw*vJcfm8*JBvS3-y*%++gfltLU zotJ)P*jimny3g<@%;V{0hVN&V8|it>PpvRAD~<G3hM!txWL6sxFIr%`oY=Lx%)kN9 zE68&kDcr!Ep_x#=26rVz0mj=WFXtj&zIxxhTpRH6S0F(zE6qOkK{d$=s5GAQ)65#s z`sUEGG)NYl+42kE=WI3b_hF-vtYslCz@#4iY_W)@^D@T860PU_J49?A6&cmbS;ZRd zijXD5MwaT6>YB38VBM@N8w;+YcKaEniCWG}pHbdo(1h4nk5FUT7PS+!%GG-{(KUuo z`%v(=ztk41KnF9ecglDpxz=c3Ye-#djlpDfd$rV64KmHS(nw!xfDY<`t!+g9YT&Or zJ{a8ieY_%E3&OQw{(9iAJN@VnUrJwa1^`FmdIL)I1mq@M+aSGgJqa<<<rmU77=jVY z$`|lTYTTTzaUF*58o0;CpglIU-9eN;D*0;S6|j4f>-Wtov4B^e#S~YUwapr)*O=D5 zGAgX7s!k+Dl_svS9<w`uF?X<v#-d*L9QVcAxNlcOWBH;}VO$^E3mu|J=n@1A2eetr z%-jg0-t&xh@}NHr*ElHg$u*$2fR2mM<l2g9jvd&2pbE$}4_&r8DRGmbB`3E}mbxZm zw-<3HqLElAi^rEizIGk1Y-ph5Os<_=H#s)BesaU)QIi{I=wccThcTR70E^gFm$^Ew zP2dz@=4NBUjci#Tt{|Y=?OJ5Y;zB|Io<(4Fp-e|dHw<uk=9WNfCXXt&+Ex;`8ge)m zy6Wiji$$@sGI^WPej70CZ3Zr3DCye`7e9B1&o1Brdvf{;(9dA7x)VI7=xJZiyT%Nb zy$cPZYZ#vH3AX$<97B6#qDhjd_JXOBd@x@WhRut@pn+^g(=_6fS!UR34rC%^u{Pqh zyZ6m&^#QMKM_#+OOfaou8jN=n@>5g$HODuptZTmk+!yC(o&c?U0R9HyZyO7?$X!<+ zd*kQDzMiR7vNB5+TV?d*2E&hUFlhbCRyt|f1D8fEKYowF`{MT+tOPFW>~~m)26_(O z5uRk;{5WIIP9xYvqsQvWx6;#vrp|0MdT?5lrjwC943MD<!4dm5P5j&Pa$8y>mib&w zOj+WLrSmF?f?SVaI*7Lbe+}2Nao-FVL9T^}z^^!VJuVE}406MX!7qXNjb|IsEAVz+ zGji#TD4up2ftM}$@%s#(LsYRNAjxTy8dM;|M-mPZsUg{Cq{8X|!kyOxT3r=MhuE(g z4vXJ!aP(6eKxa=rqJrM{2<|WfWeytS28KI)4#DALr{TP5U~EjbQ@GwV06-T+U0*q# z+(_dI3_QtAfr`=4lzjmi=_b-K#)FQLS8XYqS7&;v&9a_4^D)rgvX7z4aWfkQD#rqv zr@74-Kq=OmeZYVp7#N(ljTUDm2!O~KdB<>m;=F4(zj59(oWC2+`-by@LFZDOh0OWT zm~Li2WFF3#<b_%CA&Wl@%Fu@lon(r9$TFM7?8auJ-19-<`5<|sHUoYS8KBXmA1e3S zLS9>pJV9HH>`o?}4;$InSbm0-{ebeyJOWar@o1>(NJfAZMiJqYgz!l~_#_{E5)ZzR z4t^*cZecnY0h`GP*dJ|>YN4X<Tcrlx91xpEffu@=7krVnGPv5Ih#>DOh4}lR>Q_h0 z8;^?VhJgaO9|Ivpdq8!q{y{Knbt5qMp)7eLsJD`&59+L9-&2aj74CARP|pZHDDj~{ zw=z7}b~hCWhDk48WVj#B`N)Wluc_gxJs3{V_gL+*xXVO|`-T*MiLtJ6AZJ_C4}d83 zaZ(Y6Y@AC}#aN5BumK_yCn{Wn1}IP)7V5Y;FaEknty5~9QtOnO)(b)EN1IynFw)~j zSrt45R$3W%mW8X>w=q0m_Ukg87Lk%tP^r-p2W1Kd=}F<XG~xNUfm_qWW;Edg>IiC3 zeS2$Akmc?FM3!4d%5uwIS#F84TsmTwcQ9Esty4fE#LwiQIt_pbH*o$sXUB5EFtx6s zQIaaQa>jZ)V=B&W3>clb-DQyMQd<d5(a@MhZV*)}>e)2iTyPb!Z{$v}uT1M4R@$$c z_u}tC)5QjY{zjd>@gT^yCH({_UX1z-7_FpWf!+m8ij!jy{0^S?_{5;|9-#j~JW4Vw z@`(Fs-zsf*y^H2Czlvk@2e@Xn&F~uOoZ36AUZX=AZ!%h>$R|Ex0M1}(kO1&Wyuz3W z1uS<{!Op<-BOFtLJ#+Cl7;7M>NQ)^GZ=p*hrtHG<Bk@G+Yy*pc<Ql`s4L0{;$wmqW zIyNv4tr{npGJqu#<bbiz+Gb0G9&Q8JKimc&V))|dsEC6*0=A1C0WHv8_mG|75IV79 z_W`ch)dVYc`}cdTi7w7?&F+n8&F<dMP1Le?qK#yM;d#ndY(%OrngGW-BQAhQ_c1G& zjc66Ezl&NwY+~9^ZAO*itX5L5vgt}tHTTo(HLafPM4N9Diw;VqcVZhpKqPz-JZ4Dg zyNu74#rftm3_8s~9i-eG8HZ2qTL~K#C}BrIf(Og={f9_wE+DZvs<f0LX8(6F68chy z>d}I-CJqPC<o_rf2=qdH50~&n@DbsOV8Q?b_9?WgJ~c8=!#DGck@%E>WZ%UEumFU? zg3bXv0lZn90LHogWn!*B?`L;oxwbH_nb!9rv4ktw<#q>{X$6o(V4RUCa#bG$4nQPv zaH|f=93VoN9bk0{`)Dgufk}@DcJa}HJ)BRoPY%Z#&tGU;HZPwM_3Ua~9C(;%K+$uI zX7lrz-7M;B)aB8pkmyuJKh|5=gd~PybFm#^un|^2?QVKp_izU^;0~l*Z8Hh2em{(e zBg8<V92(4fWuZZhK5ZmEW(pG7*&hTFMZ$@6d9Dhw5rSO>luHG-Z*9;=pHeIq%GM|W zc_IA?*3ly+Zv6zg^-*HZ7Mh6L_4z9xk3}5$?7lg&G2qBw;Z|o>T3q%Rt}f%!jtA1_ zMC?31Q<zmXHJU@AIxjO=q9R~}lEEU0J^uwH#GH(q{`W=5SK$9iqr+9!Jy`n3%WRZ> z=%<P@%Gqsr*LI7W3p{6!acy@S-rs>?UrBB^ylLAF);*~nME7A%5u#4QBdZXz%Y;<* zqtN?IvkXJGNf-vfL{pTiWRsVA-dNb)gm2Y8!DOZ=%`<lxsTU0Jj=yNI^bTX@^9a~1 zmj=fU0}^ke?3eObEt5>}a^{%$zESceW7<oGbXe>oNkZRq%*IzGDb|bUt)b$~AiNt4 zfGWI)0irC_*DUT1wjUxq*Ict0_aDWsDaAi5hIa=*Xv2{L@405<fl+RlOL^Wfgd%rD zFyxec*>KJ`r@d^j!(ul9?(ZXR@S7L-9Un#S2W(!jT951V=LQgq*5^5`&vS!~zq?rE zlffP;7Qq$6J0^7^um1HR<isbLtSd^dd~o;R!7%zbtQ$<b?txZNQlSVJn2mpCQtVej z{Q+o|X!hICZ@$_1uMp)roGEh_n7QtO*c68D3(0*bxfkl_9!u`I<X<KH$z6oBHV8@3 zO1k@FM`N*HF@jv|So{@(cMm3a8in{ygVp14f({jT=z&Oz^%ZiE&VyF(?)PkE^nFlL z6<G)h5W5OGMhd!r{8fWtK1+~Bpc&ogM&;<xoFyQ#gX;V-RA+YxvRE4))(Al!`wD=U zgrFRo1mMyTRB*qvb7=^wQCn!#7Mh`rpH(bs&kYr!=06%L%Ee+`u{ge11YcT;6O;v1 z)t@(1#Kyl&G(IlrK1J+&A;Y~v{aE!E8;z%xnj`s|G3_-&@aG45c|&<^#F}36bz|D= z2A!e#tjOs1s)6Tov6e?bUw=c9XuGmR+tW;z73B^#9a<3n1`tQiY`lDA@_L8yQS5iv z=5H9&-hgh`Umo)kLC5s6*kLi!ZyKM4^Ycq_t|-MaQ3|M`XF%tMLhysT2Sh&@bXbRi zh+a1u>&dbQF6#l6IlzWNyN$-bl<=d^Y-7!&dLxh&%gr?n|5nz|aXVQ7Te@d3qUkM^ zSJU1C=H3D0jl&x2gfLhcbo^QXYhawd%FGpV@fy~K?BYSr!1RRBBi8AU5N;=g+XX_T zVyDq~946UGNsPUcplq|Gut3)#7#09TdHrKx+%m5Zm~*G$Q!flCToq6V3=TE^HVWNm ziA!(fv4N6kgg&!o5>9*^7J6Jd+~ab6O+#7xwY0@vC`*6l@aR|S!#uA39E7cHu?x!( zUi!HRudGbp+!p&c93Z|+!m}T`y;rtfsyh<E<49n5``9kU#&0MV<+p~4UnmyOC>A#e z4xCr&N6%61-4pds(kGMe7}MS{q&748t}*Rha)`bHj`xgd@1Y}Txr%n9sU{Jjn+BV| z8`J&{?l!zzgi4W%N^vxuN()PYWx60L#W-SpFA#cRnG`CM0%e+AEGnsD@mIy-ABx4l z7K;E&(sq;x+H29Z1rzc3aWfqpZtiNv)57>s#YYn#U3?7jF~!FcpDOXG7M~jNsSWNy zNYY8@cE)-T0u2!}gW(=?JHDTZ{Ei=BBFEzgnMiy56HH`x{5B@2IQ~f{=s5l<CP+B` zX(os`{uw67IR05C2s!>aCP+D@=HzckZBp&ah6EZau#3?wK|7hv(hCM&lmLxqHA~wK zNokgL7<l#>nxv{(g2t$BmY|)rW(k^8Z<au=)ig`b8xpUP-ZCT=+%!-7qKfAZ2PO_q z>`-8w)|z`d^obn?$R{=S3l816VLSBi)R^@R3HWB-H^iBQK^&sYq_28~%$o)t9PFlf zNrUbodez9${so+^RB1`eRYpT!2Sxy`o6aZ3&Ovk^7>k^B#;E_IO&=y$sTS^4F<r|w z4+KIyR|o9flR7kvhP$Z5{4GGBCpAn3&hv4?bL8wXOvf+~_Bo&hi8;bD>#qP~$1+Ud zQ6#3<%(XcS4B+^khKC{ubu%%?EY2NbSWs|aU7E)lj2+H!XF&WzgY^vfzz=n;c&Kzf zbbg#XILwEbYXWNKn?#L|*~i`l9zTtaqdM22f9z=iTu;Db0=R*IjRIItz)b?Uk$_dG zZp1$_B;3!VIyciPZo`f(!((5d*L)0G3Bt<*H|6|CAh5#(MangUo{1{Rg(1jD1zD&E zASV@MZWt<)3bHT+m8h?()K^u*9RDB1q6)(2*kZA*Se#CJA$S$=ycIS7qeGxTLAB(d zrm1$@Osv}2zXKmE0>W-75r&l9S|SW7xqwB4Atkq!2pcXn%<-#1YJ7K3@ykQS9}X3J zi^bI_HFi|aZoe>mwRB8Vb_gwy7nua|1zoRV6mDUZ=99)|_Xn@nXrDrTe(KDAwK?6d z&U{>LO+SwF-LF#!m}#j4G7#3-2y*a%76?lnkpHFxQBw!B5(J@8?{8F6^ClQxiuxtG zx9E0L+-Q=|oW+~h2)8HhHUSTut!ZvUr-z5<0o7X!_hQqYy4j`h**tRw1ip<@U)_%o z-(i*`^U|}>zI%rVA#-yUPSm{{Z7ldCnDyVUDSH4!e2;wt3V01j-I-6S&JH#Eq&jl| zEZg*eI`av2vXOm4o%xh%e>MA*I&+(9f5ZN!{jc`7>~Gs~`vkkqKGANszhh6cziWTb zPT1eKe_;Qc{X_dl_H=uO{bTzi`zQ8K?X>OM9rnrgFYJu{OFL`-%Ko+e8~YUdxAyPs z|FC~=|EK*2`;YdicBg%s{U`g+_FwGN?Wy(`?IY|j*+<$(*+<)7wvVyDVjpf#nQ?q} z8#c?|!F*Lz+*ooE$MwJ&a`qy;@i2KFPn<`4vEK)aPf@>5i&dbN_1n^^1F?hA-kQh# z%r3EJKj@`c=2fG)5dYNRxt@N1!Knj2M8I`=FxF<y<1?h}Jf6ZYD#3Vw=L4qbih40r zSOM&24W-?u`l*BdsU1q}Pl*2_o;sg<U_^WbR^~1vc|M=ip=QqK3s91|TKasBQ!)?- zVnR}oET~BNg&dyCVrv>45K{|yVgZ+Co)3k~QbZ^u;6eusR)LF?%T*Sfiqj8(V00JF z6@19Jtf&V;TPy8~)TQ9zpxp+;HRU}<@&fMTeT5M3Bc>RNde!ifc$q!Msd%&jVneA^ zl51h9RH(YJP#P7AX5+C?x}l9!DD}TpC>08Y2RBE9tpjxlqyWJm6W80o^@yWZk8maz z@%SPx_4EhrkL~mc8vW`wfJKJ4Vo1TvbMSl4XHx>%?xMZ~0wXz>$LG>5kDoFXs`zXU zq!40Ulnj}wAFDC-go=-}3(IRBr?Y5YYMV-VLCgt7w#w!!!8JU@mRH%z3L*vLy#w)- zm8*k@Sa4Q58AooB0^`_qfQnLZOmPpS(4rKm#(Aly)G#%#9al<?@$Ij#8Y$|9ya9$j zsG=0ql9HP=02SpM+@97L!&n0pE384Nq}|c7;!q%9_HW9bjUju=W}=3e!mX-<XeR2% zC-Qu9y`1;j*ULP+1()Tvgj)xTYz)NvdVZ={NxTKGrx1G^ui>r1{>Iyk7H5NLOSHey zxfP&b$D?gcuj;C%Q@&jsPe@eJrvBFNJ;d->+?hN)Cs5qi4Az(7|4HM*8LWwrsGFB2 zcxUlZifJvA%Qs%$W0q0a5>Qy8F5HVb-OOIaz2;HDR`yJnna^CsX+u`x3Xa<euHu<9 z&FmUZPC%RKHnW!qC^O5<E)ATs&FrOtv&YP?2sUz39NM$FH1ffXoZZ561y2FI0dYe2 zIS?0JvP+;5233kk0r5eVWtVeY6w0?ksMqi<6bxsXxG??|;mph-sEW?d5SYD;lk02> zXb6w%kPl^jC1lg+wKuZtHAwa~oR<6IeO#*l1}@HA!!zf~bTfosNZi4AtX25p34=oI zC_2X;!W6ETqBe-AdAiXpelbLtD?@!=PUFCAj&sw`i6f2uxDAl1=^T?b?~Aid1dr@R z8~W=jyfSl5T;ZP^?&wdi=5!`A496uIH(ZhdHpC76|ArNJuGu{5L{M^O8|cOj{R5t8 zore8U%cSl6Ua7s(-6qcR`LvsV1qU$Sl3omrx*9|{Zsu3y`X$k6&mNB3XxHORdVi}Z z<auUuBV7i-(kppvF;)}#(&v1$7Y}ulEAYQ=KycJNQ4`f+vFAa7K`pNi5X>_>=?FFJ z1hlyA1CQM0Gb{PB3A<P=ox=jhG6>B3wD}Ns%&+7aYkntP@KW+X6hQo0JiJLGpnJ_? z=)H5ONRx!GmlkyTX(#}7mc7~>5S`7-_8ga&4KvJVF6Cm+@i{!2jbDlC(Oj-trsW04 zPrzhq4KIEwZA4zo8&YJ?7}x@M_Vk-&XHV&FBhhwZjU5cAb4`5nw=>*dj5j6P;;zK< zZRw^#cea{_5nCJ7aH&N))WAi%`6&oDQJsRz1ewb~w5$_z&UmNOWgPdyh)X$f!T-wO zmXla*=(8g50sHG8pv<LK!eilJftk3W#nrAu!GMly>;G0P<}*t;-BaKta$KCr^AcBc zhD}2UFz~zv*BeZ0l_sv!s-D<UGqIy~Vn<y*vz&Jh*wvkbpe5i%0Cd!f$|_E(mz~C- zEdtm8E;T?*G(bJ=<96%a7%q`jdv0}9<29nZOUv$gacexfc_D{8^)IPdi#nn{R(}&T zLA?=+og@~yYpHQPw>G{M@zsrhuWq0C+}fbxYSBeS8hw4Sn7Ug=6!Cry_j9Au)n{-z zc6;(9azH-=#ekev@&dE{0#oX`z?{@k<<Tt#6XtQ;CMPz`_2CUJg<d2gG2f*6a_+|k zL$tE1oK0q8fk`_;#7!>{E4<k%bH0F|DZv6yp>*3-guCP?j&gi9(XOD>-xsBTZEsqE zP<5|NpZ+Z3N`C%`B>Vq8qMv8~9iq=4v3C8>CHMRhYZy<3a25C61Q*aL;+RuK_ZUFp zd|GQAEbk~Gmxh}<!=@LB*YL_yInbYeNBv0`{mGyOq-e<*)b6N1sUz^eiWqS}Bj$ka z9RBRpw+y|0wOEkG+lnI@rp3NT9ZdV5W`Ny~I-BNdK?RLjL3YsjJlZ@ilHr2$Jo2P5 z1!NZ;7F*6~y%@uznECLIS4eUJkB<6+=PEJ)=2!SFBfkZN`dC`hy^4R%b^}NjoPz^h zh|a-XgVORs9<K9VXzp{JcYL6j9)|}ycuBjyh^vNGwH#CcXR|q2a2_;$ymsGt$js$> z20dq??q?R7@#Q++Y2!r~hvDYz=sq*8;A}N9TF!ac%+Z$0obw1Fuw@*2zD)ZSz}wY( z?PBdAl2i!6_{WCiJc_A8pUg#+67K{O`#Hzni+gcTL>+$->ETnLsEhVh)Mpv~opeB` ziLb>fT3lA*CA_q<{g_EB+ZS_O**^XsU)c`#Lq+EYg4^vb;o(a6V)L_Bx|>4kuEp$^ zmQi;pM{8#?QFp?LpbsxGaS=OpdQ19ZGoRduw$H}BY@f^cKVti|R@gqRBiKHdm)Slo zf$eieWcyrVewOWXU|1$x<+_sN92ivc%xBcr^fNgBk^@eY6|fzq+R~|XL4qDlHcYV+ zOHJla9*v*Ccd&pWC~>LD3Z!MAWAYe`P=KCs8N_>9^(T)lB%W5~APHTLui|tvXwo8* zm$}@;$0snm=s1)bzry6F;ts@Qt*cGmZ<TGV0MWiWUds^wMqoS48;?W9{v}8|F-m*o zUTIy;-tVftQa@TOZd6?ri68yjV$oF+Ia4B{_XjspjqY*H=)~Q4y&NauHv|=A;E#zv zR_YnGeij(k&!{a>l{24JXGrO1RSFkYgBe7(V#ks+w%Mu%+!auptesK?WC5k%cNMs< zhChgm8?j2B;Ne;ePNjX##^}31>v&d09W~vHyP!|Sz0ec7_~=Er`}EWfr9eWcfD=C? z@v+ci0!Re~4%>%rxAh8%zA!-ZTs6JNm{LuILT%!O9LZYD$ME9IOzG-mEi?eovMSSS z5@kjixmcyR->G->gT*3-Lb<9-!7w5Ka?dp|b3AIpD`r%e@o<`9xhbX@4r<D-!;ZI{ zm$sO!pxTE%MqAa*<oNdSQrCDop@R#ws86bRbZ3Q0GdAJTgdZr98Joo=(@(x8(<aju zW}*ExnJ0P~!{v_HVG0I583wjLDKiX<)sz26k^e`5|0go~5Ao1{hztMc$^YXh{>LId z<*|vv3SpS57TOE490jkW;8{wTbe1Ae&LjVKBb4t3B%DV6TTA8HT2`K)P@q=|^vVK{ zqrmN@!0ly$2T|Z-rNGC^0yzZ^lmZ9J0$-vEez_F*a#`Sm6u6@lxT7p^4FwLB0*A^1 z=TYE8rND>E0{@c&pC|=BQ5N_k3hYv%z%Hc}_+<**TuQmQEaf-~+*u0TSr)hlH>@Og zM-8$&Xpoo4|HV?G7t6~JfwBAWrZWn}Q)Da54$IjFN@uW&GJ{FZlOf1rCjj_V2=dr5 z06uI4pd334z^B7dB{mMgXF^cLJvGj=A*jW6OOo?k2<o_|<!lc@BlawS&xfFiYg*2Z z5VT_V0Qf=(R>iId@Wl|Uj`acfQV7<>76SNk2-e1C1Nce^*2Ovj+!=zgSO!mXgkU}G zw|OlD8)&iX^$;9IOH6NsU?VLty%~a|X^H8r5F8UNF^#1qrm==KzGtX7R^MH;cNdS_ zUHsAR;wig}XYVdvwY#`scX4oc@%`P!`aQ)j>?wX{Pcgfv*t4hDx2L#aPx0wJ#ZUGW z#|#y}G*tZlP%%4H1VqsRB-DjQFaNaI+F|&G^wso^!^%prc2y+SRt93NxhZ=cinUc` zVr?~-!M#GE-PX?AX6j`%v4VCHgJDtzykn-`kAQd0)UF74&rI!zfWMomVg$TzrrwQ! z56sk_2>8%UovDSuM`r4!DCA=^^;!gcVx~TdfL&(llL+|KOr0Ge*lniXi$eC8si6oM zGE?1Aw4#}MJqqcvQXfaanO3SRiq>tVc19tytkmo%WVV%>6#+d~YEA^4Wu^WerI}-; z&WS?Kwo>mzA?H}Bw<2J!mFkJ2ool5&j6%+{QoAGId@FTU6m6cBdOixdz)F1@0rRcY zs}ZokO1%;R7h0(oBVeJGdOHFxvQi&Jz#=QPJpvY6sTU$(iIsYT06c`qxhgB502aJH zS6SwxEwhH>oy23%54=G0@9cL~L+$hWDEJx*9tXkmhlSg`S43IM6^Md2(a`;fr8qXL zt^!p8{5*lKFdy9uCw2By>V+cxwOm!j*;z_oJqom!T`I)rqus+`lk8HJw&eTd<tn{m zPjL|RzKXMV>xjzzMkqv3jO!@E0YQX?Q4EY=vz&-@Jw^J)hy|%B6+{#T0VqTzCLUnA zVT2;>sVLGOEYiCp7U^9o()y_4_byUUs2eFtQ`k0@rSih+y@_JQM=Vucd8x{pXn4V} zXhCb=JVMbvswmn=ShUwhEZS>Sv|B0~V|dYm!re-dnn!H0idMUgBAz&6`RXgnx9^s# zXuaD<DB@5>5r?pd?~Pc*_o#?>5Q>AaY3PbPC748lIDK@I6=#0%xD3U^s@OXko^Yi| zcX0(G9f-&v0PlXINYsZBS<ujTk3e>pR!(-824sIcBH14k*&Db9C=SO<rD*-v@5B)j zX|uU)QA706VNO3+m{QZ%+lePgDBCYkws?IKPTt~UQiUnCeInt9f>KB~U$hz~yO(Rw zY`+v)(dIu)uTc875t?$mXv&b3GCJz|dZ|&T#G?FA#Po>_!$#dWLhZa&(Wq}>qrNj@ z?Yu*^b01eVI$}wUYO@ON_4<0_SD9g3+)q&t7VRoxE*u_J#N0$Ne>fuhj)gJ@O%6E9 zb0|c<m7Gj5qOS442xXpA!4Y$iBW7tMm3fwiW!}s+Q&z5{;~08*Qvsm{<Z2jrN-}6R zSF5L6a;F%5IQyn9o>Y%ZMy^U1kiDm~wRo_T?zYuzyp)+Ph{kJ~gDKW!bg#0yEWXOb z)7?6y6zv^lCmLRKmp+_w3KRFa+A``i^QrI;auq1Q>i=WPf%iX`-ar;S#C0He&)x(J zwg_qFWi(d_ny1wF{XZhx1FkzxlBP8L_i7&5u2k}WCgl`8tcERI*Jb6K5!2$<>$A$4 z7Wd4=&(gHE<nEC=D+TXX@l5nqE(0njKh;(1RVdXcygOWQfChwVh6ZBag`SqfPcXne z%oRv9b?-zAqf}*ya;1Uj5lZ;yiiA<?1u3C=4-Lj7Og*Ks4}-9IFf1UWa+E5|bEN3G z(zx{~iPWz}H8&b+?iID7=HjoYYFqNvk?Sq~Djn;8j0S<RAiI*=@dn>sTf)1}x2q5z zv&oahn#U-ga(Ojn^fFTTri{Vi6lsEN(6dQ+PN@f=w|u;xGL}g9rtDW9ZU4QZjiYE3 zIDW6d1A^jvB<+rmijVgSd_W}?1^7T!fXg5%6e}oyR5D~g_!AuHk03U;R}2-~aj5uU z#G&E?8Y&7L_v*#O^(z}RXQ>su0P=Wb*R2lhx`UgtH=uIfUuM@0fJ&{X-=>E`=&0b0 zy!}QlW!Lk(pS^`g@12Ye-a9!EqGi_ef>+2~ZKkg_@qLpQ#rr0JZII)pLtKV{I3C1k zrn^xCpe>)dg*T6)%jItgHXEk?<Xmcb^gwJ)W)0p0`vjNe;392E=0hHUcpJy<SCh&R zH|{Ucl;OJ-@U^zZ=r$WkdXk6R4zCHye@IjIAi(t$FI~L(G}mQSvmw$!IMIE%<;*pl zD=g<q%gI^O<@SSE*Fkvm7ftU!gBTUO$9^qgJP7`ubZApk_BITCwhZlayav!79ir{E z@XCRl<@8z3a@|=5zm~JYa#mW-RhF~Lnyyu5v^~n`+EPX~WOO@*KF`COtuEAB(-&$p zm&0edHuGE!FO$U6^E>zf`^n1VW_V8_Zoq~=qq(cOqYfALV$EF#chpbpXuvtjQTWpc z;iGXb*5+#`p|n4&U`v^GxTj`K10ClLuOwE2fHCXw>=@l8FD~N_0$de-aF2+qE(l&g zK<~_TCO-Rwn`=axQ6kOW(Q!lDXgmvYaDm(q9)C^4J1EW6at+T^CErvNZ>m!2LT$0w z?3dJ1tF^es7UOBEWUrR!)u1yNu9>;sq>Dmy$`xl^$gi`r!xG^)j1YbUhDVoZS3C2K z7H759;^dST=NkCC4*u4_-<9yU8vbrn@al;cX9fJNg1_tGuUBcAUJE4G1h)xw)IwJp z<C@(aV`Fs;N<P*dgWJ*F8drw`)_*EVsreeY8-7u8<E8dk*#VeYZ^mylapicFsKmp? zRm-EO7Be@Q&H@Em%$cWzUN@W5c^Vr<RIWP;Cxo^@JIsYl77DDmZ^|u!L7wqjOk9*} z6d8R<T$<PzWput00_#oZ0wqkGxpi2EjhNv^$PoG~P^y<G6xmShBgT%Ye{HB}j5Wqk zHPvD@eO)T6rs{~&i2@H2S}U@=%}n2B4)eR+Oy5puZ!Z#BXx2N-Ma~7R@c?S$JIwf< zrUX2nTB^CDAq94gm>Gm2kks5dU@5%R6XH1MSV1IFA9%_zY}y#nT#Yn;wVdXdt0yM~ zbY<=eDa_m*xo(eKx0&sel%OK+6ci^9#*q>WeUau?P1vdTrOwrs<s!(n@Ha=EK=cN) zWsO_cez4kg@T87<H<rF!aqGeV9y5J~aNTRBFBGngX8JPWy3b5sC0zHL=@r7Y$xL4? zTo0J(ONDE*nO-hj51Q$VgzF(QeTi^wG1FHn$?G(?K9d8V3}&5Kgg;A^#C4jIS`0zd z$1S=s2ahwjRk&dYp8{U2iF<V#l9y|4L*jCcC2v5-4O%1<=!%cg=M5E6u)o0dT3LBr ziKH8}iiH9V@3sOlR`dTaF%}6id<x*76=3=Z0!$YI%n;!>j1W!&47*nu%j*%#*C5N+ z2yV8B<#oaG7O=cE0?S*Xq_5*zTRBsj6--HxYm_miE|}5^n6j!Fd9n(;1y7<&@Fcnf zPohikB)SAAqDychx&$YpOK@UUOS)IUTg~)NPOgW|^lD<dDrym<#B}CxrmIG#s}7m2 zdT*w)io|p;a>Z24Z8E)AuTI6+Y&AT*bt;_$>%qfU!``lU6+Fk)if6b)Zl~hmElLqP z1Eq%s-oId{kgV0%X_Ff8U^zXK8Tn@(G1oMlz$ALDvgG@yxh{$=m-#<tu5H*KV*_z` zu}@i0-o#6O?uRA>%5+yd5J*m9D877Y3KAMt0PmG2x{rK+Le*9Bt01ooc+gCECLQuY z!-O8bH|ROvWUdS;zT^udW+JD_O@>iHAyNVz6~y3P-oIXF9)@oPYxtw$y+cQddxs!U zYnT8OUaeFliocDI-8SO6s~gB0TNb|yPW=Tt92@Nv{4+*(4i(|6wy_UcFJHl%X6vSJ zN~$ImOo>-ZkDC&!mikReu8{^zNw1X#O-ZSdo-id%leU?X$)qPu$*7fHqPeqQh*ftb z5Ho`W&@piz_-P&W$2H=fZXj9s72<Dcd@=5&EC>(c+VE@zGT}YNVsfRHx<T^_@s*kk z{P;3QHThpCw*hK2?6@T1TE&4AeB2kx?qk7Qg5xE`hofIE7IBltEC2fhuPYI}^B*I4 z9T2>39|XVpzfbUz62Y(iV+1b&f|u-r;Mcig$;y?%P7JkKEcc&^52u71Gg_e_6}Ty8 z>?u6=0s;(0?P+3TcnCtL^Vc-oD0WT&i$j=qva5cB9o7Q%a2YUs>Fp56DmGOLWQ|Cj zHw!}L5M3VcY}bSj)d}<uTsTDBqaVOqd?}OKZ-+fBM1uY6RC*Q)A`GJehSB6AI&c(U zq;V)Dgqb2NJX{mh)Bd=f1<$T=87d0z_Y@V?)1kG(V7XZHa0EJdu+SPmM`19;E24Ui z5m#qJAjC{+1=KjSphRP^W)K#lM7U9Ygn3hY-;JA4I`B4|%N5*D{o`Oi^?@R5k<GX$ z8&_+jyBu^p!d`*sX}rF#em|TZE6X(iFk9SY-50z@1ocOE;RnMHl>AMOm+75`1@9NW zr7M>D@x==>s0Gwu#GG5;k$K8oOlO-e*St84UpTD@{oTX<9z>ycNztzbJh^vo|3>Bo zHNR2}Yi|LM098P$zst(_{8UWQ4209$ZwS~d@wCY?&fC-xz98aIdkpx^;i1&bD&;hx zSoxp?r27=VB@H$ZBzuP|knH>WOtv^k=7XjPN&QTp(wj>!Qov(Lna2{v$0`NHtpVb9 zxuz=SLaX$~{J}Wrw&HL*5r^A}I801L89xz++=+BJyGNYOt`=vrtMN$mL_7{nqqZ12 z7*Q!+o<>S*NijnR)LK%`h+@o21_CKyky3Y-0wZn^OW+4*uhMWRljw?;AaIEiB<Q8@ zPQHx3D;1p9>qL@+@J^(BSdvaG$X<Q{Y8(T@@eBvc_%a2MsDebb?mQgTDba;kiiYDP zDS+T3sJ&E4d}?rf_$NQr$B}z59JmQT4%t@*L$-`QlLmqA1^6Jel3uCcDUhHnLDA|= z%%kPEGIk;ITdm+_op`1sAZx#uhKjK_d02H<LN$QKZVIIaVbF|YA+%HpJg+<Lw@O&` zOO!e*$OeBzlm$xtqfvRUs3`9hrSe`}Szb0mdDn#HwWUEygK|QN{X}R`O5s3asN@<g zKx)O;XuOjS*kfGu0d@i%9Z%eoiasWwBMJmdup7@bV2tkcT_zr?$%#WXQGr_03+S!# zhHIEqNy(R41tpcJ1%sa=<1k2J)sPwRM65vBRcD?t8-9t-5+C=LcyJ#)W=l3J<1c}i zu-#<_SzybO^ENYnyNR*zlKBy{!Biou2T9TEzs2el?-E6nHZ_33D&7JMLCIB73!!gf zl_q07ZyYLyY->yDrOH3qL-=R)kXX>t&`Xwvy<}<FOXOfU4>G(AGdwNI@v>5m%PVt~ zN62w?S)Y^_x3#n>cW{sQqY}GDxmVewfa4kC@5V<4I36=!GG8^pQS+=RRaHyRftFh% zZ8xQw8q{MgCOr>Yt|sjOEw@H`0d!i@cv+3~B51+~OD~yHb+z;|Xuq2D3h2Ex(oWEU zYozx$-X{L7{M4DtwHBO*T&mH;NO~zKtQ^hUnHL8>7i%*Y2F``r%=v+HzLuJ=U_3lr zP2<u2Flba7%1brRhtUZSSJNJlNyB3#=PLMgQu|y*?wYG~sHux-uP7z?fXkpaPTVWW zJV??$PvKqjln$K0!o$9l;KO|+Sc3`HK!P=xV16mVN3=WYSelY;!716rnmC`gSev<8 zOJ1$DU#&^$)oA3?_1LL9fTJ|LAUk;(d^9Zj$AsgE(zNbktr^o_1pO|3(eR}A>KrgP z15QZ#2@SPB0D3QmVN*<#9ZR;HfN|Oo*c#v66&_w$z^x{43%vngZ77mF1YxY*#Z`qK zF(||Q^}R8VFJUf}LK3f<GVTzLg20306ouy(M7@1VQ`s>*ORptgGvlwBSX4aH%kf5* zgY#2^`e_|V&eP)aH0iVfpIYQvEpaVX+a9h$%m;8Sa{#2R7u^fZI{UpTS~WPQXy8np ztBtyXRGa2e7tmzMK<sZqz4FC;2L2ZS7}&iKzt3CNn|^fU7>|`=JQl{tyiWCV2<5VO zlGjT~UN`Z=#L!y!OR+ffT+I`6_d}#@eSIXegN%+bC7Qt!@Wd7W<+jIj;*$R&=en$% zF7Pz>3`VGAJQ`k_1|y{ZIt=L)+N`dIUO0K6k-3Arrw{BIgi$Aa(&;sE&0{$QHw0RJ zm#hHu{CHSV#FGi)YDLKUuwhw`#$6y}YWO8fBiA`tp25S#B0h<ErmSm<`3T+G)1gcq zHUpCsD%}c2Os-S~lPlnnYF>}WDFcW;xv~$R!AbIdg(fl-n#fRv?A@R__gFzp=U#O2 z_zqoiHd-i;(V5twX-$S2J1S5@0s`tMNVGb4UzGZObjdkqla&k6Kw9Ml_T?ErZF<9$ z-vpuCB)w(g1w3zq7(Q6)mT}om%TIN-;9HWjsCLg1Hq!w7MORInj7JQdiw!^LY_)Q^ z9`qd~o5^z?wn{Zy5L5X%=MgJ6%=d2aU8rN)!h%x=3#Cw;|Gc?aEN_hk!q}ZHS1v?8 z8ZJck$l*fdJHbNSgr@8rbo5p(Ekw?dRTxHoO1pGyj)#MstLQ1sWQ~W{h@m%Kpzb_o zA(JF)Al$=~qo3;NO?Qpajky}l`cN==1_&hSY`J3N>p2l!?*??WG-dBZy5^SAbuRQq zS@~XmD$Ncj*D9XhzE<IFX7Uhl9m3mUU%+$HTMb;!9CY$lA=oP&?(k)_!<QNI_(zLH zc3-jhDBc}&UL`H(N3^^b(9+tJy$flXCznqDUm)Yv&aOE8?`QAk`IhY8P561=%zN2; zcz%kW_4Ryw13p2WFW6QtaX)AIl$H6wOx?%nK?VRmG*kCR!1a3SKSTEudg^!RhOFkx z_!Q=T^l0DR+*!!5c(xkfi0=wxb1#r}h;X!cgp$ttL$qZUM#BT-Wp6upc4P3AL)k&Y z3uQ$$t^bIwgB>j3J=+C(>!nb6S2gtQ5dT#Xe!MDH39gD&=tU7%X-R)%f)0Qe#TLXp zu?4*PTD-qd5U;Z=l<^sbxOnl&*HeFT`Yl4;N2r}OdM=;2hv%GY^c<~9pQ)DxV^Cri zR91M4@I^8{gYz9khd#-V&GwH?sq14CdPhL>igKF$DGEfZxZJ%p{fU`Rj`7>auryuf zzDUN)gv}5q9y=qS2JjL0z6;%gA}^7{LwmdSeQ0lDaH8rEJfkKDw+hXC02PY|w3%D9 z2|M-l7H#JJn)8U3zF(Vpi#Fl*y7VnL99<%#b~g?bfP1uN>W=q<@}WrphL2n?r5-XC zNVo&EwD=tw?>clawTTxJcT)eql)_u^y?|E@ykNa&0Al*7>y*s9+TPJGlW{A}QTeF_ z=NuDH20HUiN`+?y@zyORhaV4LEr4XMCJ=$JLB73QR-kzQ2a2~9i?>yqc~78<-J{Li ztR)}R+8+c}Y_pbv|90k6Gqs8IFa*uaZZmav1nQX;dg|5)oRHaLrtTte=IvT?2zr!e z9}yoidHQz3cE6UoMN1S-B;yLIHqc*yLTJSYkkZV}pn9MIyor06MS9|9D(;mOv#B!X zMvcx!fitm@w47Xdtm3|6_5MS#`ed9&1xXt{qhUZWRbuBr@=%*Kw;zga0!}&EWqI)~ zi;)jlGMO_iACFq5yDfA(o3->TtKeLur)OK(^?EFZBl9v@He}^-y7}TPtG~JHP*g#h z5e5FJz&+s;zj%Xg3Rsb?Y3RfKS62I3mV}8s=S3?%$6}CHT)DYb!+U?WYT>;<TQ$1( zXRDUlqSfMfd$yIjT}zy8u_SX|vG9VuL14537VU$8(K>KK7^%bsJi2T1P@sk03^<e_ zWxlIoa7bX|SunWy<g*zVUU2C0O4+?4lHKQ6LUte4l--0}u(E6%xeD(bRnHYq=6Q*^ zmgG4(Gk9wQ3fmjGK{90v9Dldb?+*GMpx=k-_d)u7o_?R9-{*L~HM@m-&Q41lrWH>@ z)nmOq&HX~=Tr2T3XQij0UZ!Kpt7N>XDuXHn9_+>yu|ZV-Nj-(W{Gx#u6Rr^}sR6vu zTvPu{u}IMh5Z@~di&iL)2CBZza`E#lyy{{#)qz8|0|GyIJp(jB=JyQxpqK!P1XKV{ zJtK*YFM*l?iLRD$PZ2(+?7U`$bp)&{hIQg!p;AWU{2H|0)T1%QCBb_U13s+@;~mE+ zRUhMd-<F_Kl3TfNGjPPW!kBdv$5y+BsQgHQ2Hna%4Cv{nD}eKUdOMH(oTDr81ZS}y zkTd-NkDVYq9|h0j(3$kPANN7z7kKRO3Xg4^j&7AacJP>4;W5BtA5(6Len9soD-U~^ z$DXe6c#y}oR(L$mW4Bj$Ji}wF1@TYu*p<SS=dne?HOOP<ip(B|%(~DC1D8+3)eE3s zq_^<cuSHak$5MDi>}O2!2A$U<MaN*0^Qln?&V=p4Q&2$|kG+A%t9T(e5r)UO-VDOP z>cbOJ0Yq05I&TM%7P}FkcLGR{t;FMB0Tv^6F+lGIVJ7Zlao!6c3oSb5?*UYWV#9eq zfU0Al@;e^{Pz_#?>U<bLwRoF{^HBiR(fy*I1o_42e$kJEuzGR7Xb{#ADS4wv$r}Yq z-t$AnQBUnDzO<+K&Yt3~Jw<g04`;Ow6^|Jzo;Xze(NOUhL&ejEigSjF7Y`NthKkn= z6>lCY-aAwr94bCf*Ich9j;{krftT_GnghPJ6!}BrdepejqW?PT#plZ94C_H}3Rpj8 zhx|Y+AMnvIk7tH^JUH9~7^`L9h}h>MVr7V)k^XT+{Id{U^glr)mm&HNK1A}VK4`O$ zty_?RL$2N*`M0o-i*n`h|5Yr?eRNm$k;USFk!Zc{pKp}H@Twaa?y+sS$Bq#jr7*k- z_KAp<AsV4k_KApp7NU#(Cy3-SME}nl<$AJFe~dk=sDm)4&$Ht5fcO-|XPfx!5T60@ zc}jfp;xi~d&xwzRJ@E!P+;e(<pbAWC%Ki-k)|Y7lH_AAJc^qxI#r?HD?yo(tw7=FX zWae4;l%|D;-+hGA^DNwG`;^#di{{r&gk(yDgf{6ml#uuZuPos!(GK04D|MG!BHiVJ zfZ)TMvM*v$ZY`tuHkqr6I$qeFUiKy28~ifQ7qYMLysKm{#rU^V)#4lWnM;GqO(06< zCEg3;e_I6Li6uF>UDWx+Lcg4Ip^?J~bWAC#!TA9}PE)oX-_|Lk=Wdznih6*c$JMg4 z84&a;67&`k^aed&BkK^Up6;M1h|T)nTVSD0a}U))@b>t<QHB==8BT7>HsC8VWrp{C zGTy8a)!O}XbcNS?dj5rM;jibX(w&R>%x+Gqtx1=deZ(EMW^qFkUTMCN5&Wrvah&^E z9)!CzT@LT}d_cw*cV>!<LnlI`I=igQLga-}coUw0oKLM$N7I$+Vc0~x;q4*|t*b?# zFOLBg4|Q~Wi-(?1D$+Bhtj*?aHj=xUrV+l2*^C}c)nwk+#S<rVn?l~F=P5_8$4T7~ zn1c}qbWrUU%M!hP)lU<c^zO(OG5_=6FsvW^lUQFG5$i)T<KdkqTjbJH>|15c6we+{ z#EliBI}DNKAi5QL7cACJkF;oE&PU<<U|N(lJ`a{yC^I@MVq_lId+Aa*e21pm!bSeh zLDxWJuC^e!;RndNhMrCX3q%R7m-Fe}W|6i-cdo{Va#kA!XN}?N({Ufk!!nSH4-F;X zhjHM2&N}<^Ui@v24V8zM`jq2-UL`=a*a}doG==&I7*eKnIz8@;91#>&7lj=V<(yVo z&MyxyrylQ>B}h+oU0zTh4^cot2hg{3SV^xAW^o^t@!_5hK?2ooFn2s4wgnzbxvOFB zEttDnmb((<j(K=EgW!uj5aBjE%IprI>pv#TmTBEUtx7LxYh|S!4Cky>+_~Z5u8pbD zEqJA3c4$<UTB%j&9Z#h|95#sCF&+}zF(Nca{3B?fB!x!0e%sY)@*5Cs7KmIt%#xS! z?WKo;hq%L*(n8u}p5GqBx3l$sq}nL=R1BICh;jA!E}aMT53e>9IpUQ{HTJbioQLg& zvl1bd2A{1R-Ws<;)8q39p3KGb=ui@D?f#gJIe1|Pc-@~D;UDm+KY0r}`#nNapfT5{ zUK>c;0(FL&;!$iA6ykX$ybN#`$06*fU<f-DUy*CZwG<HF@eiSoj0O(6L>321&_%a+ z($pU2h@;&7(J1%0jL(J%!UstR*%d;lp;8DHyu>obO0q`~-cP0fep%@csVIGHSm_gg zkxFIn2Mc*$4=N2rb9PItea_i^A(*opg~w{-(#1|sfN5)0&1Ympmmc>zTMis&g^n}j zymJ<J_E^r4HG@xQ+0(@{m#5>EuXJnZ>6wcy+(|GtxG@y)WzLjC^Dn&SbBEZGkWXH( zc<t9KEIUii+g7$q&U=|ltn4nHPrO6doo<t@Dy!;N9(3O7@ES`zd6GIHzDbq34hWvo znk73$nii!8C{5A$R%}9WPyeCxYICY)J#I$wT{Q;{Xp$?l)B*r++<#o$xDR$|k4$fJ zl_Od?5+WBIbHo;D#M22qTAQ$w_xa1f1+7zeGAb=V+8&zhcDkxkFF?cf$nmWzi(hKt zZDodYCi<d??2(t*C--5P(_NJlPo^4qd^yvlXC|>O@nx<vWl&+4XD+kivt^B5i=;=p zAQrx$2_^ZVC<(rA1pH=I{WUl?<Z3{Pt2(o)e5b$)(-kDH{UF|TP=`Jp&mF)}gGH;N zUaX{-T2wX#Ly`yKU3wIGQitiRRq=3C{TMvn008`4qtdMO<(7oA9?2HZHQQToj^-&@ zgLZ5H?X0O81~OZMk<6B8Bzsym##&X+nc{LlyhyXTtED40v7;X02K*T{v7-?g>k6xL zAevrmW;jsdT~>I96^b#NFY6p|u3&(@4}UJjpQZ3K9jULy<)hhEVFDl5#juI%(1Zs8 zS4W+$WlmSiq>fnpRt4*#0h)g_o*NlMuSmFK+|dUjJ#K?L3hLgirB5xsaSP7CH+`9P z#F)|eVvI4y812?UyVSXL)PEPlfCOw&k3&ao=1M@2$yuoR;ER;?0QFiqBoInci?>n> zC;9hwLIjM`w~r`&6a_KY+m?7$bwVEBVl4t+Ot@}Wu~>(1n*yYvKkz0vjWEDO$P)GO zUA9+!cz)s@g}br%CPe~L8z;=;b<lQhV`1$iJS=)x!T#yBbfsz|3?}$!whQAagw@k= zUi+u(g01qZ+qjmxO(PBrb*N}Ofsp;vniKKss_VpNK1x&>vjF{So!GyH*##IO$=ZsX zV{;Iga3ibv2685m5yUj3yiJU1xw=3}!Fm~KItCkf@TMY4qpPp0j8cx@bQ{+V!(ZO` ztA{}K>FlV&yJ<T+s#`m1Xx~@ft*YR>QVm}h=8AQDIN*(WZgu=2g+pq$Y5~NmLd12! zGp1E;m8+})tn&YD?@i$2sIGkB?yg%^t*Vl(#U=^F!6Y5YaT?4dZ{Dn#%#u-v-@NF( z`C`Vy8#(IMP}9kmWHKR!_n4U%gI8?4@5W0@^1fgj8`~Iz0UHb$aCbG53>cfuU>0K* zvl`HM{^wRzSG8J_A)X=0$Iot6-E(i<_1t^UIrrRipi^3jt1w%JLuuh_>B<Gw^PzUj zrBCuozvApmPkN>AbW5L$(i0IYj@4~1?mVD)t=Hn`QSnB&_&yrX_@Z;^RFh4`#_#N_ z@kXDGkB7VdinA|0S=#mG8z1kh@wn(o8?<2#q&09NS3R4YWP&+8s(5A@+k4x%Yw7>! z5uORdkHCl?Q{da$%3V6<5v}=2k$MC?=u=9yUST|k&9W1ApM77Qb(v|jaZjddC3nS# zCZCE9#of^<W^zYtX!8DO!bm=*CvPxut#qn6DxR6{?e{a3yuH$3>)9-Zr+~c*VNg44 z@tpxVd%D6#-|=FvHZnIV?%U8o+)LAyy3}e;X0I`tquXk}DWMcfPBRA$kRj^s)EWb% zgBN$BIjBO05(SFF3m<_}>{^3`m}_OOs|>bmE{&aY*j{JAtoaYv?)x;wb5rWZLigkn z-&3j8#e1Ki79pN^32IDQIH~nU4ku8p(HJ`;)zs>PQZ)rvW)+2K^R?95^*$G6F>x{s zCbg$2HAa*c=;PE$&&RfOC8T+3Dt&|D-Y@2N$x7s52p(oeh%12Aaf{Y=fM9qW8+*+_ zW(;AWg{_Vof#6s-<K%SH-bg(zEuWaO1PP=hDmPK{ny5*N4Mr2FidgObLUu<Sjka%8 zh7N*<K@D^V%y852NdsVfxl2O|jOb9xh<XRKLY6WqNWy_z43qZq_2%l8JO!Rn2B;Or zPS*jqAarwR7zq^}dy_%v>0rq3r_jwnNXOo65V|^qMeK5Ty)jCsk%Iks+%PE6%jDE1 zzHA0eETBOJN;R|=c5{fF-((=zFjI+9vYb6bK@i~7MtZC^u&xxS0>}`igb1?=0kkSK z+@M5J&!S`4XZg(h{M@B^WJe^J#n_2iveCFK2|37fiXbjwF}1O&LyYVoI-)~#I_z!K zVMPQdj~e_c=r%h~rKXM%o~$91t%b>p<ULSAaOzTRade~SN;^+I)0@j|e4VE*%QYSm z3WZi1sl(L!=nt5+!CUIE07HCSiFvkuxe>TB@H`7z{sbd)Nca8IRt@nv9DpUSKO<Ty zta;qM`@?+LBp%)lQFIpXdc38rc}&s6ZF7g1%&BnWP_+*WPn|gps}rzNPS7Vrmii5L z0s!Sy;{y?CoUGc93z)qPd97W<=ypO8)XsX(a_#_JA?Xk~Ub9h!h7J+6J4GVac3A@U zj$c$1N}ur450>er9bHcRSTXTS+=*Xj<H$1<`ZHbW*Xixctk`iL&Jd@7;&+${kY}~H zu;R0DTY6{VE_HW-L2$<ukS4zB59;@@;ALSQ_Y{{`&*<7l)tgPftkQ6ORDnP55<lc{ zvcw$#v1Jup59cUCx<!AzD4T2p(f&q2fcB=MxxLJaKRJ7eQlE&_H7?avss59*SNIU< z+VZz>Yu&h10gLyRVo?TvC0(v3$HzzLo+tF={)&KK@uH9Pbq4;>P%rgTsjd(0x0N_$ zKCI}zy{vcjNt*AE{2fJ$$uZBT+Lc^g3aU@3(-qtpS~QjitNt$QFI|OhXr~P&q2UNR zIg|G<IKpaI;IaxAY}^DYCzxdpg6Nv#=PS{w5q`YPV0KA7mU?IiQGM)%3RHujj!P5N z82C5d{S@i+ZziW2Ig_U6O#P>^rX^5Pk2NmQqj0YqzIH+E&m1B=ZZWb@p&Jrcz8f7f zEIDL?9@}O_Vl(x~b_1UJ-seeEOJvG~IFKMYF%CQ!1vEHQM1wg%gAWun#tzAwuSw1` zfg6lyU;-QOP?a2#CFh$y5U8G-1I+wT@w}<C_ytlAdhuLS3{5RYqL2LfaBJ`L;rHD6 zFc@BT0`p;<P^=2$N$DpARx0X=lV=ULRZ7z_sLzi)CSv1`i54xF*6eFDYZTnK-eI_E zoibqWG_GcujO|4eB(>9!?@Sj}78CDc%4iVpM?MIjGHpap`!=H*_PcrCC2GXTU*BR% zdkaLr!b*KSmyS2Aq<yEJSnPD%-fg6g(gsw)JU;Kg-!P5pM~Db9;|84n2-U1GekM-| zSiqNeSf<ya%Xci*!&~AbRBX>Ew<4_*YvK|=$wg*bO)jLuN5xoTS21=t6;c5b1XpWt zG0otu-Joauya&NX(8ymeplP?AdKXkhCleKG6bJ3ZUd%60R&(sz<$ij*(NsUOJ~FPp zt3V6R9>bxQHLRnZIpnQfAU$j0In>WY8Eya}PMaY+ICK^B9QzKbnn!Ft?Sj5?UK?+N z^1DH}um^IoJzl^jT4-Jsw^zqgYvRx(8ZU}6{|Q3zq<Zzmeec4eWUqcQMaZ3RLXVyA zu-y433ZU~Ba+mhH^iL9fF8z}QQ2lF!>UZ{z>fdlt{UAt@DWZt$HwcyJ{#A_Y=XLs2 zziVY3Ce=s9GV7K6&{|8<N;!MIi<9dmJ-uGB_sW6VYq+HU##nt9N8A-8tvPJp&7}1= zq(Zj~1Vuf#NKrG{#N`lq2*UX}pKzWk;)FcQVAdZL;9fRl6J^5h9#DLB5ZIK^dHYJ~ zyuD$vtyp_|BL(*vz~+LzpUB~hTz^bN=s5Ph1`)I1DF`k08_+i@)YD5jVsDy&ytm2M zCM~7n_Vu9R_5yc{wAwwAR%<IqtL+DM24d_+o=I0pmhJqme8beJ6g(0ZezAy!=TC+@ zYg!asd;Ucfe1Z>;Lc(a7IPcUq+!&1&q-%gyRJueMJzW%OnDq*~Z0MJUnc-vVeZ6Dq zH(gBaKtIk5VCpQP=<<ZE45p5XW;TY9bfb%;8zqu%RO|zCm=A=Jlp^jAA}NRM2f|3o z!174Cu?&*V78;GqPhA{6;Nxh*9HsQY&Ie1e^FSCoi`8cAe2}rT9L~)VI2XIRJkI6m z!{j^hhJ*4v7CtVZ!piE0;dNBaQ;}FlRd>-Oz(c%fsxCUF)gV6BxyU$I;H-FsWY9Y6 zT@SiYr=#~=zHx&RWyokCN5RLnPLPuD&9cdLlW3!|Hy}9B4LXE{SxA32doXGh;c^y! zV>Z{Y+(fV@A>-!?T2~u)MTsN6S{`}l8+Jw`31f5hRg8u61XzuQQE%GdbW9D+ou8LX zhrE+-xHB3d;x{&~3JxrZeGmg+7dNd+LKtqPWWb+fv{YOmfgL*L5hhVFeT5elnp%^& zg7X7YYvWl?tp)zndbszg^<UhnRRFpy6h-}oMFMUzMeb5u)LBex7vCLg-lRAUj>hVY z$!I49^BiR3jD-c#TXx=l1U7Ue&~<tni7X*pRKzced0g$9m2pMzSM!Z1>g#Z(Qe$$g z%h)kj=NINmcD<s~A^_Xu!f@<)lYlnyXfC>E)?Jiy0U1}beP;J+d);M7oIGRHHyqNG zi8v#kYDDl%E>@tnkm#=Edrjz{r9!99dJ^V-IzSmOHbE4#sXLRhN#0~8mzs6RD4Sen zX1&Pe92qSex5AIB?-7^vvu{PJufCvPd_i4ZLrxQ+WNn;9yID4JB}c9@6W#UoJt9{l za%kD8HHb<?F20~l+*-tq7*aNFogde;F6+528_cqi8~w&^;$$~dhZM9}D2<HSTqb4< z$87C2CfZwO(Yju~07jIL*<H~y<`#}wtkm@qv(4-+W_w8tE)Iy0V$^csDMlS~)q;M1 zNM;jQofX3K=G=-jF^ke{RfdlKubG<>-6o*j1ZnT1TJo5dc@)y#cFJ7U{LEM4L%uPQ z<IJ}x_>KMpS}Qgqk5!ypt`)24UDJ!!`td1LpPKUir<?gV`VX<z+=B1disE_kI-yyH zc|dqdMba3c<g+ZcKSES)i|W{pQS(|ff~Q@;4h?HS;8eN*a+h|FeU$htD-v<vr9Z~V z*s<)2$8f&~uQb%-m8if1xECGVi{^4KtZD)V=`qP5m6p;GD5b;TV_P<)g@W>Ft?{mC z6t+gbRjjhLt!9KDvO9TOuZ#o$6J;|IkS&ZvWeWopck6z*$mb1*YSFfuiy_+cSg^R; zh<I8XfMcXMpDZhowxWJjivhE{41749-(__S_np1Kr`3tnGk(V){iqnmgkBFzxpP{+ zrw$WCXFnEzJ!YgH1MKkt>~SOYIB~nujtg@0Do3w@%AwCMl6?+?ETVb{`%=A@#u9%! zjCwqtFla+qt*ES|lpyNkRx|l`-vhO^UI@)FPkK5!^+d2W{JSqU{Bl5S2zCqv4sE=& zNf%fQ7!>_IDs`!ZR2U6^WVaIsTss841i|4^!2~kB`OdT0pkTR3?EJjf<GhbIO$R<E zX(y{=?HxC7)(D_4*exi%t&DT9b!@4GGR-^w2I093JJQ>Ze=v&Q=s)sKf3{&RZVb%D zO+-=~=ESI{NV!nSIgPg}L|$fgDNr3~xJ`*><|xo<yhF*=We&%4X*F{@#51=mxZ3B- z?TT0SAhScrN$xQ1Ck=L$>b^HFQ-~lwYCtT4ClQo`RCc|~GRK<*Jea{=Kk#%g(17qb zwMWUZQebMQ0)1P;jbjD@^Y&B3p+WlP$HqDKDTCgjhAvdf?lSPrJEiKx9wop!CwEEU z&Jb{lml6@JVNQFCfIGF%7iFA$fSxVNI=6~AmH1Wa&brh*B_uzraOH=Si}J%;I5ni7 z^~KcaSfm#{<&E2jN;6DXXP2w;1y|IzTk)iA^yUiOZWZykVcsjJh3hvFGQpgEhte>Q zC|RpBFWZ?_fUWSJxKrV-WVhA~pT>?+t7Ld*F)f_JLWRu&stO|5V2Mabd)rdE%~f^N z2w&h>&at01Xu5f#)tu}>$9~2@52jV>ztnEpJEH(4mxI}8hr-Eiv>1(o*53}{9d$n2 z8@dms|D*rdL-y@Jft`fxUYG4+WWScsfynKPzqmG0wR&uqbMcV1iTG-2kOMd5P;-bu zU!aiI;83zazyXAz^cdTfrU}Skq6-1nBpeD0Q0C<bH5j255>>0xA`xG;F0HPE!v>+N zruDb10_@n&(Hei8e$N|)?`ci9#Yf&2kBqx54h>l~wL6~1<90lh)cd$pdU0yG3bV|q zJp>$~;NoRkTprEvz02J~QB3R4kahFG$qhS{D7$xdrJ|1g0u^+^XuL~_6$5t%1AEzL z@a;mcFfCwB(3d8AYu%-=x7IGa71&#-NJOOvQMKqnR15lQ)$<7}o3O$jP#b4eD4qjR z)`F((MtW$);u|N%2{sa(u{a1t71D9vpD4Y0E<+PmYdTK3dw|60P|&^AyN8>z8F$k4 zv0cGt49B_WF2$|B+YVTi`4zwE!Dhr!nuDfX(MvnH73p}u(`@2&!t&~!IPC<g=4BQP zQ`&IF@8F8>C{uA+ZyNa0ntLNqQgsy7`v8=wc))*Zo;Xdf@12iT|2r{Vjc?L)eX)<} zx?RC<^q=@{Bk#nd-5c1U?qX{3gZ`<-myDV(#3FdwFPBh@FBR!HihaeS<M_P?waDLp z5^6DA%E>?}Cwr$B?WkX6q83NX&{@^i{mg!~NLG4)iLyTsc)1K&>BXEgvhq}btb8>< zR=(N`S$V2RR=yS>7hf|{uYrVoJpg;%NWBi&8v)oGM(T|KS$V2RR-WpMtn}p-*V=DV zr(O_=G_6(;dWFf%lSW-4T0&y(Hk03F67y~*F^~5`VxC`y#4IH(k9-``vaT=EvhF{g zw7kbBEl>ADTK=gwaqq#z-4~d+`$e^4m^ZnkWpb`^c?6Q$+f6A9JwuCi^22CykBL*; z3L+1OCTA<jCDBpw%zj0RaQ90QF3WHCEB0F~2+eGRgIEf_ZDihw@hfF!zhh)R;A9;4 zu93XM#Lbq5_l#KTT_fjY?o;Gv?*}!6?-em&n3n|9vd;^sWxJZ#zX&K|Kh6DfpHKvQ zr7gX$a$(8W^5|!w(#z4$0j5q=+;+x&6=6`1{eq>&ZiA_Zy!L=Hq_;B$brm<72<mr? z<ZRjC4~$VN2s%teC?@AqANpctd7wtQxngB`wkCTs^_BtI?E^wH4RZ>6*&fU~NW)qx zhP4=_S6I}lok5L$d6@&mYd)<LIk#B~(Pe=COo(PT)%+1_8}X$U-Mj1Ihh!p#xwi>) zlm!*Lss{cr@D))6<vtwSQUQ`Pp0405hPN2<zKr4J7P?CC?e6Z<OEOyMl8nZx#Si-A z=0|;M)_u#H0Q)cj4hG20hnOIXGp)x?6do3W0C1x4l*kj7+)I3xeV;P&DS-kX@i)xw zJ__8Y;5Yiu{0;K}iaiu4Hdk6~UZ?~ZL>WIP@(wPDajDM<P}PoK>NvCCQorq&`T$BT z1WJ8W2w_?m5$;ZnC#Rapjj@D=MZU{F*T@xQbvlGfDVgQuE}%38`#Ljp<Z+$JxOtsf zpzQ4HO{fCnmGPb-sq4Ksd^lJ}<68;j&nbyL-efs1&yn$FYP{KWT;vPf0mr%9JN*ur z(0>Q~x!(Z?(E(k74me!e?T`7ReIhj4C%D+h{bDEfU+iD_#U4VjPXvlRQd;bjezC8F zihYHPJ?a-bssCdC(l0iTVvhxieM*=#h~LKvMI!RO7~ku-(@gF)FOSKU{$J@wtNUGY zbswd=YkIT0q!;|<c(NH-j-M6^u}2ws8HcYf^0g33HpRrfkZ-&9LU0wwzQOe9B&`2a z5t5c%r<qp+BjhqSP2$2dla@jE{>W~5e*_EgGa^py_ya;)ccHzJwkO4*=5T1b=`Fi6 zOg>j`I^|){Deli_;nUn&8ujj?of04q&U0^xg|DUkD0~;{2gSQkr^ICXvh-rwH^Esq zye?eJ$*^pUt6|l}t6?p)jQKaePIx!J0&CrLd5P^gf7EC8Kk9$wk9q;4empSh&zB<G z3qG>F6+*VRxN}bU#m?%#*zfqocB0r91I4~nTI|byv3DxLV((N?>??k;v->ahul-^V zqu7%H0_IgwOWX0@5CO9oPUy=}F;mRs-DcB!B2N!{jydu@5l!A>*1Hr<MdpZ-PwqpE z)OR7;=7^jKO|K~q0`^>!AM?zSuPI9A2?Zf0d^nDAn38aCz9|WxBTV?rF+uon!~%aV z<(e0o_98R0*n}n@t+<By*SSj_mpVvpRGm=}4>Vm!g+C#$@N^ZZAqDTMkxM--F=M!m z)BG->eZ#F9#7eJG=Nsk^V26u1#ZDYw#$!+g^h6Ex<l5Y1x|JtplG`Es#$IYB516dO zoNqj;M8O%++mn2N@w!mrhPfJaHqEAsJ-HRnraEas=AVkk#}`i?cQI^n(QNwfm@FPa z!X#VGun5=1qZT@JaIzf21Ob3{{`yYbQ7=hHoNVzlc~*Bfw_};ff=r|&o*8MVzHbQi zJi}bi-08(FChBPoYpEQ@caetiO{8HhHN*H8Qhm!{G=VS2^NPTCWdj|v+#K7Y2f`~T z9ItDsKsux9HojS71R8Fl;Y*{DwCOh7k`4csTTKfMviydl)p073a;)#<$g8?I`l=RD z7~4__G2TENUx1iGbfMLKv~jYuX!V|LS@>GSts*a?x_xX*jrSD-wdv}yEraS>23H;D z1*_&?m>(Hr{TF&x!tYO8c5KUl^gw#8!E04|04h<1OD}`cYU^0^SOwP@*YG%Rd|>gw z1yfV5lv<_!<z^2^S7CIje##o?UV&P%K&@PXS}RwV72MQ*3e>njEm$CWcyRUL?(UL~ zO&haW{f$xSTWn0_O<vjz2-tXf(40E$6PsDHFJiO7TdW?(V)a&FjeNUwjeLjK$S<*a z<^3j9OPf9jt<fLw8vU-nShn`RSbo=EET2O8?*+<#zqI@_{u<pKDz=-8{lG7_t^Z;# z^NW3k)jtEpepFg)x6o)q|ED4k)oyxQ`$~T^UnSLWyydXqq*j|Qv*frsIPGDAv|X;i z?Pk;Us!IS|uc9I2RIedx`fteh{DwS-hFqr>8$!8-8!}$?`fsut?7zue>;%8qwfz@6 z(l7RT6gx3c?4;6SC;P=t4HY|;i=E;ZyRQFY|C?Xz2^4!npxCLU#ZL2!ogON7Iv0DR zU+nt+i~SqF*q2c3bhWsn&)_QfC)YDoLp99lP$hhT_NtQ#J?sr;@<ADRkOPaO2-q7< zMkspQBoT_<ZZ^Slcd`B|rQe721y_sJ!=p`MJlZ7jXp_l1?<x24tib+Cw4U5xXQ?r& z)?e|K(&=&DT{!p(?t7gMR)2{7JgWv+{EORGo&^=NRc~S0+~>mb-@QJ21${P0#ci|N z+@)i>v_v%1rH$#-60uAt6bI(218IV-j!CM>Co}q@k3LWm5tkCuGbbe_w8f)@nos(K zkQ>2$yH!4Jk>t=R1tIFeW{%=Mq!b8kGc#|1{NV`5h5+2o6cW9GK-vNVsp=x?zA<ko z&0SjN4W(+78|vf`HLIfPFKPbM2OlW(L09si=^6Ned97)tXW_>)>Jww5KC!rR!GZ4X z*oN-z+q%2yjZ42Z$kNPHm6&NIf$HD?MKnw#arND*Gm+$xLGx8nZCW!lNmf(>30#6g z5<x6UtizV4HJ^$@T^oPn;O)n@RE$t)%VCs!NOm+lUDb|*mYkM0?Hwjx>ftwBMK$f6 zK4d3I4tj1S2yPPWiE#iO4&`st-sLCVWx6g4b=IbWX&`zXkMlwu;CK-nZ@3X))*!d4 z?qfp6@-exklD4Rad5cO{0;yLJNmD5eL=0%YCOv>QRE`_~45#4Xc=gY*x4R5q+JdU) z=t#t`48R2`3D(EbhV54e3gJZNa7>(Hs@wx6BC)&^526pMf=3zD%XOVqAJROl*^EMK zW(Ny`m<jbOTbPXO&`ZiA=FMn)!aW%3S+;xJ!rAiYs7<}R5EVw5L=+$T^lR}0%7W<H z?*YyjKd3gCL@;&q1vj=+lNTr-(+hrSJ<FGk?2^qPs>Yg)%d8f!G?#wV&11ngR@DVH zqyB?N0!ohlMsQmn%h@XmextwdZv?MnQCk?;2o{Amg2k#J2I;$)Z5K+a;EU9T3niPB zvrj9@M@)OSDcL0W*W=YY3=XnLOVqPrkxnc2?Iu6=xGd6Xru=uC_8on&NH?j!nJf~u z<IZv{(o*%;XOaAl*(+HjKYZ6`EYj~Hi?mF&XaX(rD6`W{neCP&7|$1`(M~gswp-F; z1istkqmk2mG(un;jS%=AbCec78rf%-9F6QTLq{WfB!#iZbR1-Qhn%JR&4zo;Sn6&Q zBDLkJ&%|+s2(-edweIVa)@t;Yr8luGWdme!tNJ;j72fJi;&jOL>8c0JgbL!yNaoBD z6#?1Pfuii`5p(D$GjrNKOFQjehu~GqBeo8h$tkjN_cNiDIv_(2n8~Qz7EUW}bV?2c zi=-I9U37m4_<#gb%4P~ZD2cGsOoSa^DHQ^96$Hx3soGSbo7Pf!2-V4J8yl?hmrYPm zbzM@LdS^hI8d&67{Y9=tE7bg3B!Vj*RGEV&t_L$NYMAqyJLjuv1JHau^qqXAjes76 z+dS^R9QsXe;GA)FO^=K*w?0=6n%1agArb8#c6U2NarRr1n^UY$cn@s%_rQnxK(jX$ z{6_x|e-C^I$hI=D2d+}hm|^~VKgY9Eh{wsiCuR5V`Ny&JYCmjxr?Gka5gzJ12Ko>W zbRv>DqY!`w`w$Pd{T^mz9y9ZhnL1>8<nd}%r>*zLF2By%@^q%RoSe@5A$?TJvgb=# z_J_l)maJduVY6ulv+QS-ku#W^T%+R5_xFHhGgNu#`}yLr?F@A?z$M4N$E0y;7015c zFMcTxeJ>4uy$yC1!+A-If*Yef>=Yi5r@-sf;3@EWe;IN5Tt@z<H?r?yWH$sxcB87R ztmlSP6dv8YDM$CUIA4(-rDQ&ImxT}AW#L0Pi9b~Ag6y|~N&9f#ew5E$h8E9VI8BGy zROQ&6rek-RBdcPKhfO|Mc}yOxK(ADVzC_kN7YWim;aSDy@#8U`QuUqE^ct4|>uZ<! z*4L`Koa!&hxxqFA!D`S;hYsd~r}Fu|#?lO`>x4nJt<oS{U^?CGclYCccK6?U-TeV; zmIhYsEv3SYt-dg0Zb+Chm(lMQfBrtvzcAzf@#pVHD0W+**zJUjru9Yd#1-=Vz+tOf zm0MLDwvG;-wc>#ENRJcMBWCJ|>Bf~gQ9UA&;)vO_z>|M1;MVN$Tk~Z9t@(l9nsKm+ zw=>Y1UFty1wBDCDuDkj_aB<91iNev|Bnn3*zjRDKp7JFMVAY>y>47U)IOeZt2t5;& zAsm(4mlP3E;LRBD6v>`tH2rGPNFenvrx`kkZE-wc`d_7vn!v$FT^y8O2Sf$8`F;6Z z|J=<ezc0t5FL$fO%UrjsiYn9*yt0p(BJ!CjV$4M0WG0F+lSPwOXwagW$zseTQOHaZ zV<w2S$V@;UdsJE(RcJR4Z=NEWCyM4tqIrTCIb4hz&g##1sDctS6Ur6Lj(qY_vnfgm z8=_IT<;lZnF8%EQbYdyA6VOSe&@MnH6rm4PWVxU_RnG+OaZ}!PxqL`wI5YzT&Af|h z>)8Mvb0anLMlohOHFLTcGmV-y4Nbb6YurdRj#BoAO%(bV3cazkDvtv?y%hQcpwo)b zw{%&-dsOc-&hu^s|87WTDoWfJsNsG%5Q1G{)Nm%%aHgP&I#f}p9&y$F$gSEDuG*6* zZf0pEN-OMD;y%9;FSwN$JtQ*&c^?Q=;(k@5cS2>DwMZT{n;+MjpVJy|)Sz&lJZ3f@ z)|#L6!%vybPiW0g`QfL{<|A73(^~Qw^YSPG1%S_bz~=(M;~wz&0PqD5cp?CN(F48| z0KV)2UkLzDdcao$z*8RZwE*ySv-zmj{JdZ9H_Yb8w8pJ${UiCN*?hteoHm<Z@B?p| z&Ch7f$F=4YX7cIy<uNb2cLMNd0`PYO@Mi<?_sr&Fex~o6%`a-r&uWcRH7wc>sG3m3 zI2r)YL3DoTpr2!HSZ`4OCO4|MV$WC30eO}okpSd)k2EjzNb_QkG%p9!RQ=yjd6Clc zn%9eb!$~dLqtr-gshskaP|6p3q<q;=`I?^+I#nus_r3q=_Qbm|d`KwRt=A3;77d_G zlDA(9ML#Q}U-F}04n@BxqhIl(PllpjmeH^J(XWJ}kIU$n{peRi(J#p8lYaE6Q1nR| zeaer1Efjr9M!#kj$KW83!6n5Z;DqBXBn<S~gdhMmqZx^R85lX50^1<#<K%Clpr#XM zzTt!!wRgt@IlU8#x;+^6ZYXMx8wK-ZxEMLn!bM0F{;-PM$$IY6y!|>j?MGDj<gCIq zp-$a_Th+!lOvuI#aY6$L-!$#hNSjk}nR&1TjeE<4Td%jxd?EEFSk8RtgLm+OQ|5zr z{SOLUbS+}vGwt_HcoaBe(trB$Q59}pzT(G?`@n>WW=`Rx&X@qFMe2Rz(@|{FhxoSB zZ<3Sx(9Bb|n^PYlVV9~^DB@1n5jk72)$?|@3B`8K8D?$a#^8)OQ94)`Y~Q?)76if| zx%LQEdf&iS2RH_9(#^{}kMrzZ{ekXoru1ngOhjneqd(8an@`2Td9~<OzlT#2*fUgH z;*?i9-iuqg_yv!5cSrYjcRvnC<g%Pd<gf~d>QDI&)yI9kB`(|HbrB5A72Jln?#}-! z^Brk5+!BpjG6<YLN2PV{UFzCy^ShoabTm>QycZ_Jhr(os?_N@R%{xKt&G3;Y%oyrX zY?{_mfu>dT(zFV0+5y?LxGa|{5$Cxl%a24J;}PqSW-7Yms7-89q0ZKshc<qk@Qz~G z@95>Q#vqOB$+3fFOQJ1xIZD@4<+u~5urE<2Fg=0J=++0ZCA~Cdi#kZKJF<9f9A`zp z5!b8t5wRJM>!ER8#-8SNsFTH6W7*5yp-Gumlk<g}pPY}#=5d(~Bwvqn^FHzha+qhd zkUKmP9rQ)`h)Bc|Q3yo^k8HlRt>Dm~Y+Lp+nz39>y{+MOJxUoA(zIGLq`j?G#=zt| zE!czLp@1#hb1w7%a%5qumnuG*g{4S87fzIb3v)RYS6!ykaft}lips}&_ydEp(QGkq zU@cmZ*3bkO$LLi<N6BVHB2TDc?~=1D_ulpqpDer1l4RN656R2|S@vXrEIX<Sw;O$9 zn*j^e!!S9nx1i@((-nyTLAo5^&ZT^*#ggLjIHXrJL7a5l9&a^Hu%hYsY}7yQ*b}Y6 z&(eH`b$h}w3xl8M6oR7ovJ1>HULhx#PM;@dTlBYPcqBp_chgH+2;A@ztVA=Q;bje% zH&ob&bU_HxM>LW$vP&A9LN^Xx-rZervyNl4m~H)dy!ExhWtdSQVvngYO{mvM8aYce za#oC)Pc-s;F=ioA@e9S6xnNM{iZSgp5}9@}W`STY&6x#a%rf_NnHaNH)MwU;F>Qk8 zMy5@SX{B(h7_)>rDzik4S&ipvF=hpxE5w-D6g?Yb@|3Dk`N!FMc~{d#%~{brUo<Zi z&2vR_yBK+qI_{!QNBZkqCYb4ivvalTf`DfedzmN@xPac7WJOZrE%13qC7<UsuMnvf z^jHF)+xhBmL(05dq?QwCj!4a+$5N46N{=-nwT2$6L~0d17Kzj%dfX&ZH_>CINUfyD zJdv75kHsRjm>z3IYArq5M5>J*ts>P*j}x)fiI~&8TBKG}Xq`x{qsMHKn$6}LpT_R5 z&Q*!+m}3zyG1nsAB3tAw=2=<kvi19LgO-TkDkHokf)AN*Q6n8{q&?Y^sTcT=DK2E8 z54piAax2m~>oTC;;5FUd`Q#!LJHJ@$VuTkK!%GmJTMXZXaJv_#9>oRXd~zwkD}3-0 z7rYGMB_6m*qwa=JXpUQsxaEPkImNgYh?^6LTUw0EB5r9QZcQ<+6>)0<ajS}PZHQat zS8<VB#dd%f`QV#e@JfJh^1&-z@G5{;`rvskcs0QDeDGoyyawRKK6tGQUJLMAAKd1G z*8$w-gIitjdVpJf@QIiNZvgm2%mc4>Q*Q)#wV!&O3*H3qIv+gS1>X$t?4E4@Gd|lt z)m=HS7?QaNrc(n8=W}YzCE4T^Uf3ipg7`8oOp-DvP9WUsg?&*qrZU|N|4qM?+j7+) zAUUmw(=69*wZBgeJ}#YBpHN}P<`UPd(JwoF&qh{Y{u6d%!k=^}JgkALBCd#kaToWA z(ta*~%o8imWl|JDw8HhY5VILSS}(B;!!FP?YbcxsJ8AXD)2y$dG<ua0scF_XbdAmU z>2d8IEbQ3T*GgUQm(-BekeB_<=tj3o|JRVrdMtde1p4$O3o0t*BD|3n;f+Y~YDhw{ z*}@vI1w*&-Y{ev}{L-hprT@c_%m(EBT0ma?I?=v{84#epp~4KnP+0lASwuqqe!t@S z`%Qcad+?j8P6=(w|KgDsN5);;k+&byFRq2FU%b&CE)wS_1|(wa?3Y1<648X3P#RC_ zBJWCp`J*rSA5|pG5npQD6<56YT;4UXb=sE|&#-zC(0!Tyk8birbDPlAw^aDI{d(@w zF{f$Q&79W8ybi6Z*R?TkLaXXcZOmI*Ldm?Pjd?>$h|C+%vU)o_itl(6<I0Ha#xX-O zTafp=oKAM*d+O&DRlAaXHLxMnZX<C;a;r5|9u(eU)hCZe6VZSRj^r9Oc`%;bW{rwo z9)(nOyOq3^lI_6B;m8Z4<1XyvA!)uQxx>o24l>|_7z&@L64<1sncNo_(*Myvq&9Cw zz0L%N_XE|`4D(@ms!3Tr6nCg#FRNVBK{&8JC}NohVP5w^wr1wQK?J3k*p<sU)Ec}G zZ&5ROq5<M+#?c*W7<-U_AqjeSlKUA!psnsuBk&I8lVp_rba>fKY!SJpBpgn#0cm6c zZTB;A+#%uD9VSdw;B}N3nT%%cMy2lNO68o!Ln4~1&)kP5epoyKeo)x=;4;-m4ALbC z9`B3cyV?D`R<z%6ou(7ge_h5o2_wq}$np(Sq7lw;xyp~VDsF%_tXJ{<^_oUKxj5!o zbjUfWy#mRki-jB;p{E{$i7^ND?$A>O!QtjRU?{xMyhF4#OpHg{vZ>o;f?&iXj@Tnm zCHru^W)t;X&b}WOJO!s13pJ#>xk%O|f*OSC<_Gl_H>$&rk~wzhxrXf`0<9XE=5E2( zGajbb{UXa|n!i#KM~?~7R-|b~qSl0H^^3S0MexJF1Dk8i3Cxu78oJz+L(p)Of)lj~ z8gA(fgO|#xoV|^{+zxXc4YRE1xT=oi1R}NBct+l{oH0?;pkfn~=3hnLMORScM1xlo zd+iL}FuYp9ZKJDku8di<%SvvHC)80fklUTGL?T&E{%A6;6uYKUZWW~_jt}?{SQ{+B z&fwCZox!Rf;)K!t{Lvnt?=C`UUzu&C?hsY~5cuNG9$#$pAywZb7Iy?Fd3z2q`P7QE z-V5`qU$B{&-+%A!rU%R&Hu>fbCuy-5+ak%?_lX+VsLj=-?h~G^52zJ$imIY%<y?J= zXVDbRpoluxeltv&+%DLT$sXYwaz3Gs60QZ58+s&nWb#7U<Wse{+(`Pf#4?Q&e%Vi$ zv-6@CBP=&+{=8>ABz&2!L0`7U2f3(;9cqTA8ix69z|OzV;0=R!AUV-SMWLtAa0~m8 z5RR3M!Y5g)JKf-MhRq+&9WV&O%Slle+A7o3bp@tHTE%=TRKLjnC4@VDwH}iu>(12H zwAL=|{U&fPmY7~0w`lpOn!yxaTM?z%56+mE81``iV}2ZBHy4$W$XB-$_t^@j6n1;u zn1QtTe)U8w9nZ3Qs$4cSzO7qaipEk$@cQsMxdx;wFzvIvHehM^QW4zCs({H~+V@p# z^)C{csi~%6p24EoRo`O-hCx%-AB047EYjo}9^sKtodK}l#hO-{<8?ZWQzoKWi#-9i z97yBn+z{nqYh|S|5gZ3i8kVm<85#(^kAcwJ<ppPNAmYV=h;x?}2cn|4fvA=PQPC>h z@^qCOj0)~?cQAN}D}sYzga^YYKN!Z@42C}lvuL3(%<C1H+#H69kX#<6ohRAGe{bTy zOYj%BEIYgrX^hIckL^qhg4vn-1<drYdldK$a^PL&TQmyv(w-J=fj*`2NzJwLi7T8| zFV1U(TkmXYo>lcK)z0@X<WR@mTm!e3^iuq;G*9}V*E|!{NAs<!g_JGj;pdBi`D@gZ zfaUXDVC5;5(_hAahRU6YIlX3rvifQ<i1OK*pxy0eOo$G5H2g`yNq+_Rpq{f(9*L`K zK6KG&Y)289JM&Bvbn#XTl&O`t!Ta}qEKNe{WCXW#S)~Ni6g}qxuXqp2<a?Pg@vu^J zr-=`rB;g^Y+C-G=@>VP&b)#7Ui%3SP(&g52u&bCQ7;`BS+FI2?U{(U9`c_(Z6<Ozm zNDJx<*t`wFwli#=1}-59XL?p&hN_x9E};$@|CEs)m!#nW4K|N`;(wtgD&iG;W8h^^ z#8!g&iCDVCge=Bm0-IBCZTrB?5BC}O?+ipGuE@9cj8%Jyoy4(Pxol;WPSXlbU8IjE zCz*|JU@Q0FhFfV6Q%|tMP!7{b`YnZ26{k9BF^dD)v6O~#8KARc&{?U+1ro!E3xa9A zl_4`?GJ%c+aIp~26&e;1(Y6?-?s-LIM0rAFVaFl$nDBx0hf&Ro>IAK^2m_;k#p9xa z<8nUzADwdTP9yDNt!VIai54<=d6VWDyj)_H7`#m5`zP`J(!h8w(_D8;P-`I$@F)^2 z_bStLlU24hEwVQCFz~4rS@kT{M5uSN`u8w-*<59H8TQ1qA8zXwn02F+%(ZzZdApUh zms&V208!=x;FouqMSER=FsU93lNYhaN<=6sCcX4>_uJRjr<PlAT^ss-1&zabuw8Qo z-cH!N^0g4!Q*<h8r5PRty+UwYBT*AkiefFIRtvhWnkO1)b43IHI3#lnJ<~?5jmBha z+qI&K&`M1VGR&ExKl^PXE+q6FF%*bO8z=oL=x2Bzw3z-EmitAeA2+~{8|cPW`Ek{L zT#Xx73nOuDSqg0OJUQrvHUhQcLQ0&C;hDI%<)^bMWdIAES;c2@?iX+a#zy44{02&o zcSO(mIaaW1+?Gmt2<IoZ1{Q;e9Uwizx*xLEI?UFEG8PmsLKzEO%}KIIUj#FDgNPj< z1^(`b?9Hqo<EqmpHH6*)9>BWm46mhEz6-z+RcXu1tcG574j^J++Jv1vi|yo9uEPmN zH2^gXs9gv3@Bsh}WI)wA+(j~A@a1yopsms%E*eb4JFQoVSev_KVV$Gc)xE?{;@CA> z&>&yC<=89fx5_#P2Km-%Py_rUX-H4%F9!_sIreHQXbt_=T8+=p<PHIz70?`6r&ZLL z)*CQ19k?@*PblyYN(*SL9Wyk~hgKq}T-o%F#^&PQ(c~me#O!sJd#c87I?u;-R$4~6 zkINPI+#4M}oZl)Ek;GLnDu;kkG%D9(j<_gK8$ne<;h|@`rWf;aaol!Fo342|9BWIT zj}B~h?~J%Ap|o537ovveoqW2w9X|-|<h_$%f^=1u|4_TrRc)<~d?0=48@^9dE!*7t zMLjF@Nph^}DqC$gsgn@&%$`LP<OjiG`O9<EoKKW{KreQ^R#9tOIhHk<KKk{FWGy0q zA7zaaUi^9db5SfZ;>#mG=Ofv_mP4|EAtW2vOytOnXn%+{(CrAGBeYP5@$C=2f%}*P z{^z0Ze%+qkpedGVU4xD-GNHrZk`lVhSqH?bbfezj3W30&H@!=gXv4d({}^w28}D!9 zy&|8E7no~vr~?GvI3pm1yl@~LsHfHQZt3n$V9DF4`M0U9el0UzS-kR(y?Ik$Kfall z&Vjsi7Lw5sRQ&fKyWXrpANrqrF+|F0-@BC1)bVayIQ9mjKRnVKA;;e68<tE&!lB_M z7bCX#?b_6TyX@jse6(w8pk23Ux-hL_?v`*f)nPOJwqQ%hIZ%e)YGs}mv|it0WnRF? z+q8<fX-yQREq+0O!s5j_p^b%2#%&f4rWWjtw3Yy+x=R`Hl{%uok}t%QcUU6?&9JyU zqyI5Pc`hr`2E~N-Ea88{b}K@pgJ>nh3kCfPq`f3}>|3owtTp@%FvUBwR|n6)eLftY z<m~4~k&_C35`6bc48l-~AI>7tlRXoa%LJVis#_@0lV_8tx12(C@|xXe#e@BMcG*EO z-^arp{o~<3`FMC7sB~)p4|izFK*NNF$XVDc&b#EUPp($@2@N-)>Bm`qT%{W~KvJa? zp!Kp+Qi!4i;@UU{q~=1Gj)j=XP1*`7O{QULw!)=ziAr>hBNJt4xCWGoD6IfNXD~r$ zt^?*-08}zyz&f}cOY4_I8o#qo@@`k3<lSu{@@^;1<6ZQ-?Oc#|yZa&Uc2hyO({GQ} z_!5(M0l>>l-rcV0m8P|iw^(-%ppEw9l6Pli0=V~mGi?7?7G^qQQ4hRUp#AN*>Hngj zfwZv8CjPO$@kOEaX+gMniLPiiIAB27U*vnO0^15Gt;5rSIy62l)S#hfO|Les1Ik&` zD}9@;mh=ikL9OWgR`JyZQ7^3#?BP#Dom9!zRZ?dU!0U)aUh;ue#ejuwuS^d>vjg2u zHKO>e`zZD`2aDaznUn;*Zvy=vw!!Vz3jII89Sg1zD)V%pGG70?%}acNdnVAva5m*z zS1v=(0QRR$Cf!NPuW7YKixn_}n3dM*2332)E$~w~`KXi*#dQ}N57rg8rYmG!E4Z!( z>T1Zkny9NG>uTkRuVz->0mIB!vbnC*Q(V^yI9Y@VK)<eg{VnH?{<oY=(Jl|RoVx;B z&fTHq@=jW;_R{aJbFp0B!^`D&$}g9WeK!$)ETp1^@*WFe$KGc(p5&D?0C<&G&V8Cj z^*keuqxZd5h6&C>b&F5Si)_HSIYgI{!1_dh#{HHEuUmn|jIyT;0-@nDKl%nLyd|q( zV8P2f0Xhb(E|DBwNof%*D#2%fUR+OlcfY371nHvfBf;`IA_dTXJ`>amkUz0R7KA4r zoxxu57dL%Ge8gA1WzJjMDuQd9k=FWL+H|?Nc^3Qy=D0StqfnjlMCxfX>xtkI%m>Bm z9CEV7aA}A>4h7xZ(9eJC7jX8un`Me~|C)YZyB&P5KdbKTe^&j-pH;75R^6u+6<`i% zR+V8MQe1TcsDsf@D_PeNXAK><L2apISF`qg796igpDgwPtNFainK$83I`bOzP-#hc zQ(WINP^yOyOb=iS?qX<d9p8Yj<eSjBoc$V6XIc6L(mOY3-){l(je!GLJ$zt%fa?(P z{U|ba><27le7=|QM4T18A7v>n1h}jeP9Gn0KQ3fW3w8~|I?3!N7JtlOE%%qyay!QE z{b<_6U;B){(tgmQB{8`i0_>ZjL=EhZ5>ic4QDwdnK1WH8k30533)UQns^m6WY!V)a zNflLpDBsaKrWx#qEF6cXEmRyK7Ct{jUsBhyaUS`ay3Yblk$Tu_+MwpsR$=4@RgvS6 zu4LD_6>JoVR$UX#{(aeOT&>eSk@fHgSQ&yyR@XZ?C+*0?_$w|+Y0!onE}inq3+7c& z8I;+g?~D1pATN*~WE%MMus7qmC-?GvDTX{B(qfe7pGd<BxVJ71mFNAGv;xmla9ZiG z&P;yx*p9qssND6}{IG`0?|+OuHn`X3FDkZngE|@D0(+QYMXZf#prW1J@JBRHf9{b! zPsV=iO{G(qN{0d)RPHmLh<T!XpFEM%Cr?xeZSsd`U(L}ke=aupNBiN494e?lzelac zw|Qp|0N&x9y@Pq8=hWXIo(R4tT@m8unpiaAp!9*QUM+roW(gnn%`b5Z3b-Z8hb(k> zOGRmcbttgv2OqD3J<~en^Zhfg2iExol;zcWe0jF~A~Fh6NTHx4q`b;<TpvBbEvvc_ zS{{)BSA5L+mPzcCFW~FFbhYS@Y3*dDH6K4mOe^eql|kzeC;K@`;U)g@95S+@8M4U3 z4<i~W<#4|o<N?3j4~I+f+3?h0P=KHPa+tkE(3>fJ^0x9Zz{MJ~v=Sj~E!W^;28!DZ z%7rUeHmj=ZBELpY^jZlgR0G1j5ue9v&#Yu6p7zFNus<$E=DgqP)RhcOk#+KhB|J~% z*pz{VML%VS$D7u@4$xWjO)-o9hDc7~eR7SM9Qk$nrq}AYnVrR0$=dvWUkD?Lwdg~9 z()B5ePY(YUiBBH$8NH7F8NL74XY}3zb^3TfH|Gf=kri=-+FbQNamjeQns-KSS7Vn| zH0{RgZhqZ`*IoR&6R$h@bq8K|@arDD?g=M=0S6~}knbpTC3mWxbz0(qlXt0}b=vPx z=ngj&1811L%aS3bY8Zv?c0;U}m%PUfslKYW#;V?0T)ALUcenPP?(W9!?kl>xuk7yr zd3X1}c6Spr5;>xU?xsBHEAn)@iab9Vl6e<hb2QL3$A}~q>P4=#u>)r2+FT-<d7t=M zHFHL=Eh-r8!G%mezb-ewpAN~qhy0$_ikDrU(FUuk_IG^QWwug)0{&f=G>iA3$tHsw z*DnKWeecI*_I*|Y4ki=PQ3hXbfmiyp@UOSbRsz>sp4GhTEr*NOTYg4^{u-#%=K?Ir z@y}QiW=Wp!lO=hfPnP6Fh$VT97=p*?_r$qiNnY%SB{@O`JxRZ#R^x}vk^}%BF-!6i zvn0EJ3y*1NFHz6QDNRv;`Uy{GUgkbL5({rfWhIirKW<S2$1Nc$*X)l<m1Kn(+Ju8N zeBRx4EV<91)39q({}emz*XSN;j<&Rrr-OwA4o_fxz&$)ML*sk)*|@#@%BQ^NpXBnd z{m(9+I_A91ZWUhjxAJ5CZ{`2&Z{;6ge>oLc)nEH;Rp(Xx^*&eiH~L)F-wdtlPtltC zH2t1A7pwZ|epdBosi5cRcid_mrz&B<bt*eg;T5S%{H6+;)<;}+ZLB=y_|Fv{4J#+n z=tUq@;W3u~)^|<+LuEV@B>#4CSs70+Vw?ZbcYR0H<=X;PX6CV2<#3SGhL7joX4%e4 z{dY;W^C#X=AN7tndzI2Kk6I!QC<FVAl-C3hqr7y%Wxzj<_+_@&btghy=RQ8MFeQYB zzflsEtelaf`squz2_H{B@*Teqq02I&J~&aO4opbNC0`Qc55lwcollu`diS?TT=Jez zV?EzLjrDV%#_9%*^?rcHI>U;#gI)UI1=^iY(C<ai2QV9<#bWGHHkbeYtx6Q;`(f-M zm$zTCQsY&6zHFr?;QIN8nxK@;Ncq>dDNz_8*>5#J8_n6{)rNy=v|)cd2H?FCxJL;B z?~}ltA>aWCoDlpR_8l~pkYqROm;psVbBr5^BhH1ih~A+z%!|VMRUQTB?5qMu-9$a) zQD!l$=22WRtmRQsF|5}^=OV3I3Ox20xY9-;&(kpxK`?hvuwSuo*%lTJ9@Pu>NlRWO z?to>3)NaLvxQJI?^Ez$LEsAl|W+Iv`vNRlI{gEPMZYa!_QOam@%S3Ljs7B~325135 zA`%Lg&lP2Bfox^%v{3B;(M#&9m*flwaX#|C+CTFCi;uk51JTCmMdZCs|BOKZgK)jx z7lSZf?~6g0pa&U*Q#AQsqu=Z2f<c(5_st-@K?S`@ztdLZ6lM?tfE$=Wn52V2IIR2z zF$maCYd}W~+*qW~&x$_&7#u{Or1>Y|CH|pU*FbWb0{tCD_nW%z*E@Zktb;<oU;LI+ z=)j8aFjl<OAKm&fX}Eq!{IeudOG*6y6bijGJBdySrASqlo}HbGL$@jVr%OfNp#Szz zkyCYVBYvy@jrbS-Mm!lC@wC83e53x^weZibg_pS&KD|%MWJaHq$;=RC@;1>0@6hkv zb3vKR>W4CUj|zI9erK%4X-t^}05>vaGFv})*TO&WuZ4f$Ukm?0-Us&|pIr<8>{__D z!_Cnv&NHp&G~iy*fny&?CR`*_*^0MBHzAQsM!65hCf!G}co4|~_Yqo*z&&y^aF5&y z-XpIJd{85?vKCl5C~cI(%5+VCgcnH2%5+VL$QaCMTLUYAg#|St>fI};&GH{~aIM6e zT6E~3_R=@6Yr`1hfKUO#5Y=>27v2@&0G8Bd-86m)?djT9Bu>{d8q}7*n{ig3w+B8C zx4PfYtNtp=BEJtJ=cp@&_uUI6d4J4K=;Q0N=!0Iq4wwq4m9vfFgDC}kZ1&#|?rfX; zDbthld>ZY;{%N$Ud>U;kXtenO8f}3dl=OW>n^`yg##Ks5-$MP98w|LvGH5X1x=P2s zzA|VqAQ&pWK()wk-T2CWTlY)9b<@$h#d`66&k`LsBmPb5Ho5n8CRDPoQF^kEV;ZE) zES2CBUHHTzd^X^dD&cpmkeR9SO`6;YJwsFjMNF=2n4?B<6UepZxkPDPO3iRBd9L6P ztWxPJ(KDA36`Z_ZN-t-Jgr5&c;H(gEis`0AL~B^sxl}((+nLKs5{}S&v7EVFS9Qa@ z8g5&Ha?_b=!yHd;O4VZz;*gonmhZz`<SjNWj1k+SA&f|C1$#=Rw^XncF)bh<E!a0y zraE+3(b7efZ^=lRDGZziWTw>OEGM`icPSedl_|1`L9J|H)HMy;s{1B=XR8!$)4eM# zQ!D$r(lXY=o*BTN_Q2d&`I#V*1&OQrB-dB>Nv^L6k?YfF6}XXp(<{$~6{mj4^%+#q zO#02LY@EmBdH^t=$@O*mXIEN2yVCOimn$vnS*ZG^@!6G@&#tumM_*}C6i-Jg8u{J5 zn{p1#bc`5=%l_^}>)ljG*^%raFP|v6y%+jb@c3A|9p|>SUpr^5U07`9Z`eQtP0M}C z{Nl#nqVtDMKKD1ff9~&UpZl8&`u*kr{l1xb+o3M)Ifp2}x%8V?>6?q2Uzu5mkG3!+ z`K#X9Tv)GOs21(5^}+To2(i5jsKA9Gws&D4Z0}aT;fwlj_%(jR7oZKd1lZnf)E>j! zD*d|TJO?b9CB)7q3-W!fid#Ob0U6IeRWi%*F5PKlR^VN_YRN3Z`$h?0h4)(|e3|NU z)X5KJmaQs0!bo>64Q<33uVH|UWxyPTJ-F<OMREF)^W3>KE>qyUWht7mT`xLfxmEv| z-a&To2Y(7q`#~#bQ)9y1^r{exeNgh<>q=CKcIpaY5L`p&a(1hVil>Ojm!=kW1*&(O zZV-F8QVq{(n0+?!$HJe=p%8Qq$T_KX)Lrl+1J0Ly$q?(CFkqrR$UD=3*h_pwTc+0h z0~WU>3}ph!Ohnx~7*>(0sti(90~}()@FQ%S<;)^_ir1m$#g+DwN>^w$fYvmX?T&D% zTw)nymY58~G3+!3#B1|SYFooil~J(05!YFvR`n}*>yqkFBFjmnC38Itlvc{&oinYr zc`=DATKzBBJV?A;>?F?v0+tT<mIaK$a3Z<b!JPhDb?`5{yGIN!U*q4DdNxxv$4X0% zo>rB=7%Wn&P0Wn~8q>I#7*~6RTJr}Os-<c*5&yZm)KZlNI{RrwUamr<^L1bLlUzrP z>PpwoN)^$`xyF?$)|TBmJfT#vC6eVTEVd&b*t*lB!b9mjoXE;unmlCXU~dGDQtsdh z0c)b{`bhdcf*CGOd_KWlFBV&dS66s0FA`VW4C_}#namQ%WbX21GE4iE$^36`X*<ZS z;;909yf$~~nD;cvC4gT@y$1>9J-VXAEB@A%@Y%~MGrwv&p^rSFN5-AdJDuh|vAn&! zlI_bJi#f?<@zjgDlTV(B+bb$lTcfa%pIWcyoW_^+XfC-Vnt4Ts8!5;a_UWn~ufUe+ z<QbWo-_!izR|^4{JLt6EI?}8@<Wn&3l-3Fi&|uM@C1q(93qV?frXa0ed`=N(cMcsg zP~!&h1tIig-M&HJ<bhqu7lWthn`+oI9-QIrr!I<DT$sDG`I?-at!)0n<c98Oq;anr z4FoCOy*dou55Ry(@O5m3<~}_Zi&qTv!TE-9G3>+#Xt|45xZdh@&n$jxWm&WM|3?m4 z5_WU~yYPd&3lE{Z9lNbEvq_cqylG=xNxxODr1_vOJe^WcQ*@kMv^SNk&ku3RT1MnK zN^-uLM;tBDl*_}qs+!iUXi+BAiy~;QV6U#^r8uYoN`n&80L3`8x}u*RTYkY_Q<)Ya zxu&P`xu!C#@(BYw{?@*>|E>L6e{0`>8G0zNwdZs}v(<68_WH~`g{9ICZG%OpYZK$% zjt!@4IgZ2*J)8F52{K&`Y)<8ecV*g?LR_JJ9BL2E*HAPk@m#=p0ZNu@uC!0<a>su_ zk_?-J8~nDuH+ToPco8uOHIz4clWoyKSfc7OS@cn!$(H{EJ4RKV7%(oe7B^nx@XeMZ zbA41n0te32Xb2rRQ|plaZzy4#0^zhfwzGp{o3j@yLu=2&Qo2~lxnJ`uXFxS@xCTEU z0-|OZI%q_4cxP%|r9=3&zEUP#tb~A738YIz%cKhd;h>zUlhL3~Jn4Q&wb_yMNLvV4 zu*#%-R021b%#265_Mdm1uLoo*yl7E^j$RW?k_kF>&q2zDKG)}e_3-l&*fR)B_QSfW znbunA2XE-Oi(6D$fjt5gt1uBf@LSjeZ*q-`6vB%R=^pS~z>#)#YRCh|naD6_(juw^ zYwLK%`I4RdA*QG2Fs9&nC-mm5lU&Rt79&7p$+^8*rAkWRttuh$gN(PtL;tTx#Pwha zj~Yc$Sy~OAiE_yM3b|#2*`?Lyg{Hl+GPT&`gz^kT%`67eKc>fNIXi?yhMFm;`8=ii z8fr10*jOWyzVo#ChCHs3{?*FGNc{d|`7yos{yiegXHl1$r&N7gW&v+-ZfbT6mxvNN z<FCZ=p|v$~DoMC}p{RPw0_GRsMbVlX;5aM3dLouE*y#4^LY65=q8-ODznh4yOhg93 z%-L8_EvzL726ziAMm20v;cBaCs|;;L2p>fT(K3^VbOSUi{7K3H_)3)tF7+NFxf15! zC2Z#G30{SN4~EG5!0$`w|LA}7*Wm3~gO3D|{7D@)F0)bBEox5;FEMgi2<;o*>Ipxl z-p=8pm<Xbn2%wl7@W1wuEsJc34Dk>wmllLqJey$W!Ef)){k8Ys{r2uadyfU$`xLjg z{am!S9w(@%+_`IUTGXc~Q*Jj*QRujw0y;MjFkvO0uuI|h#peF{;{W=6u@imqY@jcm zBcjl>ZuK2~VvW;2(Hi%s?iz<Z@jq*c+s9cnx5pcAQ$=8vYe8KCs~621e}J^$0BNCB z5218vwrQ<6G@8HKX>xRq|E{if&+}?GDY)7d5{e~Y;AL!AfmXf&D*N~w+eLp0?cVD5 z-)Qwqtfr-kScR3uPiEz!=cM)GnuoyIEO}V!3g_L-E8Pn|wr}YV+kfR_`z~Pni2%00 z_}jmo-+pel^V|E`&R_anMevt(C2m?^JQ9BjEf7~ugq>V&w2ZaxPOUN4x*N5g_gwXP zd-7Q%^<QKGt!H0A>&Gkr);V~xe1j&-*8V2TxTrr{c4M}j49u2Sd7pf{&wbLDD4#Wb z5ZVGI%C`n-htk|IFrN;!amw$;Tl(w9>x$jD2i^GX+P{xPB1$A0x$-Ah{`AV9{qm|y zev(RG`ID<I`TM`Q@}I8!*+2ee>Z&V$_!qzUQR*iR|NOIG2Ggbf_m8f+Wb|Lq-@oB6 Zim871L(21~sUQ6;^5^vO{{a!jN_@^zTM+;N literal 64600 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 HtI>lMRC*G= diff --git a/libs/open-flash-chart/php-ofc-library/README.txt b/libs/open-flash-chart/php-ofc-library/README.txt new file mode 100644 index 0000000000..012fbfd52f --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/README.txt @@ -0,0 +1,16 @@ +Open Flash Chart - PHP libraries. These help create data files for Open Flash Chart. +Copyright (C) 2007 + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/dot_base.php b/libs/open-flash-chart/php-ofc-library/dot_base.php new file mode 100644 index 0000000000..5772efcd9f --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/dot_base.php @@ -0,0 +1,231 @@ +<?php + +/** + * A private class. All the other line-dots inherit from this. + * Gives them all some common methods. + */ +class dot_base +{ + /** + * @param $type string + * @param $value integer + */ + function dot_base($type, $value=null) + { + $this->type = $type; + if( isset( $value ) ) + $this->value( $value ); + } + + /** + * For line charts that only require a Y position + * for each point. + * @param $value as integer, the Y position + */ + function value( $value ) + { + $this->value = $value; + } + + /** + * For scatter charts that require an X and Y position for + * each point. + * + * @param $x as integer + * @param $y as integer + */ + function position( $x, $y ) + { + $this->x = $x; + $this->y = $y; + } + + /** + * @param $colour is a string, HEX colour, e.g. '#FF0000' red + */ + function colour($colour) + { + $this->colour = $colour; + return $this; + } + + /** + * The tooltip for this dot. + */ + function tooltip( $tip ) + { + $this->tip = $tip; + return $this; + } + + /** + * @param $size is an integer. Size of the dot. + */ + function size($size) + { + $tmp = 'dot-size'; + $this->$tmp = $size; + return $this; + } + + /** + * a private method + */ + function type( $type ) + { + $this->type = $type; + return $this; + } + + /** + * @param $size is an integer. The size of the hollow 'halo' around the dot that masks the line. + */ + function halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + return $this; + } + + /** + * @param $do as string. One of three options (examples): + * - "http://example.com" - browse to this URL + * - "https://example.com" - browse to this URL + * - "trace:message" - print this message in the FlashDevelop debug pane + * - all other strings will be called as Javascript functions, so a string "hello_world" + * will call the JS function "hello_world(index)". It passes in the index of the + * point. + */ + function on_click( $do ) + { + $tmp = 'on-click'; + $this->$tmp = $do; + } +} + +/** + * Draw a hollow dot + */ +class hollow_dot extends dot_base +{ + function hollow_dot($value=null) + { + parent::dot_base( 'hollow-dot', $value ); + } +} + +/** + * Draw a star + */ +class star extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function star($value=null) + { + parent::dot_base( 'star', $value ); + } + + /** + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } + + /** + * @param $is_hollow is a boolean. + */ + function hollow($is_hollow) + { + $this->hollow = $is_hollow; + } +} + +/** + * Draw a 'bow tie' shape. + */ +class bow extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function bow($value=null) + { + parent::dot_base( 'bow', $value ); + } + + /** + * Rotate the anchor object. + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } +} + +/** + * An <i><b>n</b></i> sided shape. + */ +class anchor extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function anchor($value=null) + { + parent::dot_base( 'anchor', $value ); + } + + /** + * Rotate the anchor object. + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } + + /** + * @param $sides is an integer. Number of sides this shape has. + */ + function sides($sides) + { + $this->sides = $sides; + return $this; + } +} + +/** + * A simple dot + */ +class dot extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function dot($value=null) + { + parent::dot_base( 'dot', $value ); + } +} + +/** + * A simple dot + */ +class solid_dot extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function solid_dot($value=null) + { + parent::dot_base( 'solid-dot', $value ); + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/json_format.php b/libs/open-flash-chart/php-ofc-library/json_format.php new file mode 100644 index 0000000000..b8e3de5cb1 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/json_format.php @@ -0,0 +1,86 @@ +<?php + +// Pretty print some JSON +function json_format($json) +{ + $tab = " "; + $new_json = ""; + $indent_level = 0; + $in_string = false; + +/* + commented out by monk.e.boy 22nd May '08 + because my web server is PHP4, and + json_* are PHP5 functions... + + $json_obj = json_decode($json); + + if($json_obj === false) + return false; + + $json = json_encode($json_obj); +*/ + $len = strlen($json); + + for($c = 0; $c < $len; $c++) + { + $char = $json[$c]; + switch($char) + { + case '{': + case '[': + if(!$in_string) + { + $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1); + $indent_level++; + } + else + { + $new_json .= $char; + } + break; + case '}': + case ']': + if(!$in_string) + { + $indent_level--; + $new_json .= "\n" . str_repeat($tab, $indent_level) . $char; + } + else + { + $new_json .= $char; + } + break; + case ',': + if(!$in_string) + { + $new_json .= ",\n" . str_repeat($tab, $indent_level); + } + else + { + $new_json .= $char; + } + break; + case ':': + if(!$in_string) + { + $new_json .= ": "; + } + else + { + $new_json .= $char; + } + break; + case '"': + if($c > 0 && $json[$c-1] != '\\') + { + $in_string = !$in_string; + } + default: + $new_json .= $char; + break; + } + } + + return $new_json; +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_area_base.php b/libs/open-flash-chart/php-ofc-library/ofc_area_base.php new file mode 100644 index 0000000000..a6e811fd55 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_area_base.php @@ -0,0 +1,40 @@ +<?php + +/** + * inherits from line + */ +class area extends line +{ + function area() + { + $this->type = "area"; + } + + /** + * the fill colour + */ + function set_fill_colour( $colour ) + { + $this->fill = $colour; + } + + /** + * sugar: see set_fill_colour + */ + function fill_colour( $colour ) + { + $this->set_fill_colour( $colour ); + return $this; + } + + function set_fill_alpha( $alpha ) + { + $tmp = "fill-alpha"; + $this->$tmp = $alpha; + } + + function set_loop() + { + $this->loop = true; + } +} diff --git a/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php b/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php new file mode 100644 index 0000000000..4293af0b65 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php @@ -0,0 +1,10 @@ +<?php + +class area_hollow extends area_base +{ + function area_hollow() + { + $this->type = "area_hollow"; + parent::area_base(); + } +} diff --git a/libs/open-flash-chart/php-ofc-library/ofc_area_line.php b/libs/open-flash-chart/php-ofc-library/ofc_area_line.php new file mode 100644 index 0000000000..5731391a33 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_area_line.php @@ -0,0 +1,10 @@ +<?php + +class area_line extends area_base +{ + function area_line() + { + $this->type = "area_line"; + parent::area_base(); + } +} diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar.php b/libs/open-flash-chart/php-ofc-library/ofc_bar.php new file mode 100644 index 0000000000..6ddda42749 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar.php @@ -0,0 +1,34 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_value +{ + function bar_value( $top, $bottom=null ) + { + $this->top = $top; + + if( isset( $bottom ) ) + $this->bottom = $bottom; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class bar extends bar_base +{ + function bar() + { + $this->type = "bar"; + parent::bar_base(); + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php new file mode 100644 index 0000000000..47552184ce --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php @@ -0,0 +1,22 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_3d_value +{ + function bar_3d_value( $top ) + { + $this->top = $top; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php new file mode 100644 index 0000000000..c0105fac4b --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php @@ -0,0 +1,78 @@ +<?php + +/* this is a base class */ + +class bar_base +{ + function bar_base(){} + + /** + * @param $text as string the key text + * @param $size as integer, size in pixels + */ + function set_key( $text, $size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $size; + } + + /** + * syntatical sugar. + */ + function key( $text, $size ) + { + $this->set_key( $text, $size ); + } + + /** + * @param $v as an array, a mix of: + * - a bar_value class. You can use this to customise the paramters of each bar. + * - integer. This is the Y position of the top of the bar. + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * see set_values + */ + function append_value( $v ) + { + $this->values[] = $v; + } + + /** + * @param $colour as string, a HEX colour, e.g. '#ff0000' red + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + *syntatical sugar + */ + function colour( $colour ) + { + $this->set_colour( $colour ); + } + + /** + * @param $alpha as real number (range 0 to 1), e.g. 0.5 is half transparent + */ + function set_alpha( $alpha ) + { + $this->alpha = $alpha; + } + + /** + * @param $tip as string, the tip to show. May contain various magic variables. + */ + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php new file mode 100644 index 0000000000..837c1fc458 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php @@ -0,0 +1,39 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_filled_value extends bar_value +{ + function bar_filled_value( $top, $bottom=null ) + { + parent::bar_value( $top, $bottom ); + } + + function set_outline_colour( $outline_colour ) + { + $tmp = 'outline-colour'; + $this->$tmp = $outline_colour; + } +} + +class bar_filled extends bar_base +{ + function bar_filled( $colour=null, $outline_colour=null ) + { + $this->type = "bar_filled"; + parent::bar_base(); + + if( isset( $colour ) ) + $this->set_colour( $colour ); + + if( isset( $outline_colour ) ) + $this->set_outline_colour( $outline_colour ); + } + + function set_outline_colour( $outline_colour ) + { + $tmp = 'outline-colour'; + $this->$tmp = $outline_colour; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php new file mode 100644 index 0000000000..af829fe640 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php @@ -0,0 +1,109 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_value +{ + /** + * @param $top as integer. The Y value of the top of the bar + * @param OPTIONAL $bottom as integer. The Y value of the bottom of the bar, defaults to Y min. + */ + function bar_value( $top, $bottom=null ) + { + $this->top = $top; + + if( isset( $bottom ) ) + $this->bottom = $bottom; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class bar extends bar_base +{ + function bar() + { + $this->type = "bar"; + parent::bar_base(); + } +} + +class bar_glass extends bar_base +{ + function bar_glass() + { + $this->type = "bar_glass"; + parent::bar_base(); + } +} + +class bar_cylinder extends bar_base +{ + function bar_cylinder() + { + $this->type = "bar_cylinder"; + parent::bar_base(); + } +} + +class bar_cylinder_outline extends bar_base +{ + function bar_cylinder_outline() + { + $this->type = "bar_cylinder_outline"; + parent::bar_base(); + } +} + +class bar_rounded_glass extends bar_base +{ + function bar_rounded_glass() + { + $this->type = "bar_round_glass"; + parent::bar_base(); + } +} + +class bar_round extends bar_base +{ + function bar_round() + { + $this->type = "bar_round"; + parent::bar_base(); + } +} + +class bar_dome extends bar_base +{ + function bar_dome() + { + $this->type = "bar_dome"; + parent::bar_base(); + } +} + +class bar_round3d extends bar_base +{ + function bar_round3d() + { + $this->type = "bar_round3d"; + parent::bar_base(); + } +} + +class bar_3d extends bar_base +{ + function bar_3d() + { + $this->type = "bar_3d"; + parent::bar_base(); + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php new file mode 100644 index 0000000000..ce1bcccf8a --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php @@ -0,0 +1,29 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_sketch extends bar_base +{ + /** + * @param $colour as string, HEX colour e.g. '#00ff00' + * @param $outline_colour as string, HEX colour e.g. '#ff0000' + * @param $fun_factor as integer, range 0 to 10. 0,1 and 2 are pretty boring. + * 4 to 6 is a bit fun, 7 and above is lots of fun. + */ + function bar_sketch( $colour, $outline_colour, $fun_factor ) + { + $this->type = "bar_sketch"; + parent::bar_base(); + + $this->set_colour( $colour ); + $this->set_outline_colour( $outline_colour ); + $this->offset = $fun_factor; + } + + function set_outline_colour( $outline_colour ) + { + $tmp = 'outline-colour'; + $this->$tmp = $outline_colour; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php b/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php new file mode 100644 index 0000000000..7b8d11e4ed --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php @@ -0,0 +1,50 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class bar_stack extends bar_base +{ + function bar_stack() + { + $this->type = "bar_stack"; + parent::bar_base(); + } + + function append_stack( $v ) + { + $this->append_value( $v ); + } + + // an array of HEX colours strings + // e.g. array( '#ff0000', '#00ff00' ); + function set_colours( $colours ) + { + $this->colours = $colours; + } + + // an array of bar_stack_value + function set_keys( $keys ) + { + $this->keys = $keys; + } +} + +class bar_stack_value +{ + function bar_stack_value( $val, $colour ) + { + $this->val = $val; + $this->colour = $colour; + } +} + +class bar_stack_key +{ + function bar_stack_key( $colour, $text, $font_size ) + { + $this->colour = $colour; + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_hbar.php b/libs/open-flash-chart/php-ofc-library/ofc_hbar.php new file mode 100644 index 0000000000..6f8c0e451f --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_hbar.php @@ -0,0 +1,64 @@ +<?php + +class hbar_value +{ + function hbar_value( $left, $right=null ) + { + if( isset( $right ) ) + { + $this->left = $left; + $this->right = $right; + } + else + $this->right = $left; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class hbar +{ + function hbar( $colour ) + { + $this->type = "hbar"; + $this->values = array(); + $this->set_colour( $colour ); + } + + function append_value( $v ) + { + $this->values[] = $v; + } + + function set_values( $v ) + { + foreach( $v as $val ) + $this->append_value( new hbar_value( $val ) ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_key( $text, $size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_line.php b/libs/open-flash-chart/php-ofc-library/ofc_line.php new file mode 100644 index 0000000000..68ea03a5ce --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_line.php @@ -0,0 +1,115 @@ +<?php + +class line +{ + function line() + { + $this->type = "line"; + $this->values = array(); + } + + /** + * Set the default dot that all the real + * dots inherit their properties from. If you set the + * default dot to be red, all values in your chart that + * do not specify a colour will be red. Same for all the + * other attributes such as tooltip, on-click, size etc... + * + * @param $style as any class that inherits base_dot + */ + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + /** + * @param $v as array, can contain any combination of: + * - integer, Y position of the point + * - any class that inherits from dot_base + * - <b>null</b> + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * Append a value to the line. + * + * @param mixed $v + */ + function append_value($v) + { + $this->values[] = $v; + } + + function set_width( $width ) + { + $this->width = $width; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * sytnatical sugar for set_colour + */ + function colour( $colour ) + { + $this->set_colour( $colour ); + return $this; + } + + function set_halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + function set_on_click( $text ) + { + $tmp = 'on-click'; + $this->$tmp = $text; + } + + function loop() + { + $this->loop = true; + } + + function line_style( $s ) + { + $tmp = "line-style"; + $this->$tmp = $s; + } + + /** + * Sets the text for the line. + * + * @param string $text + */ + function set_text($text) + { + $this->text = $text; + } + + function attach_to_right_y_axis() + { + $this->axis = 'right'; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_line_base.php b/libs/open-flash-chart/php-ofc-library/ofc_line_base.php new file mode 100644 index 0000000000..fa45cbc899 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_line_base.php @@ -0,0 +1,92 @@ +<?php + +class line_base +{ + function line_base() + { + $this->type = "line"; + $this->text = "Page views"; + $tmp = 'font-size'; + $this->$tmp = 10; + + $this->values = array(); + } + + function set_values( $v ) + { + $this->values = $v; + } + + /** + * Append a value to the line. + * + * @param mixed $v + */ + function append_value($v) + { + $this->values[] = $v; + } + + function set_width( $width ) + { + $this->width = $width; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_dot_size( $size ) + { + $tmp = 'dot-size'; + $this->$tmp = $size; + } + + function set_halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + function set_on_click( $text ) + { + $tmp = 'on-click'; + $this->$tmp = $text; + } + + function loop() + { + $this->loop = true; + } + + function line_style( $s ) + { + $tmp = "line-style"; + $this->$tmp = $s; + } + + /** + * Sets the text for the line. + * + * @param string $text + */ + function set_text($text) + { + $this->text = $text; + } + + +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php b/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php new file mode 100644 index 0000000000..146691173b --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php @@ -0,0 +1,33 @@ +<?php + +class dot_value +{ + function dot_value( $value, $colour ) + { + $this->value = $value; + $this->colour = $colour; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_size( $size ) + { + $this->size = $size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class line_dot extends line_base +{ + function line_dot() + { + $this->type = "line_dot"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php b/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php new file mode 100644 index 0000000000..512bb07d97 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php @@ -0,0 +1,9 @@ +<?php + +class line_hollow extends line_base +{ + function line_hollow() + { + $this->type = "line_hollow"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_line_style.php b/libs/open-flash-chart/php-ofc-library/ofc_line_style.php new file mode 100644 index 0000000000..4f538cf9de --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_line_style.php @@ -0,0 +1,11 @@ +<?php + +class line_style +{ + function line_style($on, $off) + { + $this->style = "dash"; + $this->on = $on; + $this->off = $off; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_menu.php b/libs/open-flash-chart/php-ofc-library/ofc_menu.php new file mode 100644 index 0000000000..0750a09c2b --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_menu.php @@ -0,0 +1,56 @@ +<?php + +class ofc_menu_item +{ + /** + * @param $text as string. The menu item text. + * @param $javascript_function_name as string. The javascript function name, the + * js function takes one parameter, the chart ID. See ofc_menu_item_camera for + * some example code. + */ + function ofc_menu_item($text, $javascript_function_name) + { + $this->type = "text"; + $this->text = $text; + $tmp = 'javascript-function'; + $this->$tmp = $javascript_function_name; + } +} + +class ofc_menu_item_camera +{ + /** + * @param $text as string. The menu item text. + * @param $javascript_function_name as string. The javascript function name, the + * js function takes one parameter, the chart ID. So for example, our js function + * could look like this: + * + * function save_image( chart_id ) + * { + * alert( chart_id ); + * } + * + * to make a menu item call this: ofc_menu_item_camera('Save chart', 'save_image'); + */ + function ofc_menu_item_camera($text, $javascript_function_name) + { + $this->type = "camera-icon"; + $this->text = $text; + $tmp = 'javascript-function'; + $this->$tmp = $javascript_function_name; + } +} + +class ofc_menu +{ + function ofc_menu($colour, $outline_colour) + { + $this->colour = $colour; + $this->outline_colour = $outline_colour; + } + + function values($values) + { + $this->values = $values; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_pie.php b/libs/open-flash-chart/php-ofc-library/ofc_pie.php new file mode 100644 index 0000000000..bf779c5541 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_pie.php @@ -0,0 +1,257 @@ +<?php + +class pie_value +{ + function pie_value( $value, $label ) + { + $this->value = $value; + $this->label = $label; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_label( $label, $label_colour, $font_size ) + { + $this->label = $label; + + $tmp = 'label-colour'; + $this->$tmp = $label_colour; + + $tmp = 'font-size'; + $this->$tmp = $font_size; + + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + function on_click( $event ) + { + $tmp = 'on-click'; + $this->$tmp = $event; + } + + + /** + * An object that inherits from base_pie_animation + */ + function add_animation( $animation ) + { + if( !isset( $this->animate ) ) + $this->animate = array(); + + $this->animate[] = $animation; + + return $this; + } +} + +class base_pie_animation{} + +/** + * fade the pie slice from $alpha (pie set_alpha) to 100% opaque. + */ +class pie_fade extends base_pie_animation +{ + function pie_fade() + { + $this->type="fade"; + } +} + +/** + * Bounce the pie slice out a little + */ +class pie_bounce extends base_pie_animation +{ + /** + * @param $distance as integer, distance to bounce in pixels + */ + function pie_bounce( $distance ) + { + $this->type="bounce"; + $this->distance = $distance; + } +} + +/** + * Make a pie chart and fill it with pie slices + */ +class pie +{ + function pie() + { + $this->type = 'pie'; + } + + function set_colours( $colours ) + { + $this->colours = $colours; + } + + /** + * Sugar wrapped around set_colours + */ + function colours( $colours ) + { + $this->set_colours( $colours ); + return $this; + } + + /** + * @param $alpha as float (0-1) 0.75 = 3/4 visible + */ + function set_alpha( $alpha ) + { + $this->alpha = $alpha; + } + + /** + *sugar wrapped set_alpha + **/ + function alpha( $alpha ) + { + $this->set_alpha( $alpha ); + return $this; + } + + /** + * @param $v as array containing one of + * - null + * - real or integer number + * - a pie_value object + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * sugar for set_values + */ + function values( $v ) + { + $this->set_values( $v ); + return $this; + } + + /** + * HACK to keep old code working. + */ + function set_animate( $bool ) + { + if( $bool ) + $this->add_animation( new pie_fade() ); + + } + + /** + * An object that inherits from base_pie_animation + */ + function add_animation( $animation ) + { + if( !isset( $this->animate ) ) + $this->animate = array(); + + $this->animate[] = $animation; + + return $this; + } + + /** + * @param $angle as real number + */ + function set_start_angle( $angle ) + { + $tmp = 'start-angle'; + $this->$tmp = $angle; + } + + /** + * sugar for set_start_angle + */ + function start_angle($angle) + { + $this->set_start_angle( $angle ); + return $this; + } + + /** + * @param $tip as string. The tooltip text. May contain magic varibles + */ + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + /** + * sugar for set_tooltip + */ + function tooltip( $tip ) + { + $this->set_tooltip( $tip ); + return $this; + } + + function set_gradient_fill() + { + $tmp = 'gradient-fill'; + $this->$tmp = true; + } + + function gradient_fill() + { + $this->set_gradient_fill(); + return $this; + } + + /** + * By default each label is the same colour as the slice, + * but you can ovveride that behaviour using this method. + * + * @param $label_colour as string HEX colour; + */ + function set_label_colour( $label_colour ) + { + $tmp = 'label-colour'; + $this->$tmp = $label_colour; + } + + function label_colour( $label_colour ) + { + $this->set_label_colour( $label_colour ); + return $this; + } + + /** + * Turn off the labels + */ + function set_no_labels() + { + $tmp = 'no-labels'; + $this->$tmp = true; + } + + function on_click( $event ) + { + $tmp = 'on-click'; + $this->$tmp = $event; + } + + /** + * Fix the radius of the pie chart. Take a look at the magic variable #radius# + * for helping figure out what radius to set it to. + * + * @param $radius as number + */ + function radius( $radius ) + { + $this->radius = $radius; + return $this; + } +} diff --git a/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php b/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php new file mode 100644 index 0000000000..909c41af8f --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php @@ -0,0 +1,47 @@ +<?php + +class radar_axis +{ + function radar_axis( $max ) + { + $this->set_max( $max ); + } + + function set_max( $max ) + { + $this->max = $max; + } + + function set_steps( $steps ) + { + $this->steps = $steps; + } + + function set_stroke( $s ) + { + $this->stroke = $s; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + function set_labels( $labels ) + { + $this->labels = $labels; + } + + function set_spoke_labels( $labels ) + { + $tmp = 'spoke-labels'; + $this->$tmp = $labels; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php b/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php new file mode 100644 index 0000000000..22d485e4e6 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php @@ -0,0 +1,15 @@ +<?php + +class radar_axis_labels +{ + // $labels : array + function radar_axis_labels( $labels ) + { + $this->labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php b/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php new file mode 100644 index 0000000000..51ba25e9a7 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php @@ -0,0 +1,15 @@ +<?php + +class radar_spoke_labels +{ + // $labels : array + function radar_spoke_labels( $labels ) + { + $this->labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_scatter.php b/libs/open-flash-chart/php-ofc-library/ofc_scatter.php new file mode 100644 index 0000000000..7159a3a64f --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_scatter.php @@ -0,0 +1,47 @@ +<?php + +class scatter_value +{ + function scatter_value( $x, $y, $dot_size=-1 ) + { + $this->x = $x; + $this->y = $y; + + if( $dot_size > 0 ) + { + $tmp = 'dot-size'; + $this->$tmp = $dot_size; + } + } +} + +class scatter +{ + function scatter( $colour ) + { + $this->type = "scatter"; + $this->set_colour( $colour ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + /** + * @param $v as array, can contain any combination of: + * - integer, Y position of the point + * - any class that inherits from scatter_value + * - <b>null</b> + */ + function set_values( $values ) + { + $this->values = $values; + } +} diff --git a/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php b/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php new file mode 100644 index 0000000000..bd6c27ecf0 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php @@ -0,0 +1,43 @@ +<?php + +class scatter_line +{ + function scatter_line( $colour ) + { + $this->type = "scatter_line"; + $this->set_colour( $colour ); + } + + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_values( $values ) + { + $this->values = $values; + } + + function set_step_horizontal() + { + $this->stepgraph = 'horizontal'; + } + + function set_step_vertical() + { + $this->stepgraph = 'vertical'; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_shape.php b/libs/open-flash-chart/php-ofc-library/ofc_shape.php new file mode 100644 index 0000000000..0cfe39f9bc --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_shape.php @@ -0,0 +1,25 @@ +<?php + +class shape_point +{ + function shape_point( $x, $y ) + { + $this->x = $x; + $this->y = $y; + } +} + +class shape +{ + function shape( $colour ) + { + $this->type = "shape"; + $this->colour = $colour; + $this->values = array(); + } + + function append_value( $p ) + { + $this->values[] = $p; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_sugar.php b/libs/open-flash-chart/php-ofc-library/ofc_sugar.php new file mode 100644 index 0000000000..a9e85555ee --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_sugar.php @@ -0,0 +1,43 @@ +<?php + +/** + * Sugar: to make stars easier sometimes + */ +class s_star extends star +{ + /** + * I use this wrapper for default dot types, + * it just makes the code easier to read. + */ + function s_star($colour, $size) + { + parent::star(); + $this->colour($colour)->size($size); + } +} + +class s_box extends anchor +{ + /** + * I use this wrapper for default dot types, + * it just makes the code easier to read. + */ + function s_box($colour, $size) + { + parent::anchor(); + $this->colour($colour)->size($size)->rotation(45)->sides(4); + } +} + +class s_hollow_dot extends hollow_dot +{ + /** + * I use this wrapper for default dot types, + * it just makes the code easier to read. + */ + function s_hollow_dot($colour, $size) + { + parent::hollow_dot(); + $this->colour($colour)->size($size); + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_title.php b/libs/open-flash-chart/php-ofc-library/ofc_title.php new file mode 100644 index 0000000000..cda1de0068 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_title.php @@ -0,0 +1,39 @@ +<?php + +/** + * Set the title of a chart, make one of these and pass it into + * open_flash_chart set_title + */ +class title +{ + function title( $text='' ) + { + $this->text = $text; + } + + /** + * A css string. Can optionally contain: + * - font-size + * - font-family + * - font-weight + * - color + * - background-color + * - text-align + * - margin + * - margin-left + * - margin-right + * - margin-top + * - margin-bottom + * - padding + * - padding-left + * - padding-right + * - padding-top + * - padding-bottom + * just like the css we use all the time :-) + */ + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php b/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php new file mode 100644 index 0000000000..3104ee33b9 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php @@ -0,0 +1,67 @@ +<?php + +include_once 'ofc_bar_base.php'; + +class tooltip +{ + function tooltip(){} + + /** + * @param $shadow as boolean. Enable drop shadow. + */ + function set_shadow( $shadow ) + { + $this->shadow = $shadow; + } + + /** + * @param $stroke as integer, border width in pixels (e.g. 5 ) + */ + function set_stroke( $stroke ) + { + $this->stroke = $stroke; + } + + /** + * @param $colour as string, HEX colour e.g. '#0000ff' + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * @param $bg as string, HEX colour e.g. '#0000ff' + */ + function set_background_colour( $bg ) + { + $this->background = $bg; + } + + /** + * @param $style as string. A css style. + */ + function set_title_style( $style ) + { + $this->title = $style; + } + + /** + * @param $style as string. A css style. + */ + function set_body_style( $style ) + { + $this->body = $style; + } + + function set_proximity() + { + $this->mouse = 1; + } + + function set_hover() + { + $this->mouse = 2; + } +} + diff --git a/libs/open-flash-chart/php-ofc-library/ofc_upload_image.php b/libs/open-flash-chart/php-ofc-library/ofc_upload_image.php new file mode 100644 index 0000000000..0261f9aeae --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_upload_image.php @@ -0,0 +1,70 @@ +<?php + +// +// In Open Flash Chart -> save_image debug mode, you +// will see the 'echo' text in a new window. +// + +/* + +print_r( $_GET ); +print_r( $_POST ); +print_r( $_FILES ); + +print_r( $GLOBALS ); +print_r( $GLOBALS["HTTP_RAW_POST_DATA"] ); + +*/ + + +// default path for the image to be stored // +$default_path = '../tmp-upload-images/'; + +if (!file_exists($default_path)) mkdir($default_path, 0777, true); + +// full path to the saved image including filename // +$destination = $default_path . basename( $_GET[ 'name' ] ); + +echo 'Saving your image to: '. $destination; +// print_r( $_POST ); +// print_r( $_SERVER ); +// echo $HTTP_RAW_POST_DATA; + +// +// POST data is usually string data, but we are passing a RAW .png +// so PHP is a bit confused and $_POST is empty. But it has saved +// the raw bits into $HTTP_RAW_POST_DATA +// + +$jfh = fopen($destination, 'w') or die("can't open file"); +fwrite($jfh, $HTTP_RAW_POST_DATA); +fclose($jfh); + +// +// LOOK: +// +exit(); + + +// +// PHP5: +// + + +// default path for the image to be stored // +$default_path = 'tmp-upload-images/'; + +if (!file_exists($default_path)) mkdir($default_path, 0777, true); + +// full path to the saved image including filename // +$destination = $default_path . basename( $_FILES[ 'Filedata' ][ 'name' ] ); + +// move the image into the specified directory // +if (move_uploaded_file($_FILES[ 'Filedata' ][ 'tmp_name' ], $destination)) { + echo "The file " . basename( $_FILES[ 'Filedata' ][ 'name' ] ) . " has been uploaded;"; +} else { + echo "FILE UPLOAD FAILED"; +} + + +?> diff --git a/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php b/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php new file mode 100644 index 0000000000..aa3187c5e3 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php @@ -0,0 +1,104 @@ +<?php + +class x_axis +{ + function x_axis(){} + + /** + * @param $stroke as integer, with of the line and ticks + */ + function set_stroke( $stroke ) + { + $this->stroke = $stroke; + } + + /** + *@param $colour as string HEX colour + *@param $grid_colour as string HEX colour + */ + function set_colours( $colour, $grid_colour ) + { + $this->set_colour( $colour ); + $this->set_grid_colour( $grid_colour ); + } + + /** + *@param $colour as string HEX colour + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tick_height( $height ) + { + $tmp = 'tick-height'; + $this->$tmp = $height; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + /** + * @param $o is a boolean. If true, the X axis start half a step in + * This defaults to True + */ + function set_offset( $o ) + { + $this->offset = $o?true:false; + } + + /** + * @param $steps as integer. Which ticks are visible. + */ + function set_steps( $steps ) + { + $this->steps = $steps; + } + + /** + * @param $val as an integer, the height in pixels of the 3D bar. Mostly + * used for the 3D bar chart. + */ + function set_3d( $val ) + { + $tmp = '3d'; + $this->$tmp = $val; + } + + /** + * @param $x_axis_labels as an x_axis_labels object + * Use this to customize the labels (colour, font, etc...) + */ + function set_labels( $x_axis_labels ) + { + //$this->labels = $v; + $this->labels = $x_axis_labels; + } + + /** + * Sugar syntax: helper function to make the examples simpler. + * @param $a is an array of labels + */ + function set_labels_from_array( $a ) + { + $x_axis_labels = new x_axis_labels(); + $x_axis_labels->set_labels( $a ); + $this->labels = $x_axis_labels; + + if( isset( $this->steps ) ) + $x_axis_labels->set_steps( $this->steps ); + } + + /** + * min and max. + */ + function set_range( $min, $max ) + { + $this->min = $min; + $this->max = $max; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php b/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php new file mode 100644 index 0000000000..cf116f15f0 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php @@ -0,0 +1,45 @@ +<?php + +/** + * x_axis_label see x_axis_labels + */ +class x_axis_label +{ + function x_axis_label( $text, $colour, $size, $rotate ) + { + $this->set_text( $text ); + $this->set_colour( $colour ); + $this->set_size( $size ); + $this->set_rotate( $rotate ); + } + + function set_text( $text ) + { + $this->text = $text; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_size( $size ) + { + $this->size = $size; + } + + function set_rotate( $rotate ) + { + $this->rotate = $rotate; + } + + function set_vertical() + { + $this->rotate = "vertical"; + } + + function set_visible() + { + $this->visible = true; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php b/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php new file mode 100644 index 0000000000..860dfd5f12 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php @@ -0,0 +1,46 @@ +<?php + +class x_axis_labels +{ + function x_axis_labels(){} + + function set_steps( $steps ) + { + $this->steps = $steps; + } + + /** + * + * @param $labels as an array of [x_axis_label or string] + */ + function set_labels( $labels ) + { + $this->labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * font size in pixels + */ + function set_size( $size ) + { + $this->size = $size; + } + + /** + * rotate labels + */ + function set_vertical() + { + $this->rotate = 270; + } + + function rotate( $angle ) + { + $this->rotate = $angle; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php b/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php new file mode 100644 index 0000000000..7a25af0c28 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php @@ -0,0 +1,15 @@ +<?php + +class x_legend +{ + function x_legend( $text='' ) + { + $this->text = $text; + } + + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php b/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php new file mode 100644 index 0000000000..f8532e1573 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php @@ -0,0 +1,16 @@ +<?php + +class y_axis extends y_axis_base +{ + function y_axis(){} + + /** + * @param $colour as string. The grid are the lines inside the chart. + * HEX colour, e.g. '#ff0000' + */ + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php b/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php new file mode 100644 index 0000000000..33a2ce1d44 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php @@ -0,0 +1,131 @@ +<?php + +class y_axis_labels +{ + function y_axis_labels() + { + } + + function set_text($text) + { + $this->text = $text; + } +} + +class y_axis_base +{ + function y_axis_base(){} + + /** + * @param $s as integer, thickness of the Y axis line + */ + function set_stroke( $s ) + { + $this->stroke = $s; + } + + /** + * @param $val as integer. The length of the ticks in pixels + */ + function set_tick_length( $val ) + { + $tmp = 'tick-length'; + $this->$tmp = $val; + } + + function set_colours( $colour, $grid_colour ) + { + $this->set_colour( $colour ); + $this->set_grid_colour( $grid_colour ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + /** + * Set min and max values, also (optionally) set the steps value. + * You can reverse the chart by setting min larger than max, e.g. min = 10 + * and max = 0. + * + * @param $min as integer + * @param $max as integer + * @param $steps as integer. + */ + function set_range( $min, $max, $steps=1 ) + { + $this->min = $min; + $this->max = $max; + $this->set_steps( $steps ); + } + + /** + * Sugar for set_range + */ + function range( $min, $max, $steps=1 ) + { + $this->set_range( $min, $max, $steps ); + return $this; + } + + /** + * @param $off as Boolean. If true the Y axis is nudged up half a step. + */ + function set_offset( $off ) + { + $this->offset = $off?1:0; + } + + /** + * @param $labels as an array of string values. + * + * By default the Y axis will show from min to max, but you can override this + * by passing in your own labels. Remember the Y axis min is at the bottom, so + * the labels will go from bottom to top. + */ + function set_labels( $labels ) + { + $this->labels = $labels; + } + + /** + * Pass in some text for each label. This can contain magic variables "#val#" which + * will get replaced with the value for that Y axis label. Useful for: + * - "£#val#" + * - "#val#%" + * - "#val# million" + * + * @param $text as string. + */ + function set_label_text( $text ) + { + $tmp = new y_axis_labels(); + $tmp->set_text( $text ); + $this->labels = $tmp; + } + + /** + * @param $steps as integer. + * + * Only show every $steps label, e.g. every 10th + */ + function set_steps( $steps ) + { + $this->steps = $steps; + } + + /** + * Make the labels show vertical + */ + function set_vertical() + { + $this->rotate = "vertical"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php b/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php new file mode 100644 index 0000000000..71f7c29845 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php @@ -0,0 +1,6 @@ +<?php + +class y_axis_right extends y_axis_base +{ + function y_axis_right(){} +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/ofc_y_legend.php b/libs/open-flash-chart/php-ofc-library/ofc_y_legend.php new file mode 100644 index 0000000000..048d8b51e6 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/ofc_y_legend.php @@ -0,0 +1,15 @@ +<?php + +class y_legend +{ + function y_legend( $text='' ) + { + $this->text = $text; + } + + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php b/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php new file mode 100644 index 0000000000..6e1129f46b --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php @@ -0,0 +1,109 @@ +<?php + +function open_flash_chart_object_str( $width, $height, $url, $use_swfobject=true, $base='' ) +{ + // + // return the HTML as a string + // + return _ofc( $width, $height, $url, $use_swfobject, $base ); +} + +function open_flash_chart_object( $width, $height, $url, $use_swfobject=true, $base='' ) +{ + // + // stream the HTML into the page + // + echo _ofc( $width, $height, $url, $use_swfobject, $base ); +} + +function _ofc( $width, $height, $url, $use_swfobject, $base ) +{ + // + // I think we may use swfobject for all browsers, + // not JUST for IE... + // + //$ie = strstr(getenv('HTTP_USER_AGENT'), 'MSIE'); + + // + // escape the & and stuff: + // + $url = urlencode($url); + + // + // output buffer + // + $out = array(); + + // + // check for http or https: + // + if (isset ($_SERVER['HTTPS'])) + { + if (strtoupper ($_SERVER['HTTPS']) == 'ON') + { + $protocol = 'https'; + } + else + { + $protocol = 'http'; + } + } + else + { + $protocol = 'http'; + } + + // + // if there are more than one charts on the + // page, give each a different ID + // + global $open_flash_chart_seqno; + $obj_id = 'chart'; + $div_name = 'flashcontent'; + + //$out[] = '<script type="text/javascript" src="'. $base .'js/ofc.js"></script>'; + + if( !isset( $open_flash_chart_seqno ) ) + { + $open_flash_chart_seqno = 1; + $out[] = '<script type="text/javascript" src="'. $base .'js/swfobject.js"></script>'; + } + else + { + $open_flash_chart_seqno++; + $obj_id .= '_'. $open_flash_chart_seqno; + $div_name .= '_'. $open_flash_chart_seqno; + } + + if( $use_swfobject ) + { + // Using library for auto-enabling Flash object on IE, disabled-Javascript proof + $out[] = '<div id="'. $div_name .'"></div>'; + $out[] = '<script type="text/javascript">'; + $out[] = 'var so = new SWFObject("'. $base .'open-flash-chart.swf", "'. $obj_id .'", "'. $width . '", "' . $height . '", "9", "#FFFFFF");'; + + $out[] = 'so.addVariable("data-file", "'. $url . '");'; + + $out[] = 'so.addParam("allowScriptAccess", "always" );//"sameDomain");'; + $out[] = 'so.write("'. $div_name .'");'; + $out[] = '</script>'; + $out[] = '<noscript>'; + } + + $out[] = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' . $protocol . '://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" '; + $out[] = 'width="' . $width . '" height="' . $height . '" id="ie_'. $obj_id .'" align="middle">'; + $out[] = '<param name="allowScriptAccess" value="sameDomain" />'; + $out[] = '<param name="movie" value="'. $base .'open-flash-chart.swf?data='. $url .'" />'; + $out[] = '<param name="quality" value="high" />'; + $out[] = '<param name="bgcolor" value="#FFFFFF" />'; + $out[] = '<embed src="'. $base .'open-flash-chart.swf?data=' . $url .'" quality="high" bgcolor="#FFFFFF" width="'. $width .'" height="'. $height .'" name="'. $obj_id .'" align="middle" allowScriptAccess="sameDomain" '; + $out[] = 'type="application/x-shockwave-flash" pluginspage="' . $protocol . '://www.macromedia.com/go/getflashplayer" id="'. $obj_id .'"/>'; + $out[] = '</object>'; + + if ( $use_swfobject ) { + $out[] = '</noscript>'; + } + + return implode("\n",$out); +} +?> \ No newline at end of file diff --git a/libs/open-flash-chart/php-ofc-library/open-flash-chart.php b/libs/open-flash-chart/php-ofc-library/open-flash-chart.php new file mode 100644 index 0000000000..c3cab1a0b2 --- /dev/null +++ b/libs/open-flash-chart/php-ofc-library/open-flash-chart.php @@ -0,0 +1,174 @@ +<?php + +// var_dump(debug_backtrace()); + +// +// Omar Kilani's php C extension for encoding JSON has been incorporated in stock PHP since 5.2.0 +// http://www.aurore.net/projects/php-json/ +// +// -- Marcus Engene +// +if (! function_exists('json_encode')) +{ + include_once 'JSON.php'; +} + +include_once 'json_format.php'; + +// ofc classes +include_once 'ofc_title.php'; +include_once 'ofc_y_axis_base.php'; +include_once 'ofc_y_axis.php'; +include_once 'ofc_y_axis_right.php'; +include_once 'ofc_x_axis.php'; + + +include_once 'ofc_pie.php'; +//include_once 'ofc_bar.php'; +include_once 'ofc_bar_glass.php'; +include_once 'ofc_bar_filled.php'; +include_once 'ofc_bar_stack.php'; +//include_once 'ofc_bar_3d.php'; +include_once 'ofc_hbar.php'; +include_once 'ofc_line_base.php'; +include_once 'ofc_line.php'; +//include_once 'ofc_line_dot.php'; +//include_once 'ofc_line_hollow.php'; + +include_once 'ofc_area_base.php'; +//include_once 'ofc_area_hollow.php'; +//include_once 'ofc_area_line.php'; + +include_once 'ofc_x_legend.php'; +include_once 'ofc_y_legend.php'; +include_once 'ofc_bar_sketch.php'; +include_once 'ofc_scatter.php'; +include_once 'ofc_scatter_line.php'; +include_once 'ofc_x_axis_labels.php'; +include_once 'ofc_x_axis_label.php'; +include_once 'ofc_tooltip.php'; +include_once 'ofc_shape.php'; +include_once 'ofc_radar_axis.php'; +include_once 'ofc_radar_axis_labels.php'; +include_once 'ofc_radar_spoke_labels.php'; +include_once 'ofc_line_style.php'; + +include_once 'dot_base.php'; +include_once 'ofc_menu.php'; + +class open_flash_chart +{ + function open_flash_chart() + { + //$this->title = new title( "Many data lines" ); + $this->elements = array(); + } + + function set_title( $t ) + { + $this->title = $t; + } + + function set_x_axis( $x ) + { + $this->x_axis = $x; + } + + function set_y_axis( $y ) + { + $this->y_axis = $y; + } + + function add_y_axis( $y ) + { + $this->y_axis = $y; + } + + function set_y_axis_right( $y ) + { + $this->y_axis_right = $y; + } + + function add_element( $e ) + { + $this->elements[] = $e; + } + + function set_x_legend( $x ) + { + $this->x_legend = $x; + } + + function set_y_legend( $y ) + { + $this->y_legend = $y; + } + + function set_bg_colour( $colour ) + { + $this->bg_colour = $colour; + } + + function set_radar_axis( $radar ) + { + $this->radar_axis = $radar; + } + + function set_tooltip( $tooltip ) + { + $this->tooltip = $tooltip; + } + + /** + * This is a bit funky :( + * + * @param $num_decimals as integer. Truncate the decimals to $num_decimals, e.g. set it + * to 5 and 3.333333333 will display as 3.33333. 2.0 will display as 2 (or 2.00000 - see below) + * @param $is_fixed_num_decimals_forced as boolean. If true it will pad the decimals. + * @param $is_decimal_separator_comma as boolean + * @param $is_thousand_separator_disabled as boolean + * + * This needs a bit of love and attention + */ + function set_number_format($num_decimals, $is_fixed_num_decimals_forced, $is_decimal_separator_comma, $is_thousand_separator_disabled ) + { + $this->num_decimals = $num_decimals; + $this->is_fixed_num_decimals_forced = $is_fixed_num_decimals_forced; + $this->is_decimal_separator_comma = $is_decimal_separator_comma; + $this->is_thousand_separator_disabled = $is_thousand_separator_disabled; + } + + /** + * This is experimental and will change as we make it work + * + * @param $m as ofc_menu + */ + function set_menu($m) + { + $this->menu = $m; + } + + function toString() + { + if (function_exists('json_encode')) + { + return json_encode($this); + } + else + { + $json = new Services_JSON(); + return $json->encode( $this ); + } + } + + function toPrettyString() + { + return json_format( $this->toString() ); + } +} + + + +// +// there is no PHP end tag so we don't mess the headers up! +// \ No newline at end of file diff --git a/misc/widget_example_lastvisits.html b/misc/widget_example_lastvisits.html index 5adf21fdb2..403a3d4f88 100644 --- a/misc/widget_example_lastvisits.html +++ b/misc/widget_example_lastvisits.html @@ -1,5 +1,5 @@ <html><body> <p>Number of visits per week for the last 52 weeks</p> -<div id="widgetIframe"><iframe width="800" height="450" src="http://piwik.org/demo/index.php?module=Widgetize&action=iframe&moduleToWidgetize=VisitsSummary&actionToWidgetize=getLastVisitsGraph&idSite=1&period=week&date=last52&disableLink=1" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe></div> +<div id="widgetIframe"><iframe width="800" height="450" src="http://piwik.org/demo/index.php?module=Widgetize&action=iframe&moduleToWidgetize=VisitsSummary&actionToWidgetize=getEvolutionGraph&idSite=1&period=week&date=last52&columns[]=nb_visits&disableLink=1" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe></div> </body> </html> diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php index 530e30eef9..e8963fe272 100644 --- a/plugins/Actions/Actions.php +++ b/plugins/Actions/Actions.php @@ -52,9 +52,9 @@ class Piwik_Actions extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'Actions', 'getActions', Piwik_Translate('Actions_SubmenuPages')); - Piwik_AddWidget( 'Actions', 'getDownloads', Piwik_Translate('Actions_SubmenuDownloads')); - Piwik_AddWidget( 'Actions', 'getOutlinks', Piwik_Translate('Actions_SubmenuOutlinks')); + Piwik_AddWidget( 'Actions_Actions', 'Actions_SubmenuPages', 'Actions', 'getActions'); + Piwik_AddWidget( 'Actions_Actions', 'Actions_SubmenuOutlinks', 'Actions', 'getOutlinks'); + Piwik_AddWidget( 'Actions_Actions', 'Actions_SubmenuDownloads', 'Actions', 'getDownloads'); } function addMenus() diff --git a/plugins/CoreHome/templates/calendar.js b/plugins/CoreHome/templates/calendar.js index db71c42fe8..774ba55ed2 100644 --- a/plugins/CoreHome/templates/calendar.js +++ b/plugins/CoreHome/templates/calendar.js @@ -147,26 +147,26 @@ $(document).ready(function(){ currentText: "", customDate: isDateSelected, dayNames: [ - _pk_translate('CoreHome_DaySu'), - _pk_translate('CoreHome_DayMo'), - _pk_translate('CoreHome_DayTu'), - _pk_translate('CoreHome_DayWe'), - _pk_translate('CoreHome_DayTh'), - _pk_translate('CoreHome_DayFr'), - _pk_translate('CoreHome_DaySa')], + _pk_translate('CoreHome_DaySu_js'), + _pk_translate('CoreHome_DayMo_js'), + _pk_translate('CoreHome_DayTu_js'), + _pk_translate('CoreHome_DayWe_js'), + _pk_translate('CoreHome_DayTh_js'), + _pk_translate('CoreHome_DayFr_js'), + _pk_translate('CoreHome_DaySa_js')], monthNames: [ - _pk_translate('CoreHome_MonthJanuary'), - _pk_translate('CoreHome_MonthFebruary'), - _pk_translate('CoreHome_MonthMarch'), - _pk_translate('CoreHome_MonthApril'), - _pk_translate('CoreHome_MonthMay'), - _pk_translate('CoreHome_MonthJune'), - _pk_translate('CoreHome_MonthJuly'), - _pk_translate('CoreHome_MonthAugust'), - _pk_translate('CoreHome_MonthSeptember'), - _pk_translate('CoreHome_MonthOctober'), - _pk_translate('CoreHome_MonthNovember'), - _pk_translate('CoreHome_MonthDecember')] + _pk_translate('CoreHome_MonthJanuary_js'), + _pk_translate('CoreHome_MonthFebruary_js'), + _pk_translate('CoreHome_MonthMarch_js'), + _pk_translate('CoreHome_MonthApril_js'), + _pk_translate('CoreHome_MonthMay_js'), + _pk_translate('CoreHome_MonthJune_js'), + _pk_translate('CoreHome_MonthJuly_js'), + _pk_translate('CoreHome_MonthAugust_js'), + _pk_translate('CoreHome_MonthSeptember_js'), + _pk_translate('CoreHome_MonthOctober_js'), + _pk_translate('CoreHome_MonthNovember_js'), + _pk_translate('CoreHome_MonthDecember_js')] }, currentDate); diff --git a/plugins/CoreHome/templates/datatable.css b/plugins/CoreHome/templates/datatable.css index cb13c6553e..48fcf6824f 100644 --- a/plugins/CoreHome/templates/datatable.css +++ b/plugins/CoreHome/templates/datatable.css @@ -1,13 +1,13 @@ /*Overriding some dataTable css for better dashboard display*/ -.widgetDiv .dataTableWrapper, -.widgetDiv .dataTableAllColumnsWrapper, -.widgetDiv .dataTableGraphWrapper, -.widgetDiv .dataTableActionsWrapper, -.widgetDiv .dataTableGraphEvolutionWrapper { +.widget .dataTableWrapper, +.widget .dataTableAllColumnsWrapper, +.widget .dataTableGraphWrapper, +.widget .dataTableActionsWrapper, +.widget .dataTableGraphEvolutionWrapper { width: 100%; } -.widgetDiv { +.widget { z-index:1; } diff --git a/plugins/CoreHome/templates/datatable.js b/plugins/CoreHome/templates/datatable.js index 7c83458dff..a14b49eb83 100644 --- a/plugins/CoreHome/templates/datatable.js +++ b/plugins/CoreHome/templates/datatable.js @@ -258,12 +258,12 @@ dataTable.prototype = } if(Number(self.param.enable_filter_excludelowpop) != 0) { - string = _pk_translate('CoreHome_IncludeAllPopulation'); + string = _pk_translate('CoreHome_IncludeAllPopulation_js'); self.param.enable_filter_excludelowpop = 1; } else { - string = _pk_translate('CoreHome_ExcludeLowPopulation'); + string = _pk_translate('CoreHome_ExcludeLowPopulation_js'); self.param.enable_filter_excludelowpop = 0; } $(this).html(string); @@ -377,7 +377,7 @@ dataTable.prototype = // only show this string if there is some rows in the datatable if(totalRows != 0) { - var str = sprintf(_pk_translate('CoreHome_PageOf'),offset + '-' + offsetEndDisp,totalRows); + var str = sprintf(_pk_translate('CoreHome_PageOf_js'),offset + '-' + offsetEndDisp,totalRows); $(this).text(str); } } @@ -653,15 +653,15 @@ dataTable.prototype = // at the end of the query it will replace the ID matching the new HTML table #ID // we need to create this ID first - $(this).after( '\ - <tr>\ - <td colspan="'+numberOfColumns+'" class="cellSubDataTable">\ - <div id="'+divIdToReplaceWithSubTable+'">\ - <span id="loadingDataTable" style="display:inline"><img src="'+piwik.piwik_url+'themes/default/images/loading-blue.gif" />'+ _pk_translate('CoreHome_Loading') +'</span>\ - </div>\ - </td>\ - </tr>\ - '); + $(this).after( + '<tr>'+ + '<td colspan="'+numberOfColumns+'" class="cellSubDataTable">'+ + '<div id="'+divIdToReplaceWithSubTable+'">'+ + '<span id="loadingDataTable" style="display:inline"><img src="'+piwik.piwik_url+'themes/default/images/loading-blue.gif" />'+ _pk_translate('CoreHome_Loading_js') +'</span>'+ + '</div>'+ + '</td>'+ + '</tr>' + ); var savedActionVariable = self.param.action; diff --git a/plugins/CoreHome/templates/datatable_footer.tpl b/plugins/CoreHome/templates/datatable_footer.tpl index 2e44ebbcf7..6c3f3a0d06 100644 --- a/plugins/CoreHome/templates/datatable_footer.tpl +++ b/plugins/CoreHome/templates/datatable_footer.tpl @@ -1,5 +1,4 @@ <div id="dataTableFeatures"> - {if $properties.show_exclude_low_population} <span id="dataTableExcludeLowPopulation"></span> {/if} diff --git a/plugins/CoreHome/templates/datatable_js.tpl b/plugins/CoreHome/templates/datatable_js.tpl index acae875cf4..04aa61d391 100644 --- a/plugins/CoreHome/templates/datatable_js.tpl +++ b/plugins/CoreHome/templates/datatable_js.tpl @@ -5,7 +5,6 @@ $(document).ready(function(){literal}{{/literal} dataTables['{$properties.uniqueId}'].param = {literal}{{/literal} {foreach from=$javascriptVariablesToSet key=name item=value name=loop} {$name}: '{$value}'{if !$smarty.foreach.loop.last},{/if} - {/foreach} {literal}};{/literal} dataTables['{$properties.uniqueId}'].init('{$properties.uniqueId}'); diff --git a/plugins/CoreHome/templates/header_message.tpl b/plugins/CoreHome/templates/header_message.tpl index 577f2986d6..2a5f3a5ee6 100644 --- a/plugins/CoreHome/templates/header_message.tpl +++ b/plugins/CoreHome/templates/header_message.tpl @@ -1,10 +1,10 @@ <span id="header_message"> {if $piwikUrl == 'http://piwik.org/demo/'} - {'General_YouAreCurrentlyViewingDemoOfPiwik'|translate:"<a target='_blank' href='http://piwik.org'>Piwik</a>":"<a href='http://piwik.org/'><u>":"</u></a>":"<a href='http://piwik.org'><u>piwik.org</u></a>"} + {'General_YouAreCurrentlyViewingDemoOfPiwik'|translate:"<a target='_blank' href='http://piwik.org'>Piwik</a>":"<a href='http://piwik.org/'>":"</a>":"<a href='http://piwik.org'>piwik.org</a>"} {elseif $latest_version_available} <img src='themes/default/images/warning_small.png' alt='' style="vertical-align: middle;"> {'General_PiwikXIsAvailablePleaseUpdateNow'|translate:$latest_version_available:"<br /><a href='index.php?module=CoreUpdater&action=newVersionAvailable'>":"</a>":"<a href='misc/redirectToUrl.php?url=http://piwik.org/changelog/' target='_blank'>":"</a>"} {else} - {'General_PiwikIsACollaborativeProjectYouCanContribute'|translate:"<a href='misc/redirectToUrl.php?url=http://piwik.org'>":"$piwik_version</a>":"<br />":"<a target='_blank' href='misc/redirectToUrl.php?url=http://piwik.org/contribute/'>":"</a></u>"} + {'General_PiwikIsACollaborativeProjectYouCanContribute'|translate:"<a href='misc/redirectToUrl.php?url=http://piwik.org'>":"$piwik_version</a>":"<br />":"<a target='_blank' href='misc/redirectToUrl.php?url=http://piwik.org/contribute/'>":"</a>"} {/if} </span> diff --git a/plugins/CoreHome/templates/js_css_includes.tpl b/plugins/CoreHome/templates/js_css_includes.tpl index 606ded1728..6755d2fe7a 100644 --- a/plugins/CoreHome/templates/js_css_includes.tpl +++ b/plugins/CoreHome/templates/js_css_includes.tpl @@ -1,5 +1,3 @@ -{* when adding a script here you may want to also add it for Iframe embedded widgets - in plugins/Widgetize/templates/iframe.tpl *} <script type="text/javascript" src="libs/jquery/jquery.js"></script> <script type="text/javascript" src="themes/default/common.js"></script> <script type="text/javascript" src="libs/jquery/jquery.dimensions.js"></script> diff --git a/plugins/CoreHome/templates/piwik_tag.tpl b/plugins/CoreHome/templates/piwik_tag.tpl index 7807ceb5bd..ef25de38d4 100644 --- a/plugins/CoreHome/templates/piwik_tag.tpl +++ b/plugins/CoreHome/templates/piwik_tag.tpl @@ -1,4 +1,5 @@ {if ereg('http://127.0.0.1|http://localhost|http://piwik.org', $url)} +<div style="clear:both"></div> {literal} <!-- Piwik --> <a href="http://piwik.org" title="Web analytics" onclick="window.open(this.href);return(false);"> diff --git a/plugins/CoreHome/templates/sparkline.js b/plugins/CoreHome/templates/sparkline.js index 382f5bb2db..5753235977 100644 --- a/plugins/CoreHome/templates/sparkline.js +++ b/plugins/CoreHome/templates/sparkline.js @@ -1,58 +1,36 @@ - $(document).ready( function(){ - - //for every section - $("a[name='evolutionGraph']").each( - function() - { - //try to find the graph - var graph = $(this); - - if(graph && graph.size() > 0) - { - //try to find sparklines and add them clickable behaviour - $(this).parent().find('p').each( - function() - { - var url = ""; - //find the sparkline and get it's src attribute - $(".sparkline", this).each( - function() - { - //search viewDataTable parameter and replace it with value for chart - var reg = new RegExp("(viewDataTable=sparkline)", "g"); - url = this.src.replace(reg,'viewDataTable=generateDataChartEvolution'); - } - ); - - if(url != "") - { - $("*", this).each( - function() - { - //on click, reload the graph with the new url - $(this).click( - function() - { - //get the main page graph and reload with new data - findSWFGraph(graph.attr('graphId')+"Chart_swf").reload(url); - lazyScrollTo(graph[0], 400); - } - ); - - //on hover, change cursor to indicate clickable item - $(this).hover( - function() - { - $(this).css({ cursor: "pointer"}); - }, function (){} - ); - } - ); + $("a[name='evolutionGraph']").each( function() { + var graph = $(this); + if(graph && graph.size() > 0) { + //try to find sparklines and add them clickable behaviour + $(this).parent().find('div.sparkline').each( function() { + var url = ""; + //find the sparkline and get it's src attribute + $("img.sparkline", this).each(function() { + //search viewDataTable parameter and replace it with value for chart + var reg = new RegExp("(viewDataTable=sparkline)", "g"); + url = this.src.replace(reg,'viewDataTable=generateDataChartEvolution'); + }); + if(url != ""){ + //on click, reload the graph with the new url + $(this).click( function() { + //get the main page graph and reload with new data + findSWFGraph(graph.attr('graphId')+"Chart_swf").reload(url); + lazyScrollTo(graph[0], 400); + }); + $(this).hover( + function() { + $(this).css({ + "cursor": "pointer", + "border-bottom": "1px dashed #C3C3C3", + }); + }, + function(){ + $(this).css({"border-bottom":"1px solid white"}); } - } - ); - } + ); + } + }); } - ); -}); + }); +}); \ No newline at end of file diff --git a/plugins/CoreHome/templates/styles.css b/plugins/CoreHome/templates/styles.css index 1c86ed5d2a..d05e47494f 100644 --- a/plugins/CoreHome/templates/styles.css +++ b/plugins/CoreHome/templates/styles.css @@ -8,6 +8,7 @@ h2 { font-size: 1.6em; color: #1D3256; padding-bottom: 0.5em; + clear:both; } h3 { @@ -26,17 +27,23 @@ p { margin-left: 10px; } + /* 2 columns reports */ #leftcolumn { float: left; width: 50%; padding-left: 10px; } - #rightcolumn { float: right; width: 45%; } +/* not in widget */ +.widget #leftcolumn, .widget #rightcolumn { + float:left; + width:100%; + padding-left:10px; +} #calendar { display: block; @@ -78,8 +85,15 @@ p { border-bottom: 1px solid #520202; } -.sparkline { +div .sparkline { + float:left; + clear:both; + padding-bottom: 1px; + margin-top:10px; + border-bottom:1px solid white; +} +.sparkline img { vertical-align: middle; padding-right: 10px; + margin-top: 0; } - diff --git a/plugins/Dashboard/Controller.php b/plugins/Dashboard/Controller.php index cf6aa2c902..331f84437b 100644 --- a/plugins/Dashboard/Controller.php +++ b/plugins/Dashboard/Controller.php @@ -17,27 +17,23 @@ require_once "ViewDataTable.php"; */ class Piwik_Dashboard_Controller extends Piwik_Controller { - function getListWidgets() - { - $widgets = Piwik_GetWidgetsList(); - $json = json_encode($widgets); - return $json; - } - public function embeddedIndex() - { + { $view = new Piwik_View('Dashboard/templates/index.tpl'); $this->setGeneralVariablesView($view); - $view->layout = $this->getLayout(); - $view->availableWidgets = $this->getListWidgets(); + $view->layout = html_entity_decode($this->getLayout()); + + $view->availableWidgets = json_encode(Piwik_GetWidgetsList()); echo $view->render(); } + public function index() { - //add the header for stand-alone mode - $view = new Piwik_View('Dashboard/templates/header.tpl'); + $view = new Piwik_View('Dashboard/templates/standalone.tpl'); + $this->setGeneralVariablesView($view); + $view->layout = html_entity_decode($this->getLayout()); + $view->availableWidgets = json_encode(Piwik_GetWidgetsList()); echo $view->render(); - $this->embeddedIndex(); } /** diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php index 95162bb30d..dea80e07de 100644 --- a/plugins/Dashboard/Dashboard.php +++ b/plugins/Dashboard/Dashboard.php @@ -34,6 +34,7 @@ class Piwik_Dashboard extends Piwik_Plugin { echo ' <script type="text/javascript" src="plugins/Dashboard/templates/widgetMenu.js"></script> +<script type="text/javascript" src="libs/javascript/json2.js"></script> <script type="text/javascript" src="plugins/Dashboard/templates/Dashboard.js"></script> '; } diff --git a/plugins/Dashboard/templates/Dashboard.js b/plugins/Dashboard/templates/Dashboard.js index 7ca8f323da..de12a8fcc6 100644 --- a/plugins/Dashboard/templates/Dashboard.js +++ b/plugins/Dashboard/templates/Dashboard.js @@ -1,37 +1,10 @@ -function contains(array, searchElem) { - for(var i=0; i<array.length; i++) { - if (array[i]==searchElem) { - return true; - } - } - return false; -} - -//Default configuration of the blockUI jquery plugin -function blockUIConfig() -{ - //set default style value for blockUI - $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#000000', opacity: '0.4'}); - //disable animation effect - $.extend($.blockUI.defaults,{ fadeIn: 0, fadeOut: 0 }); - //unblock UI on 'escape' key pressed... - $(window).keydown( - function(e) - { - var key = e.keyCode || e.which; - if(key == 27) //escape key ascii code - $.unblockUI(); - } - ); -} - function dashboard() { - this.dashArea = new Object; - this.dashColumns = new Object; + this.dashboardElement = new Object; + this.dashboardColumnsElement = new Object; this.layout = ''; } - + dashboard.prototype = { //function called on dashboard initialisation @@ -40,314 +13,221 @@ dashboard.prototype = var self = this; //save some often used DOM objects - self.dashArea = $('#dashboardWidgetsArea'); - self.dashColumns = $('.col', self.dashDom); + self.dashboardElement = $('#dashboardWidgetsArea'); + self.dashboardColumnsElement = $('.col', self.dashDom); //dashboard layout self.layout = layout; //generate dashboard layout and load every displayed widgets self.generateLayout(); - - //setup widget dynamic behaviour - self.setupWidgetSortable(); + + self.makeSortable(); }, - //return the DOM corresponding to the dashboard columns - getColumns: function() + getWidgetsElementsInsideElement: function(elementToSearch) { - return this.dashColumns; + return $('.sortable:not(.dummyItem) .widget', elementToSearch); }, - //'widgetize' every created widgets: - //add an handle bar and apply 'sortable' drag&drop effect - setupWidgetSortable: function() - { - var self = this; - - //add a dummy item on each columns - self.dashColumns.each( - function() - { - $(this).append('<div class="items dummyItem"><div class="handle dummyHandle"></div></div>'); - }); - - self.hideUnnecessaryDummies(); - - self.makeSortable(); - }, - - //generate dashboard DOM corresponding to the initial layout generateLayout: function() { var self = this; - //dashboardLayout looks like : - //'Actions.getActions~Actions.getDownloads|UserCountry.getCountry|Referers.getSearchEngines'; - //'|' separate columns - //'~' separate widgets - //'.' separate plugin name from action name - var col = self.layout.split('|'); - for(var i=0; i<col.length; i++) - { - if(col[i] != '') - { - var widgets = col[i].split('~'); - for(var j=0; j<widgets.length; j++) - { - var wid = widgets[j].split('.'); - self.addWidgetAndLoad(i+1, wid[0], wid[1]); + if(typeof self.layout == 'string') { + var layout = new Object; + //Old dashboard layout format: a string that looks like 'Actions.getActions~Actions.getDownloads|UserCountry.getCountry|Referers.getSearchEngines'; + // '|' separate columns + // '~' separate widgets + // '.' separate plugin name from action name + var columns = self.layout.split('|'); + for(var columnNumber=0; columnNumber<columns.length; columnNumber++) { + if(columns[columnNumber].length == 0) { + continue; + } + var widgets = columns[columnNumber].split('~'); + layout[columnNumber] = new Object; + for(var j=0; j<widgets.length; j++) { + wid = widgets[j].split('.'); + uniqueId = 'widget'+wid[0]+wid[1]; + layout[columnNumber][j] = { + "uniqueId": uniqueId, + "parameters": { + "module": wid[0], + "action": wid[1] + } + }; } } + self.layout = layout; } - }, - - //add a new widget to the dashboard - //colnumber is the column in wich you want to add the widget - //plugin/action is the widget to load - //onTop: boolean specifying if the widget should be added on top of the column - addEmptyWidget: function(colNumber, plugin, action, onTop) - { - var self = this; - - if((plugin === "") || (action === "")) return; - - if(typeof onTop == "undefined") - onTop = false; - - var item = '<div class="items"><div class="widget"><div class="widgetLoading">'+ _pk_translate('Dashboard_LoadingWidget') +'</div><div plugin="'+plugin+'"'+' id="'+action+'" class="widgetDiv"></div></div></div>'; - - if(onTop) - { - $(self.dashColumns[colNumber-1]).prepend(item); - } - else - { - $(self.dashColumns[colNumber-1]).append(item); + layout = self.layout; + for(var columnNumber in layout) { + var widgetsInColumn = layout[columnNumber]; + for(var widgetId in widgetsInColumn) { + widgetParameters = widgetsInColumn[widgetId]["parameters"]; + uniqueId = widgetsInColumn[widgetId]["uniqueId"]; + if(uniqueId.length>0) { + self.addEmptyWidget(columnNumber, uniqueId, false); + } + } + self.addDummyWidgetAtBottomOfColumn(columnNumber); } - - //find the title of the widget - var title = self.getWidgetTitle(plugin, action); - - //add an handle to each items - var widget = $('.widgetDiv#'+action+'[plugin='+plugin+']', self.dashColumns[colNumber-1]).parents('.widget'); - self.addHandleToWidget(widget, title); - - var button = $('.button#close', widget); + + self.makeSortable(); - //Only show handle buttons on mouse hover - $(widget).hover( - function() - { - $(this).addClass('widgetHover'); - $('.handle',this).addClass('handleHover'); - button.show(); - }, - function() + // load all widgets + $('.widget', self.dashboardElement).each( function() { + var uniqueId = $(this).attr('id'); + function onWidgetLoadedReplaceElementWithContent(loadedContent) { - $(this).removeClass('widgetHover'); - $('.handle',this).removeClass('handleHover'); - button.hide(); + $('#'+uniqueId+'>.widgetContent', self.dashboardElement).html(loadedContent); } - ); - - //Bind click event on close button - button.click(function(ev){self.onDeleteItem(this, ev);}); - - self.makeSortable(); - }, - - //return widget title designated by its plugin/action couple - getWidgetTitle: function(plugin, action) - { - var self = this; - - var title = _pk_translate('Dashboard_WidgetNotFound'); - var widgets = piwik.availableWidgets[plugin]; - for(var i in widgets) - { - if(action == widgets[i][1]) - title = widgets[i][0]; - } - return title; + widget = widgetsHelper.getWidgetObjectFromUniqueId(uniqueId); + widgetParameters = widget["parameters"]; + $.ajax(widgetsHelper.getLoadWidgetAjaxRequest(uniqueId, widgetParameters, onWidgetLoadedReplaceElementWithContent)); + }); }, - //add the widget and load it - addWidgetAndLoad: function(colNumber, plugin, action, onTop) + addDummyWidgetAtBottomOfColumn: function(columnNumber) { var self = this; - - self.addEmptyWidget(colNumber, plugin, action, onTop); - self.loadItem($('.items [plugin='+plugin+']#'+action, self.dashArea).parents('.items')); + var columnElement = $(self.dashboardColumnsElement[columnNumber]); + $(columnElement).append( + '<div class="sortable dummyItem">'+ + '<div class="widgetTop dummyWidgetTop"></div>'+ + '</div>'); }, - //add an handle bar to a given widget with a particular title - addHandleToWidget: function(widget, title) + addEmptyWidget: function(columnNumber, uniqueId, addWidgetOnTop) { - widget.prepend('<div class="handle">\ - <div class="button" id="close">\ - <img src="themes/default/images/close.png" />\ - </div>\ - <div class="widgetTitle">'+title+'</div>\ - </div>'); - }, - - //auxiliary function calling ajax loading procedure for a given DOM element - loadItem: function(domElem) - { var self = this; - //load every widgetDiv with asynchronous ajax - $('.widgetDiv', domElem).each( - function() - { - // get the ID of the div and load with ajax - loadWidgetInDiv($(this).attr('plugin'), $(this).attr('id')); + widgetName = widgetsHelper.getWidgetNameFromUniqueId(uniqueId); + if(widgetName == false) { + widgetName = _pk_translate('Dashboard_WidgetNotFound_js'); + } + columnElement = $(self.dashboardColumnsElement[columnNumber]); + emptyWidgetContent = '<div class="sortable">'+ + widgetsHelper.getEmptyWidgetHtml(uniqueId, widgetName, _pk_translate('Dashboard_LoadingWidget_js'))+ + '</div>'; + if(addWidgetOnTop) { + columnElement.prepend(emptyWidgetContent); + } else { + columnElement.append(emptyWidgetContent); + } + widgetElement = $('#'+ uniqueId); + widgetElement + .hover( function() { + $(this).addClass('widgetHover'); + $('.widgetTop', this).addClass('widgetTopHover'); + $('.button#close', this).show(); + }, function() { + $(this).removeClass('widgetHover'); + $('.widgetTop', this).removeClass('widgetTopHover'); + $('.button#close', this).hide(); + }); + $('.button#close', widgetElement) + .click( function(ev){ + self.onDeleteItem(this, ev); }); + + widgetElement.show(); + return widgetElement; }, //apply jquery sortable plugin to the dashboard layout makeSortable: function() { var self = this; - - function getHelper() - { + function getHelper() { return $(this).clone().addClass('helper'); } - - function onStart() - { - self.showDummies(); + function onStart() { } - - function onStop() - { - self.hideUnnecessaryDummies(); - self.saveLayout(); - + function onStop() { $('.widgetHover', this).removeClass('widgetHover'); - $('.handleHover', this).removeClass('handleHover'); + $('.widgetTopHover', this).removeClass('widgetTopHover'); $('.button#close', this).hide(); + self.saveLayout(); } - //launch 'sortable' property on every dashboard widgets - self.dashArea.sortableDestroy() - .sortable({ - items:'.items', - hoverClass: 'hover', - handle: '.handle', - helper: getHelper, - start: onStart, - stop: onStop - }); + self.dashboardElement + .sortableDestroy() + .sortable({ + items:'.sortable', + hoverClass: 'hover', + handle: '.widgetTop', + helper: getHelper, + start: onStart, + stop: onStop + }); }, - //on mouse click on close widget button - //we ask for confirmation and we delete the widget from the dashboard + // on mouse click on close widget button + // we ask for confirmation and if 'yes' is clicked, we delete the widget from the dashboard onDeleteItem: function(target, ev) { var self = this; - //ask confirmation and delete item var question = $('.dialog#confirm'); - $('#yes', question).click(function() - { - var item = $(target).parents('.items'); - var plugin = $('.widgetDiv', item).attr('plugin'); - var action = $('.widgetDiv', item).attr('id'); - - //hide confirmation dialog + $('#no', question).click($.unblockUI); + $('#yes', question).click(function() { + var item = $(target).parents('.sortable'); $.unblockUI(); - - //the item disapear slowly and is removed from the DOM - item.fadeOut(200, function() - { - $(this).remove(); - self.showDummies(); - self.saveLayout(); - self.makeSortable(); - }); - - //show menu item - $('.menu#widgetChooser .menuItem[pluginToLoad='+plugin+'][actionToLoad='+action+']').show(); + item.fadeOut(200, function() { + $(this).remove(); + self.saveLayout(); + self.makeSortable(); + }); }); - $('#no', question).click($.unblockUI); - $.blockUI({message: question, css: { width: '300px', border:'1px solid black' }}); - }, - - //dummies are invisible item that help for widget positionning - //and keep the column visible even when there aren't widget anymore in it - showDummies: function() - { - var self = this; - $('.dummyItem').css('display', 'block'); - }, - - //see showDummies - //hide dummies that are not needed for column consistency - hideUnnecessaryDummies: function() - { - var self = this; - $('.dummyItem').each(function(){ - $(this).appendTo($(this).parent()); - if($(this).siblings().size() > 0) - $(this).css('display', 'none'); + $.blockUI({ + message: question, + css: { width: '300px', border:'1px solid black' } }); }, - //save the layout in the database/cookie so the user can - //retrieve it the next time he load the dashboard saveLayout: function() { var self = this; - var column = new Array; - //parse the dom to see how our div are organized - //build a list of widget sorted by columns - self.dashColumns.each(function() { - column.push(getWidgetInDom(this)); + // build the layout object to save + var layout = new Array; + var columnNumber = 0; + self.dashboardColumnsElement.each(function() { + layout[columnNumber] = new Array; + var items = self.getWidgetsElementsInsideElement(this); + for(var j=0; j<items.size(); j++) { + widgetElement = items[j]; + uniqueId = $(widgetElement).attr('id'); + widget = widgetsHelper.getWidgetObjectFromUniqueId(uniqueId); + widgetParameters = widget["parameters"]; + layout[columnNumber][j] = + { + "uniqueId": uniqueId, + "parameters": widgetParameters + }; + } + columnNumber++; }); - var ajaxRequest = - { - type: 'GET', - url: 'index.php', - dataType: 'html', - async: true, - error: ajaxHandleError, // Callback when the request fails - data: { module: 'Dashboard', - action: 'saveLayout' } - }; - - //write layout in a string - //using '|' as column separator - // and '~' as widget separator - var layout = ''; - for(var i=0; i<column.length; i++) - { - layout += column[i].join('~'); - layout += '|'; - } - //only save layout if it has changed - if(layout != self.layout) - { + layoutString = JSON.stringify(layout); + if(layoutString != JSON.stringify(self.layout)) { self.layout = layout; - ajaxRequest.data['layout'] = layout; + var ajaxRequest = + { + type: 'GET', + url: 'index.php', + dataType: 'html', + async: true, + error: ajaxHandleError, + data: { "module": "Dashboard", + "action": "saveLayout", + "layout": layoutString + } + }; $.ajax(ajaxRequest); } } }; - -//auxiliary function: list widgets available in a DOM tree -function getWidgetInDom(domElem) -{ - var items = $('.items:not(.dummyItem) .widgetDiv', domElem); - var widgets = new Array; - for(var i=0; i<items.size(); i++) - { - widgets.push($(items[i]).attr('plugin')+'.'+$(items[i]).attr('id')); - } - return widgets; -} diff --git a/plugins/Dashboard/templates/dashboard.css b/plugins/Dashboard/templates/dashboard.css index a13cd6867f..6717152409 100644 --- a/plugins/Dashboard/templates/dashboard.css +++ b/plugins/Dashboard/templates/dashboard.css @@ -1,14 +1,9 @@ -.widgetDiv { - display: none; -} - -/*--- end of dataTable.css modif*/ .col { float: left; width: 33%; } -.items { +.sortable { background: white; } @@ -29,7 +24,7 @@ border: 1px solid #CBD3E7; } -.handle { +.widgetTop { background: #F0F0FA; border-bottom: 1px solid #D2D9EB; width: 100%; @@ -39,19 +34,20 @@ padding-bottom: 4px; } -.handleHover { +.widgetTopHover { background: #E6E6F5; } -.widgetTitle { +.widgetName { font-size: 14pt; margin-left: 25px; } .dummyItem { width: 100%; - height: 200px; + height: 150px; display: block; + visibility:hidden; } .button { @@ -170,10 +166,6 @@ ul#widgetList { font-weight: bold; } -.previewDiv { - height: auto; -} - .widget input { background: #F7F7FF none repeat scroll 0% 50%; border: 1px solid #B3B3B3; @@ -185,3 +177,6 @@ ul#widgetList { #widgetChooser { z-index:100; } +#widgetChooser .widgetTop { + cursor:pointer; +} \ No newline at end of file diff --git a/plugins/Dashboard/templates/header.tpl b/plugins/Dashboard/templates/header.tpl index 342f53a807..724608a17c 100644 --- a/plugins/Dashboard/templates/header.tpl +++ b/plugins/Dashboard/templates/header.tpl @@ -1,23 +1,11 @@ {* This header is for loading the dashboard in stand alone mode*} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <html> -<body> +<head> {loadJavascriptTranslations plugins='CoreHome Dashboard'} - -<script type="text/javascript" src="libs/jquery/jquery.js"></script> - -<script type="text/javascript" src="themes/default/common.js"></script> -<script type="text/javascript" src="libs/jquery/jquery.dimensions.js"></script> -<script type="text/javascript" src="libs/jquery/tooltip/jquery.tooltip.js"></script> -<script type="text/javascript" src="libs/jquery/truncate/jquery.truncate.js"></script> -<script type="text/javascript" src="libs/jquery/jquery.scrollTo.js"></script> -<script type="text/javascript" src="libs/swfobject/swfobject.js"></script> - -<script type="text/javascript" src="plugins/CoreHome/templates/datatable.js"></script> - -<script type="text/javascript" src="libs/jquery/jquery.blockUI.js"></script> -<script type="text/javascript" src="libs/jquery/ui.mouse.js"></script> -<script type="text/javascript" src="libs/jquery/ui.sortable_modif.js"></script> - +{include file="CoreHome/templates/js_css_includes.tpl"} +{include file="CoreHome/templates/js_global_variables.tpl"} <link rel="stylesheet" href="plugins/CoreHome/templates/datatable.css"> <link rel="stylesheet" href="plugins/Dashboard/templates/dashboard.css"> +</head> +<body> \ No newline at end of file diff --git a/plugins/Dashboard/templates/index.tpl b/plugins/Dashboard/templates/index.tpl index a093795270..0b2f8d044a 100644 --- a/plugins/Dashboard/templates/index.tpl +++ b/plugins/Dashboard/templates/index.tpl @@ -1,25 +1,47 @@ {loadJavascriptTranslations plugins='CoreHome Dashboard'} <script type="text/javascript"> - {if !empty($layout) } - piwik.dashboardLayout = '{$layout}'; - {else} - // Load default layout... - piwik.dashboardLayout = 'VisitsSummary.getLastVisitsGraph~VisitorInterest.getNumberOfVisitsPerVisitDuration~UserSettings.getBrowser~ExampleFeedburner.feedburner|Referers.getKeywords~Referers.getWebsites|Referers.getSearchEngines~VisitTime.getVisitInformationPerServerTime~ExampleRssWidget.rssPiwik|'; - {/if} - - piwik.availableWidgets = {$availableWidgets}; +{if !empty($layout) } + piwik.dashboardLayout = {$layout}; +{else} +{literal} + piwik.dashboardLayout = + [ + [ + {"uniqueId":"widgetVisitsSummarygetEvolutionGraph","parameters":{"module":"VisitsSummary","action":"getEvolutionGraph","columns":["nb_visits"]}}, + {"uniqueId":"widgetVisitorInterestgetNumberOfVisitsPerVisitDuration","parameters":{"module":"VisitorInterest","action":"getNumberOfVisitsPerVisitDuration"}}, + {"uniqueId":"widgetUserSettingsgetBrowser","parameters":{"module":"UserSettings","action":"getBrowser"}}, + {"uniqueId":"widgetUserCountrygetCountry","parameters":{"module":"UserCountry","action":"getCountry"}}, + {"uniqueId":"widgetExampleFeedburnerfeedburner","parameters":{"module":"ExampleFeedburner","action":"feedburner"}} + ], + [ + {"uniqueId":"widgetReferersgetKeywords","parameters":{"module":"Referers","action":"getKeywords"}}, + {"uniqueId":"widgetReferersgetWebsites","parameters":{"module":"Referers","action":"getWebsites"}} + ], + [ + {"uniqueId":"widgetReferersgetSearchEngines","parameters":{"module":"Referers","action":"getSearchEngines"}}, + {"uniqueId":"widgetVisitTimegetVisitInformationPerServerTime","parameters":{"module":"VisitTime","action":"getVisitInformationPerServerTime"}}, + {"uniqueId":"widgetExampleRssWidgetrssPiwik","parameters":{"module":"ExampleRssWidget","action":"rssPiwik"}} + ] + ]; +{/literal} + + {* + the old dashboard layout style is: + piwik.dashboardLayout = 'VisitsSummary.getEvolutionGraph~VisitorInterest.getNumberOfVisitsPerVisitDuration~UserSettings.getBrowser~ExampleFeedburner.feedburner|Referers.getKeywords~Referers.getWebsites|Referers.getSearchEngines~VisitTime.getVisitInformationPerServerTime~ExampleRssWidget.rssPiwik|'; + *} +{/if} +piwik.availableWidgets = {$availableWidgets}; </script> {literal} <script type="text/javascript"> $(document).ready( function() { - var dash = new dashboard(); - var menu = new widgetMenu(dash); - blockUIConfig(); - dash.init(piwik.dashboardLayout); - menu.init(); - $('.button#addWidget').click(function(){menu.show();}); + var dashboardObject = new dashboard(); + var widgetMenuObject = new widgetMenu(dashboardObject); + dashboardObject.init(piwik.dashboardLayout); + widgetMenuObject.init(); + $('.button#addWidget').click(function(){widgetMenuObject.show();}); }); </script> {/literal} @@ -39,35 +61,16 @@ $(document).ready( function() { <div class="menu" id="widgetChooser"> <div id="closeMenuIcon"><img src="themes/default/images/close_medium.png" title="{'General_Close'|translate}"/></div> <div id="menuTitleBar">{'Dashboard_SelectWidget'|translate}</div> - <div class="subMenu" id="sub1"> - </div> - - <div class="subMenu" id="sub2"> - </div> - - <div class="subMenu" id="sub3"> - <div class="widget"> - <div class="handle" title="{'Dashboard_AddPreviewedWidget'|translate}"> - <div class="button" id="close"> - <img src="themes/default/images/close.png" title="{'General_Close'|translate}"/> - </div> - <div class="widgetTitle">{'Dashboard_WidgetPreview'|translate}</div> - </div> - <div class="widgetDiv previewDiv" ></div> - </div> - </div> - + + <div class="subMenu" id="sub1"></div> + <div class="subMenu" id="sub2"></div> + <div class="subMenu" id="sub3"></div> <div class="menuClear"> </div> </div> <div id="dashboardWidgetsArea"> - <div class="col" id="1"> - </div> - - <div class="col" id="2"> - </div> - - <div class="col" id="3"> - </div> + <div class="col" id="1"></div> + <div class="col" id="2"></div> + <div class="col" id="3"></div> </div> </div> diff --git a/plugins/Dashboard/templates/standalone.tpl b/plugins/Dashboard/templates/standalone.tpl new file mode 100644 index 0000000000..784ca3c7d5 --- /dev/null +++ b/plugins/Dashboard/templates/standalone.tpl @@ -0,0 +1,5 @@ + +{include file="Dashboard/templates/header.tpl"} +{include file="Dashboard/templates/index.tpl"} +</body> +</html> \ No newline at end of file diff --git a/plugins/Dashboard/templates/widgetMenu.js b/plugins/Dashboard/templates/widgetMenu.js index 620a27673a..701056be78 100644 --- a/plugins/Dashboard/templates/widgetMenu.js +++ b/plugins/Dashboard/templates/widgetMenu.js @@ -1,17 +1,91 @@ -//widgetMenu constructor -function widgetMenu(dash) +function widgetsHelper() +{ +} + +widgetsHelper.getWidgetCategoryNameFromUniqueId = function (uniqueId) +{ + var widgets = piwik.availableWidgets; + for(var widgetCategory in widgets) { + var widgetInCategory = widgets[widgetCategory]; + for(var i in widgetInCategory) { + if(widgetInCategory[i]["uniqueId"] == uniqueId) { + return widgetCategory; + } + } + } + return false; +}; + +widgetsHelper.getWidgetObjectFromUniqueId = function (uniqueId) +{ + var widgets = piwik.availableWidgets; + for(var widgetCategory in widgets) { + var widgetInCategory = widgets[widgetCategory]; + for(var i in widgetInCategory) { + if(widgetInCategory[i]["uniqueId"] == uniqueId) { + return widgetInCategory[i]; + } + } + } + return false; +}; + +widgetsHelper.getWidgetNameFromUniqueId = function (uniqueId) +{ + widget = this.getWidgetObjectFromUniqueId(uniqueId); + if(widget == false) { + return false; + } + return widget["name"]; +}; + +widgetsHelper.getLoadWidgetAjaxRequest = function (widgetUniqueId, widgetParameters, onWidgetLoadedCallback) +{ + var ajaxRequest = + { + widgetUniqueId:widgetUniqueId, + type: 'GET', + url: 'index.php', + dataType: 'html', + async: true, + error: ajaxHandleError, + success: onWidgetLoadedCallback, + data: piwikHelper.getQueryStringFromParameters(widgetParameters) + "&idSite="+piwik.idSite+"&period="+piwik.period+"&date="+piwik.currentDateString + }; + return ajaxRequest; +}; + +widgetsHelper.getEmptyWidgetHtml = function (uniqueId, widgetName, widgetLoadingString) +{ + return '<div id="'+uniqueId+'" class="widget">'+ + '<div class="widgetTop">'+ + '<div class="button" id="close">'+ + '<img src="themes/default/images/close.png" title="'+_pk_translate('Dashboard_Close_js')+'" />'+ + '</div>'+ + '<div class="widgetName">'+widgetName+'</div>'+ + '</div>'+ + '<div class="widgetContent">'+ + '<div class="widgetLoading">'+ + widgetLoadingString + + '</div>'+ + '</div>'+ + '</div>'; +}; + +// widgetMenu constructor +function widgetMenu(dashboard) { this.menu = new Object; - this.dashboard = dash; + this.dashboard = dashboard; } -//Prototype of the widgetMenu object +// widgetMenu object widgetMenu.prototype = { - //function called when the menu is built for the first time init: function() { var self = this; + self.menuElement = $('#widgetChooser'); self.buildMenu(); }, @@ -20,189 +94,181 @@ widgetMenu.prototype = this.onWidgetLoad = callbackOnWidgetLoad; }, - registerCallbackOnMainMenuHover: function( callbackOnMainMenuHover ) - { - this.onMainMenuHover = callbackOnMainMenuHover; - }, - - registerCallbackOnSubMenuHover: function( callbackOnSubMenuHover ) + registerCallbackOnMenuHover: function( callbackOnMenuHover ) { - this.onSubMenuHover = callbackOnSubMenuHover; - }, - - //function called when a clone of an existing menu is built - initBuilt: function(menuDom) - { - var self = this; - self.menu = menuDom; - self.bindEvents(); + this.onMenuHover = callbackOnMenuHover; }, //create DOM elements of the menu buildMenu: function() { var self = this; + var menuWidgetCategories = $('.subMenu#sub1', self.menuElement); + var menuWidgetNames = $('.subMenu#sub2', self.menuElement); - //load menu widgets list - self.menu = $('#widgetChooser'); - var subMenu1 = $('.subMenu#sub1', self.menu); - var subMenu2 = $('.subMenu#sub2', self.menu); - - subMenu1.append('<ol id="menuList"></ol>'); - subMenu2.append('<ul id="widgetList"></ul>'); - var lineHeight = $('ol', subMenu1).css('line-height'); + menuWidgetCategories.append('<ol id="menuList"></ol>'); + menuWidgetNames.append('<ul id="widgetList"></ul>'); + var lineHeight = $('ol', menuWidgetCategories).css('line-height'); lineHeight = Number(lineHeight.substring(0, lineHeight.length-2)); - var count=0; - for(var plugin in piwik.availableWidgets) - { - var widgets = piwik.availableWidgets[plugin]; - - for(var i in widgets) - { - var exist = $('.subMenuItem#'+plugin, subMenu1); - if(exist.size()==0) - { - $('ol', subMenu1).append('<li class="subMenuItem" id="'+plugin+'"><span>'+plugin+'</span></li>'); - $('ul', subMenu2).append('<li class="subMenuItem" id="'+plugin+'"></li>'); + var i=0; + for(var widgetCategory in piwik.availableWidgets) { + var widgets = piwik.availableWidgets[widgetCategory]; + for(var j in widgets) { + widgetName = widgets[j]["name"]; + widgetUniqueId = widgets[j]["uniqueId"]; + widgetParameters = widgets[j]["parameters"]; + widgetCategoryId = 'category'+i; + exist = $('.subMenuItem#'+widgetCategoryId, menuWidgetCategories); + if(exist.size() == 0) { + $('ol', menuWidgetCategories) + .append('<li class="subMenuItem" id="'+widgetCategoryId+'">'+ + '<span>'+widgetCategory+'</span>'+ + '</li>'); + $('ul', menuWidgetNames) + .append('<li class="subMenuItem" id="'+widgetCategoryId+'"></li>'); } - - var sm2Div = $('.subMenuItem#'+plugin, subMenu2); - sm2Div.append('<div class="button menuItem" pluginToLoad="'+plugin+'" actionToLoad="'+widgets[i][1]+'">'+widgets[i][0] + '</div>'); - sm2Div.css('padding-top', count*lineHeight+'px'); + // we prepend the ID with "ID" to not conflict with the <div> + // that contains the widget preview and that has the widgetUniqueId already + $('.subMenuItem#'+widgetCategoryId, menuWidgetNames) + .append('<div class="button menuWidgetName" id="'+ 'ID' + widgetUniqueId +'">'+ + widgetName + + '</div>') + .css('padding-top', i*lineHeight+'px'); } - count++; + i++; } - - $('.subMenuItem', subMenu2).hide(); + $('.subMenuItem', menuWidgetNames).hide(); + }, + + resetMenuState: function () + { + $('.menuSelected', self.menuElement).removeClass('menuSelected'); + $('#sub2 .subMenuItem', self.menuElement).hide(); + $('#sub3').empty().html('<div class="widget"></div>'); }, - //bind events (click/hover/...) of the menu to appropriate callback bindEvents: function() { var self = this; + if(typeof self.menuInitialized != 'undefined') { + return; + } + self.menuInitialized = true; - //menu buttons - $('.button#hideMenu', self.menu).click(function(){self.hide();}); - $('#closeMenuIcon', self.menu).click(function(){self.hide();}); - $('.subMenu#sub3 .widget .handle', self.menu) - .css('cursor', 'pointer') - .click(function(){self.movePreviewToDashboard();}); - - //update widget list on submenu#1 mouse over - $('.subMenu#sub1 .subMenuItem', self.menu).each(function(){ - var plugin = $(this).attr('id'); - var item = $('.subMenu#sub2 .subMenuItem#' + plugin, self.menu); - - $(this).hover( - function() - { - if(typeof self.onMainMenuHover != 'undefined') - { - self.onMainMenuHover(); - } - $('#embedThisWidget').empty(); - $('.widgetDiv.previewDiv', self.menu).empty() - .attr('plugin', '') - .attr('id', ''); - $('.menuItem', self.menu).removeClass('menuSelected'); - $('.subMenu#sub1 .subMenuItem', self.menu).removeClass('menuSelected'); - $('.subMenu#sub2 .subMenuItem', self.menu).hide(); - $(this).addClass('menuSelected'); - item.show(); - },function(){}); - }); + // Main menu (widget categories) + $('.subMenu#sub1 .subMenuItem', self.menuElement) + .hover(function() { + self.resetMenuState(); + categoryIdHovered = $(this).attr('id'); + $('#sub2 #'+categoryIdHovered, self.menuElement).show(); + $(this).addClass('menuSelected'); + }, function() {} + ); - //update widget preview on submenu#2 mouse over - $('.menuItem', self.menu) - .click( function() { if(!$(this).hasClass('menuDisabled')) self.movePreviewToDashboard(); }) - .hover( function() - { - if($(this).hasClass('menuDisabled')) - { - return; - } - var plugin = $(this).attr('pluginToLoad'); - var action = $(this).attr('actionToLoad'); - var widgetName = $(this).text(); - - if(typeof self.onSubMenuHover != 'undefined') - { - self.onSubMenuHover(plugin, action, widgetName); - } - - $('.subMenu#sub2 .menuSelected').removeClass('menuSelected'); - $(this).addClass('menuSelected'); - - $('.widgetDiv.previewDiv', self.menu).each(function(){ - //only reload preview if necessary - if($(this).attr('plugin')!=plugin || $(this).attr('id')!=action) - { - //format the div for upcomming ajax loading and set a temporary content - $(this) .attr('plugin', plugin) - .attr('id', action) - .html('<div id="loadingPiwik"><img src="themes/default/images/loading-blue.gif" /> '+ _pk_translate('Dashboard_LoadingPreview') +'</div>').show(); - $('#embedThisWidget').empty(); - loadWidgetInDiv(plugin, action, self.onWidgetLoad); + // Sub menu (each widget in the middle column) + $('.menuWidgetName', self.menuElement) + .hover( function() { + if($(this).hasClass('menuDisabled')) { + return; } - }); - },function(){}); - }, - - hide: function() - { - //simply disable modal dialog box - $.unblockUI(); + // the ID is prefixed with "ID" + widgetUniqueId = $(this).attr('id').substr(2); + + // only reload preview if necessary + if($('#sub3 .widget').attr('id') == widgetUniqueId) { + return; + } + self.expectedWidgetUniqueId = widgetUniqueId; + + widget = widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId); + widgetParameters = widget['parameters']; + + $('.subMenu#sub2 .menuSelected').removeClass('menuSelected'); + $(this).addClass('menuSelected'); + + if(typeof self.onMenuHover != 'undefined') { + self.onMenuHover(widgetUniqueId); + } + emptyWidgetHtml = widgetsHelper.getEmptyWidgetHtml( + widgetUniqueId, + '<div title="'+_pk_translate("Dashboard_AddPreviewedWidget_js")+'">'+ + _pk_translate('Dashboard_WidgetPreview_js')+ + '</div>', + '<span id="loadingPiwik">'+ + '<img src="themes/default/images/loading-blue.gif"> ' +_pk_translate('Dashboard_LoadingWidget_js') + + '</span>' + ); + $('#sub3').html(emptyWidgetHtml); + + $('#sub3 .widgetTop').click(function() { + self.movePreviewToDashboard(); + }); + + var onWidgetLoadedCallback = function (response) { + if(this.widgetUniqueId != self.expectedWidgetUniqueId) { + return; + } + widgetElement = $('#'+this.widgetUniqueId); + $('.widgetContent', widgetElement).html($(response)); + if(typeof self.onWidgetLoad != 'undefined') { + self.onWidgetLoad( widgetUniqueId, + widgetElement + ); + } + }; + ajaxRequest = widgetsHelper.getLoadWidgetAjaxRequest(widgetUniqueId, widgetParameters, onWidgetLoadedCallback); + $.ajax(ajaxRequest); + }, function() {} + ); }, show: function() { var self = this; - if(self.dashboard != undefined) - { + if(typeof self.dashboard != 'undefined') { + self.initWidgetMenuForDashboard(); self.filterOutAlreadyLoadedWidget(); - var dispMenu = $('#widgetChooser'); - $.blockUI({message: dispMenu, css: {width:'', top: '5%',left:'10%', right:'10%', margin:"0px", textAlign:'', cursor:'', border:'0px'}}); - menuDom = $('.blockMsg #widgetChooser'); + $.blockUI({ + message: self.menuElement, + css: {width:'', top: '5%',left:'10%', right:'10%', margin:"0px", textAlign:'', cursor:'', border:'0px'} + }); } - else - { - menuDom = $('#widgetChooser'); - } - var dispMenuObject = new widgetMenu(self.dashboard); - dispMenuObject.initBuilt(menuDom); - dispMenuObject.registerCallbackOnWidgetLoad(self.onWidgetLoad); - dispMenuObject.registerCallbackOnMainMenuHover(self.onMainMenuHover); - dispMenuObject.registerCallbackOnSubMenuHover(self.onSubMenuHover); + self.resetMenuState(); + self.bindEvents(); }, + hideMenu: function() + { + $.unblockUI(); + }, + filterOutAlreadyLoadedWidget: function() { var self = this; - - //build a list of loaded widget, parse the dashboard column - var widgets = new Array; - self.dashboard.getColumns().each( - function() - { - widgets = widgets.concat(getWidgetInDom(this)); + + function contains(array, searchElem) { + for(var i=0; i<array.length; i++) { + if (array[i] == searchElem) { + return true; + } } - ); - - //find widget from the loaded list in the menu, and apply - //appropriate style and behaviour - $('.menuItem', self.menu).each(function(){ - var plugin = $(this).attr('pluginToLoad'); - var action = $(this).attr('actionToLoad'); - if(contains(widgets, plugin+'.'+action)) - { + return false; + } + var widgets = self.dashboard.getWidgetsElementsInsideElement( self.dashboard.dashboardElement ); + var widgetInDashboardUniqueIds = new Array; + for(var i=0; i<widgets.size(); i++) { + widgetInDashboardUniqueIds.push($(widgets[i]).attr('id')); + } + $('.menuWidgetName', self.menuElement).each( function() { + // the ID is prefixed with "ID" + var uniqueId = $(this).attr('id').substr(2); + if(contains(widgetInDashboardUniqueIds, uniqueId)) { $(this).addClass('menuDisabled'); - $(this).attr('title', _pk_translate('Dashboard_TitleWidgetInDashboard')); - } - else - { + $(this).attr('title', _pk_translate('Dashboard_TitleWidgetInDashboard_js')); + } else { $(this).removeClass('menuDisabled'); - $(this).attr('title', _pk_translate('Dashboard_TitleClickToAdd')); + $(this).attr('title', _pk_translate('Dashboard_TitleClickToAdd_js')); } }); }, @@ -210,59 +276,46 @@ widgetMenu.prototype = movePreviewToDashboard: function() { var self = this; - - $('.widgetDiv.previewDiv', self.menu).each(function(){ - var plugin = $(this).attr('plugin'); - var action = $(this).attr('id'); - - self.dashboard.addEmptyWidget(1, plugin, action, true); - - var parDiv = $('.widgetDiv[plugin='+plugin+']'+'#'+action, self.dashboard.getColumns()[0]); - parDiv.show(); - parDiv.siblings('.widgetLoading').hide(); - - $(this).children().clone(true).appendTo(parDiv); + if(typeof self.dashboard == 'undefined') { + return; + } + $('#sub3 .widget', self.menuElement).each(function() { + uniqueId = $(this).attr('id'); + widgetAddedToDashboard = self.dashboard.addEmptyWidget(0, uniqueId, true); + widgetContentToReplace = $('.widgetContent', widgetAddedToDashboard ); + widgetContentLoadedInPreview = $('.widgetContent', this).clone(true); + widgetContentToReplace.replaceWith( widgetContentLoadedInPreview ); }); - - self.hide(); - self.clearPreviewDiv(); + self.hideMenu(); + self.dashboard.makeSortable(); self.dashboard.saveLayout(); }, - - //clear the widget preview box - clearPreviewDiv: function() + + initWidgetMenuForDashboard: function() { var self = this; - $('.subMenu .widgetDiv.previewDiv', self.menu).empty() - .attr('id', '') - .attr('plugin', ''); - $('#embedThisWidget').empty(); + if(typeof self.menuInitialized == 'undefined') { + $('.menuWidgetName', self.menuElement) + .click( function() { + if(!$(this).hasClass('menuDisabled')) { + self.movePreviewToDashboard(); + } + }); + $('.button#hideMenu', self.menuElement) + .click(function() { self.hideMenu(); } + ); + $('#closeMenuIcon', self.menuElement) + .click(function() { self.hideMenu(); } + ); + $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#000000', opacity: '0.4'}); + $.extend($.blockUI.defaults,{ fadeIn: 0, fadeOut: 0 }); + $(window).keydown( function(e) { + var key = e.keyCode || e.which; + if(key == 27) { + self.hideMenu(); + } + }); + } } }; -function loadWidgetInDiv(pluginId, actionId, callbackOnWidgetLoad) -{ - function onLoaded(response) - { - var parDiv = $('.widgetDiv#'+actionId+'[plugin='+pluginId+']'); - parDiv.siblings('.widgetLoading').hide(); - parDiv.html($(response)); - parDiv.show(); - - if(typeof callbackOnWidgetLoad != 'undefined') - { - callbackOnWidgetLoad(parDiv, pluginId, actionId); - } - } - var ajaxRequest = - { - type: 'GET', - url: 'index.php', - dataType: 'html', - async: true, - error: ajaxHandleError, - success: onLoaded, - data: "module="+pluginId+"&action="+actionId+"&idSite="+piwik.idSite+"&period="+piwik.period+"&date="+piwik.currentDateString - }; - $.ajax(ajaxRequest); -} diff --git a/plugins/ExampleFeedburner/ExampleFeedburner.php b/plugins/ExampleFeedburner/ExampleFeedburner.php index 7a50ec59c6..089be108d3 100644 --- a/plugins/ExampleFeedburner/ExampleFeedburner.php +++ b/plugins/ExampleFeedburner/ExampleFeedburner.php @@ -33,7 +33,7 @@ class Piwik_ExampleFeedburner extends Piwik_Plugin } } -Piwik_AddWidget('ExampleFeedburner', 'feedburner', 'Feedburner statistics'); +Piwik_AddWidget('Example Widgets', 'Feedburner statistics', 'ExampleFeedburner', 'feedburner'); class Piwik_ExampleFeedburner_Controller extends Piwik_Controller { @@ -44,7 +44,7 @@ class Piwik_ExampleFeedburner_Controller extends Piwik_Controller */ function feedburner() { - $view = new Piwik_View('ExampleFeedburner/feedburner.tpl'); + $view = new Piwik_View('ExampleFeedburner/templates/feedburner.tpl'); $idSite = Piwik_Common::getRequestVar('idSite',1,'int'); $feedburnerFeedName = Piwik_FetchOne('SELECT feedburnerName FROM '.Piwik::prefixTable('site'). ' WHERE idsite = ?', $idSite ); diff --git a/plugins/ExampleFeedburner/feedburner.tpl b/plugins/ExampleFeedburner/templates/feedburner.tpl similarity index 100% rename from plugins/ExampleFeedburner/feedburner.tpl rename to plugins/ExampleFeedburner/templates/feedburner.tpl diff --git a/plugins/ExamplePlugin/ExamplePlugin.php b/plugins/ExamplePlugin/ExamplePlugin.php index 36a6e84f4d..b9788b58f4 100644 --- a/plugins/ExamplePlugin/ExamplePlugin.php +++ b/plugins/ExamplePlugin/ExamplePlugin.php @@ -44,9 +44,10 @@ class Piwik_ExamplePlugin extends Piwik_Plugin function postLoad() { // we register the widgets so they appear in the "Add a new widget" window in the dashboard - Piwik_AddWidget('ExamplePlugin', 'exampleWidget', Piwik_Translate('ExamplePlugin_exampleWidget')); - Piwik_AddWidget('ExamplePlugin', 'blogPiwik', Piwik_Translate('ExamplePlugin_blogPiwikRss')); - Piwik_AddWidget('ExamplePlugin', 'photostreamMatt', Piwik_Translate('ExamplePlugin_photostreamMatt')); + // Note that the first two parameters can be either a normal string, or an index to a translation string + Piwik_AddWidget('Example Widgets', 'ExamplePlugin_exampleWidget', 'ExamplePlugin', 'exampleWidget'); + Piwik_AddWidget('Example Widgets', 'ExamplePlugin_blogPiwikRss', 'ExamplePlugin', 'blogPiwik'); + Piwik_AddWidget('Example Widgets', 'ExamplePlugin_photostreamMatt', 'ExamplePlugin', 'photostreamMatt'); } } @@ -72,7 +73,9 @@ class Piwik_ExamplePlugin_Controller extends Piwik_Controller echo "Hello world! <br> You can output whatever you want in widgets, and put them on dashboard or everywhere on the web (in your blog, website, etc.). <br>Widgets can include graphs, tables, flash, text, images, etc. <br>It's very easy to create a new plugin and widgets in Piwik. Have a look at this example file (/plugins/ExamplePlugin/ExamplePlugin.php). - <br><i>Happy coding!</i>"; + <div id='happycoding'><i>Happy coding!</i></div> + <div id='jsenabled'>You can easily use Jquery in widgets</div> + <script type=\"text/javascript\">$('#happycoding').hide().fadeIn(5000);$('#jsenabled').hide().css({'color':'red'}).fadeIn(10000);</script>"; } /** @@ -102,15 +105,15 @@ class Piwik_ExamplePlugin_Controller extends Piwik_Controller $out .= '<h2>General</h2>'; $out .= '<h3>Accessible from your plugin controller</h3>'; - $out .= '<code>$this->date</code> = current selected <b>Piwik_Date</b> object (<a href="http://piwik.org/documentation/Piwik_Helper/Piwik_Date.html">documentation</a>)<br/>'; + $out .= '<code>$this->date</code> = current selected <b>Piwik_Date</b> object (<a href="http://dev.piwik.org/trac/browser/trunk/core/Date.php">class</a>)<br/>'; $out .= '<code>$period = Piwik_Common::getRequestVar("period");</code> - Get the current selected period<br/>'; $out .= '<code>$idSite = Piwik_Common::getRequestVar("idSite");</code> - Get the selected idSite<br/>'; - $out .= '<code>$site = new Piwik_Site($idSite);</code> - Build the Piwik_Site object (<a href="http://piwik.org/documentation/Piwik_Site/Piwik_Site.html">documentation</a>)<br/>'; + $out .= '<code>$site = new Piwik_Site($idSite);</code> - Build the Piwik_Site object (<a href="http://dev.piwik.org/trac/browser/trunk/core/Site.php">class</a>)<br/>'; $out .= '<code>$this->str_date</code> = current selected date in YYYY-MM-DD format<br/>'; $out .= '<h3>Misc</h3>'; $out .= '<code>Piwik_AddMenu( $mainMenuName, $subMenuName, $url );</code> - Adds an entry to the menu in the Piwik interface (See the example in the <a href="http://dev.piwik.org/trac/browser/trunk/plugins/UserCountry/UserCountry.php#L146">UserCountry Plugin file</a>)<br/>'; - $out .= '<code>Piwik_AddWidget( $pluginName, $controllerMethodToCall, $widgetTitle );</code> - Adds an entry to the menu in the Piwik interface (See the example in the <a href="http://dev.piwik.org/trac/browser/trunk/plugins/UserCountry/UserCountry.php#L143">UserCountry Plugin file</a>)<br/>'; + $out .= '<code>Piwik_AddWidget( $widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters = array());</code> - Adds a widget that users can add in the dashboard, or export using the Widgets link at the top of the screen. See the example in the <a href="http://dev.piwik.org/trac/browser/trunk/plugins/UserCountry/UserCountry.php#L143">UserCountry Plugin file</a> or any other plugin)<br/>'; $out .= '<code>Piwik::prefixTable("site")</code> = <b>' . Piwik::prefixTable("site") . '</b><br/>'; diff --git a/plugins/ExampleRssWidget/ExampleRssWidget.php b/plugins/ExampleRssWidget/ExampleRssWidget.php index 7130c6cd70..57bbb64b9e 100644 --- a/plugins/ExampleRssWidget/ExampleRssWidget.php +++ b/plugins/ExampleRssWidget/ExampleRssWidget.php @@ -20,12 +20,12 @@ class Piwik_ExampleRssWidget extends Piwik_Plugin function css() { - echo '<link rel="stylesheet" type="text/css" href="plugins/ExampleRssWidget/styles.css" />'; + echo '<link rel="stylesheet" type="text/css" href="plugins/ExampleRssWidget/templates/styles.css" />'; } } -Piwik_AddWidget('ExampleRssWidget', 'rssPiwik', 'Piwik.org Blog'); -Piwik_AddWidget('ExampleRssWidget', 'rssChangelog', 'Piwik Changelog'); +Piwik_AddWidget('Example Widgets', 'Piwik.org Blog', 'ExampleRssWidget', 'rssPiwik'); +Piwik_AddWidget('Example Widgets', 'Piwik Changelog', 'ExampleRssWidget', 'rssChangelog'); class Piwik_ExampleRssWidget_Controller extends Piwik_Controller { diff --git a/plugins/ExampleRssWidget/styles.css b/plugins/ExampleRssWidget/templates/styles.css similarity index 100% rename from plugins/ExampleRssWidget/styles.css rename to plugins/ExampleRssWidget/templates/styles.css diff --git a/plugins/Feedback/Controller.php b/plugins/Feedback/Controller.php index 733ee36225..a1833e3fa0 100644 --- a/plugins/Feedback/Controller.php +++ b/plugins/Feedback/Controller.php @@ -17,7 +17,7 @@ class Piwik_Feedback_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('Feedback/index.tpl'); + $view = new Piwik_View('Feedback/templates/index.tpl'); echo $view->render(); } @@ -29,7 +29,7 @@ class Piwik_Feedback_Controller extends Piwik_Controller $body = Piwik_Common::getRequestVar('body', '', 'string'); $email = Piwik_Common::getRequestVar('email', '', 'string'); - $view = new Piwik_View('Feedback/sent.tpl'); + $view = new Piwik_View('Feedback/templates/sent.tpl'); try { $minimumBodyLength = 10; diff --git a/plugins/Feedback/index.tpl b/plugins/Feedback/templates/index.tpl similarity index 100% rename from plugins/Feedback/index.tpl rename to plugins/Feedback/templates/index.tpl diff --git a/plugins/Feedback/sent.tpl b/plugins/Feedback/templates/sent.tpl similarity index 100% rename from plugins/Feedback/sent.tpl rename to plugins/Feedback/templates/sent.tpl diff --git a/plugins/Goals/API.php b/plugins/Goals/API.php index b3935612a5..ef1ee36216 100644 --- a/plugins/Goals/API.php +++ b/plugins/Goals/API.php @@ -151,7 +151,8 @@ class Piwik_Goals_API $nbVisitsReturning = $request->process(); // echo $nbVisitsConvertedReturningVisitors; // echo "<br>". $nbVisitsReturning;exit; - return $this->getPercentage($nbVisitsConvertedReturningVisitors, $nbVisitsReturning); + + return Piwik::getPercentageSafe($nbVisitsConvertedReturningVisitors, $nbVisitsReturning, Piwik_Goals::ROUNDING_PRECISION); } public function getConversionRateNewVisitors( $idSite, $period, $date, $idGoal = false ) @@ -176,26 +177,29 @@ class Piwik_Goals_API $request = new Piwik_API_Request("method=VisitsSummary.getVisits&idSite=$idSite&period=$period&date=$date&format=original"); $nbVisits = $request->process(); $newVisits = $nbVisits - $nbVisitsReturning; - return $this->getPercentage($convertedNewVisits, $newVisits); - } - - protected function getPercentage($a, $b) - { - if($b == 0) - { - return 0; - } - return round(100 * $a / $b, Piwik_Goals::ROUNDING_PRECISION); + return Piwik::getPercentageSafe($convertedNewVisits, $newVisits, Piwik_Goals::ROUNDING_PRECISION); } - public function get( $idSite, $period, $date, $idGoal = false ) + public function get( $idSite, $period, $date, $idGoal = false, $columns = array() ) { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date ); - $toFetch = array( Piwik_Goals::getRecordName('nb_conversions', $idGoal), - Piwik_Goals::getRecordName('conversion_rate', $idGoal), - Piwik_Goals::getRecordName('revenue', $idGoal), - ); + if(!empty($columns)) + { + $toFetch = $columns; + } + else + { + $toFetch = array( + 'nb_conversions', + 'conversion_rate', + 'revenue', + ); + foreach($toFetch as &$columnName) + { + $columnName = Piwik_Goals::getRecordName($columnName, $idGoal); + } + } $dataTable = $archive->getDataTableFromNumeric($toFetch); return $dataTable; } diff --git a/plugins/Goals/Controller.php b/plugins/Goals/Controller.php index 869b66b540..2476dbd81f 100644 --- a/plugins/Goals/Controller.php +++ b/plugins/Goals/Controller.php @@ -4,16 +4,22 @@ require_once "Goals/API.php"; class Piwik_Goals_Controller extends Piwik_Controller { const CONVERSION_RATE_PRECISION = 1; + + function __construct() + { + parent::__construct(); + $this->idSite = Piwik_Common::getRequestVar('idSite'); + $this->goals = Piwik_Goals_API::getGoals($this->idSite); + } + function goalReport() { $idGoal = Piwik_Common::getRequestVar('idGoal', null, 'int'); - $idSite = Piwik_Common::getRequestVar('idSite'); - $goals = Piwik_Goals_API::getGoals($idSite); - if(!isset($goals[$idGoal])) + if(!isset($this->goals[$idGoal])) { throw new Exception("idgoal $idGoal not valid."); } - $goalDefinition = $goals[$idGoal]; + $goalDefinition = $this->goals[$idGoal]; $view = new Piwik_View('Goals/templates/single_goal.tpl'); $view->currency = Piwik::getCurrency(); @@ -24,8 +30,8 @@ class Piwik_Goals_Controller extends Piwik_Controller } $view->name = $goalDefinition['name']; $view->title = $goalDefinition['name'] . ' - Conversions'; - $view->graphEvolution = $this->getLastNbConversionsGraph(true); - $view->nameGraphEvolution = 'GoalsgetLastNbConversionsGraph'; // must be the function name used above + $view->graphEvolution = $this->getEvolutionGraph(true, array(Piwik_Goals::getRecordName('nb_conversions', $idGoal)), $idGoal); + $view->nameGraphEvolution = 'GoalsgetEvolutionGraph'; $view->topSegments = $this->getTopSegments($idGoal); // conversion rate for new and returning visitors @@ -80,18 +86,19 @@ class Piwik_Goals_Controller extends Piwik_Controller return $topSegments; } - protected function getMetricsForGoal($goalId) + protected function getMetricsForGoal($idGoal) { - $request = new Piwik_API_Request("method=Goals.get&format=original&idGoal=$goalId"); + $request = new Piwik_API_Request("method=Goals.get&format=original&idGoal=$idGoal"); $datatable = $request->process(); + $dataRow = $datatable->getFirstRow(); return array ( - 'id' => $goalId, - 'nb_conversions' => $datatable->getRowFromLabel(Piwik_Goals::getRecordName('nb_conversions', $goalId))->getColumn('value'), - 'conversion_rate' => round($datatable->getRowFromLabel(Piwik_Goals::getRecordName('conversion_rate', $goalId))->getColumn('value'), 1), - 'revenue' => $datatable->getRowFromLabel(Piwik_Goals::getRecordName('revenue', $goalId))->getColumn('value'), - 'urlSparklineConversions' => $this->getUrlSparkline('getLastNbConversionsGraph', $goalId) . "&idGoal=".$goalId, - 'urlSparklineConversionRate' => $this->getUrlSparkline('getLastConversionRateGraph', $goalId) . "&idGoal=".$goalId, - 'urlSparklineRevenue' => $this->getUrlSparkline('getLastRevenueGraph', $goalId) . "&idGoal=".$goalId, + 'id' => $idGoal, + 'nb_conversions' => $dataRow->getColumn(Piwik_Goals::getRecordName('nb_conversions', $idGoal)), + 'conversion_rate' => round($dataRow->getColumn(Piwik_Goals::getRecordName('conversion_rate', $idGoal)), 1), + 'revenue' => $dataRow->getColumn(Piwik_Goals::getRecordName('revenue', $idGoal)), + 'urlSparklineConversions' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('nb_conversions', $idGoal)), 'idGoal' => $idGoal)), + 'urlSparklineConversionRate' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('conversion_rate', $idGoal)), 'idGoal' => $idGoal)), + 'urlSparklineRevenue' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('revenue', $idGoal)), 'idGoal' => $idGoal)), ); } @@ -101,57 +108,98 @@ class Piwik_Goals_Controller extends Piwik_Controller $view->currency = Piwik::getCurrency(); $view->title = 'All goals - evolution'; - $view->graphEvolution = $this->getLastNbConversionsGraph(true); - $view->nameGraphEvolution = 'GoalsgetLastNbConversionsGraph'; // must be the function name used above + $view->graphEvolution = $this->getEvolutionGraph(true, array(Piwik_Goals::getRecordName('nb_conversions'))); + $view->nameGraphEvolution = 'GoalsgetEvolutionGraph'; // sparkline for the historical data of the above values - $view->urlSparklineConversions = $this->getUrlSparkline('getLastNbConversionsGraph'); - $view->urlSparklineConversionRate = $this->getUrlSparkline('getLastConversionRateGraph'); - $view->urlSparklineRevenue = $this->getUrlSparkline('getLastRevenueGraph'); + $view->urlSparklineConversions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('nb_conversions')))); + $view->urlSparklineConversionRate = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('conversion_rate')))); + $view->urlSparklineRevenue = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array(Piwik_Goals::getRecordName('revenue')))); $request = new Piwik_API_Request("method=Goals.get&format=original"); $datatable = $request->process(); - $view->nb_conversions = $datatable->getRowFromLabel('Goal_nb_conversions')->getColumn('value'); - $view->conversion_rate = $datatable->getRowFromLabel('Goal_conversion_rate')->getColumn('value'); - $view->revenue = $datatable->getRowFromLabel('Goal_revenue')->getColumn('value'); + $dataRow = $datatable->getFirstRow(); + $view->nb_conversions = $dataRow->getColumn('Goal_nb_conversions'); + $view->conversion_rate = $dataRow->getColumn('Goal_conversion_rate'); + $view->revenue = $dataRow->getColumn('Goal_revenue'); $goalMetrics = array(); - - $idSite = Piwik_Common::getRequestVar('idSite'); - $goals = Piwik_Goals_API::getGoals($idSite); - foreach($goals as $idGoal => $goal) + foreach($this->goals as $idGoal => $goal) { $goalMetrics[$idGoal] = $this->getMetricsForGoal($idGoal); $goalMetrics[$idGoal]['name'] = $goal['name']; } $view->goalMetrics = $goalMetrics; - $view->goals = $goals; - $view->goalsJSON = json_encode($goals); - $view->userCanEditGoals = Piwik::isUserHasAdminAccess($idSite); + $view->goals = $this->goals; + $view->goalsJSON = json_encode($this->goals); + $view->userCanEditGoals = Piwik::isUserHasAdminAccess($this->idSite); echo $view->render(); } function addNewGoal() { $view = new Piwik_View('Goals/templates/add_new_goal.tpl'); - $idSite = Piwik_Common::getRequestVar('idSite'); - $view->userCanEditGoals = Piwik::isUserHasAdminAccess($idSite); + $view->userCanEditGoals = Piwik::isUserHasAdminAccess($this->idSite); $view->currency = Piwik::getCurrency(); $view->onlyShowAddNewGoal = true; echo $view->render(); } + protected $goalColumnNameToLabel = array( + 'nb_conversions' => 'Goals_ColumnConversions', + 'conversion_rate'=> 'Goals_ColumnConversionRate', + 'revenue' => 'Goals_ColumnRevenue', + ); + + public function getEvolutionGraph( $fetch = false, $columns = false, $idGoal = false) + { + if(empty($columns)) + { + $columns = Piwik_Common::getRequestVar('columns'); + } + if(empty($idGoal)) + { + $idGoal = Piwik_Common::getRequestVar('idGoal', false); + } + $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Goals.get'); + $view->setParametersToModify(array('idGoal' => $idGoal)); + + foreach($columns as $columnName) + { + // find the right translation for this column, eg. find 'revenue' if column is Goal_1_revenue + foreach($this->goalColumnNameToLabel as $metric => $metricTranslation) + { + if(strpos($columnName, $metric) !== false) + { + $columnTranslation = Piwik_Translate($metricTranslation); + break; + } + } + + if(!empty($idGoal)) + { + $goalName = $this->goals[$idGoal]['name']; + $columnTranslation = "$columnTranslation (goal \"$goalName\")"; + } + $view->setColumnTranslation($columnName, $columnTranslation); + } + $view->setColumnsToDisplay($columns); + return $this->renderView($view, $fetch); + } + function getLastNbConversionsGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Goals.getConversions'); return $this->renderView($view, $fetch); } + function getLastConversionRateGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Goals.getConversionRate'); return $this->renderView($view, $fetch); } + function getLastRevenueGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Goals.getRevenue'); diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php index 2fdd6206f7..d75c29dbc7 100644 --- a/plugins/Goals/Goals.php +++ b/plugins/Goals/Goals.php @@ -59,7 +59,6 @@ class Piwik_Goals extends Piwik_Plugin function addWidgets() { -// Piwik_AddWidget( 'Referers', 'getKeywords', Piwik_Translate('Referers_WidgetKeywords')); } function addMenus() diff --git a/plugins/Goals/templates/overview.tpl b/plugins/Goals/templates/overview.tpl index 7bf8f4c25f..f87b72b1bf 100644 --- a/plugins/Goals/templates/overview.tpl +++ b/plugins/Goals/templates/overview.tpl @@ -5,18 +5,15 @@ {assign var=nb_conversions value=$goal.nb_conversions} {assign var=conversion_rate value=$goal.conversion_rate} <h2 style="padding-top: 30px;">{$goal.name} (goal)</h2> -<table width=700px> - <tr><td> - <p>{sparkline src=$goal.urlSparklineConversions}<span> - {'%s conversions'|translate:"<strong>$nb_conversions</strong>"}</span></p> - </td><td> - <p>{sparkline src=$goal.urlSparklineConversionRate}<span> - {'%s conversion rate'|translate:"<strong>$conversion_rate%</strong>"}</span></p> - </td><td> +<div id='leftcolumn'> + <div class="sparkline">{sparkline src=$goal.urlSparklineConversions} + {'%s conversions'|translate:"<strong>$nb_conversions</strong>"}</div> +</div> +<div id='rightcolumn'> + <div class="sparkline">{sparkline src=$goal.urlSparklineConversionRate} + {'%s conversion rate'|translate:"<strong>$conversion_rate%</strong>"}</div> {* (<a href=''>more</a>) *} - </td></tr> -</table> - +</div> {/foreach} {if $userCanEditGoals} diff --git a/plugins/Goals/templates/release_notes.tpl b/plugins/Goals/templates/release_notes.tpl index 2a55ccfee6..6b5a089789 100644 --- a/plugins/Goals/templates/release_notes.tpl +++ b/plugins/Goals/templates/release_notes.tpl @@ -1,4 +1,5 @@ -<hr> +<div style="clear:both" /> +<br><br><hr> <b>About the Goal Tracking Plugin</b><br> <pre> The Goal Tracking Plugin is in alpha release. There is more coming soon! @@ -13,6 +14,7 @@ The Goal Tracking Plugin is in alpha release. There is more coming soon! - documentation, eg. http://feedproxy.google.com/~r/WebAnalyticsWorld/~3/1g5Z7k7jDKQ/10-must-track-google-analytics-goals.html - internationalization of all strings i18n - provide documentation, screenshots, blog post + add screenshot and inline help in "Add a New Goal" +- way to test a URL against the regex Known bugs - need to clarify that goals are triggered once per visit max, but can be triggered multiple times by one unique visitor > need option to force only once per uniq visitor? (ie. e-commerce transaction) diff --git a/plugins/Goals/templates/title_and_evolution_graph.tpl b/plugins/Goals/templates/title_and_evolution_graph.tpl index 0b1b8d2c7b..8a344df003 100644 --- a/plugins/Goals/templates/title_and_evolution_graph.tpl +++ b/plugins/Goals/templates/title_and_evolution_graph.tpl @@ -4,17 +4,15 @@ <h2>{$title}</h2> {$graphEvolution} -<table> - <tr><td> - <p>{sparkline src=$urlSparklineConversions}<span> - {'%s conversions'|translate:"<strong>$nb_conversions</strong>"}</span></p> - {if $revenue != 0 } - <p>{sparkline src=$urlSparklineRevenue}<span> - {'%s overall revenue'|translate:"<strong>$currency$revenue</strong>"}</span></p> - {/if} - </td><td valign="top"> - <p>{sparkline src=$urlSparklineConversionRate}<span> - {'%s overall conversion rate (visits with a completed goal)'|translate:"<strong>$conversion_rate%</strong>"}</span></p> - </td></tr> -</table> - +<div id='leftcolumn'> + <div class="sparkline">{sparkline src=$urlSparklineConversions} + {'%s conversions'|translate:"<strong>$nb_conversions</strong>"}</div> + {if $revenue != 0 } + <div class="sparkline">{sparkline src=$urlSparklineRevenue} + {'%s overall revenue'|translate:"<strong>$currency$revenue</strong>"}</div> + {/if} +</div> +<div id='rightcolumn'> + <div class="sparkline">{sparkline src=$urlSparklineConversionRate} + {'%s overall conversion rate (visits with a completed goal)'|translate:"<strong>$conversion_rate%</strong>"}</div> +</div> diff --git a/plugins/Live/API.php b/plugins/Live/API.php index 9757cf3db2..a2638c59d7 100644 --- a/plugins/Live/API.php +++ b/plugins/Live/API.php @@ -74,7 +74,8 @@ class Piwik_Live_API $visitor = new Piwik_Live_Visitor($visitorDetail); $visitorDetailsArray = $visitor->getAllVisitorDetails(); $dateTimeVisit = Piwik_Date::factory($visitorDetailsArray['firstActionTimestamp']); - $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized('%a %d %b'); + //TODO TO FIX + $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized('%longDay% %d %b'); $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized('%X'); $table->addRowFromArray( array(Piwik_DataTable_Row::COLUMNS => $visitorDetailsArray)); } diff --git a/plugins/Live/Live.php b/plugins/Live/Live.php index a8078b4c45..ce280aed64 100644 --- a/plugins/Live/Live.php +++ b/plugins/Live/Live.php @@ -28,4 +28,4 @@ class Piwik_Live extends Piwik_Plugin } } -Piwik_AddWidget('Live', 'widget', 'Live Visitors!'); \ No newline at end of file +Piwik_AddWidget('Live!', 'Live Visitors!', 'Live', 'widget'); \ No newline at end of file diff --git a/plugins/Provider/Provider.php b/plugins/Provider/Provider.php index 0dcdf42426..963f01685d 100644 --- a/plugins/Provider/Provider.php +++ b/plugins/Provider/Provider.php @@ -62,7 +62,7 @@ class Piwik_Provider extends Piwik_Plugin function addWidget() { - Piwik_AddWidget( 'Provider', 'getProvider', Piwik_Translate('Provider_WidgetProviders')); + Piwik_AddWidget('General_Visitors', 'Provider_WidgetProviders', 'Provider', 'getProvider'); } function addMenu() diff --git a/plugins/Referers/API.php b/plugins/Referers/API.php index 47a214d190..9d8534cd69 100644 --- a/plugins/Referers/API.php +++ b/plugins/Referers/API.php @@ -140,7 +140,7 @@ class Piwik_Referers_API { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date ); - return $archive->getDataTableFromNumeric($name); + return $archive->getNumeric($name); } } diff --git a/plugins/Referers/Controller.php b/plugins/Referers/Controller.php index 32f7657ac4..1ae05933c9 100644 --- a/plugins/Referers/Controller.php +++ b/plugins/Referers/Controller.php @@ -5,8 +5,8 @@ class Piwik_Referers_Controller extends Piwik_Controller { $view = new Piwik_View('Referers/templates/index.tpl'); - $view->graphEvolutionReferers = $this->getLastDirectEntryGraph(true); - $view->nameGraphEvolutionReferers = 'ReferersgetLastDirectEntryGraph'; // must be the function name used above + $view->graphEvolutionReferers = $this->getEvolutionGraph(true, Piwik_Common::REFERER_TYPE_DIRECT_ENTRY, array('nb_visits')); + $view->nameGraphEvolutionReferers = 'ReferersgetEvolutionGraph'; // must be the function name used above TODO why? $view->numberDistinctSearchEngines = $this->getNumberOfDistinctSearchEngines(true); $view->numberDistinctKeywords = $this->getNumberOfDistinctKeywords(true); @@ -23,10 +23,10 @@ class Piwik_Referers_Controller extends Piwik_Controller $view->$name = $value; } // sparkline for the historical data of the above values - $view->urlSparklineSearchEngines = $this->getUrlSparkline('getLastSearchEnginesGraph'); - $view->urlSparklineDirectEntry = $this->getUrlSparkline('getLastDirectEntryGraph'); - $view->urlSparklineWebsites = $this->getUrlSparkline('getLastWebsitesGraph'); - $view->urlSparklineCampaigns = $this->getUrlSparkline('getLastCampaignsGraph'); + $view->urlSparklineSearchEngines = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_SEARCH_ENGINE)); + $view->urlSparklineDirectEntry = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_DIRECT_ENTRY)); + $view->urlSparklineWebsites = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_WEBSITE)); + $view->urlSparklineCampaigns = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_CAMPAIGN)); // sparklines for the evolution of the distinct keywords count/websites count/ etc $view->urlSparklineDistinctSearchEngines = $this->getUrlSparkline('getLastDistinctSearchEnginesGraph'); @@ -179,9 +179,10 @@ class Piwik_Referers_Controller extends Piwik_Controller } + // TODO FIXME WITH NEW API + // example of how to show evolution of a given column over multiple days public function getSearchEnginesEvolution($fetch = false) { - // TODO example of how to show evolution of a given column over multiple days $view = Piwik_ViewDataTable::factory('graphEvolution'); $view->init( $this->pluginName, __FUNCTION__, 'Referers.getSearchEngines' ); @@ -221,50 +222,73 @@ class Piwik_Referers_Controller extends Piwik_Controller } return $return; } - function getLastSearchEnginesGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, 'Referers.getRefererType'); - $view->setSearchPattern(Piwik_Common::REFERER_TYPE_SEARCH_ENGINE, 'label'); - return $this->renderView($view, $fetch); - } - function getLastDirectEntryGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, 'Referers.getRefererType'); - $view->setSearchPattern(Piwik_Common::REFERER_TYPE_DIRECT_ENTRY, 'label'); - return $this->renderView($view, $fetch); - } - function getLastWebsitesGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, 'Referers.getRefererType'); - $view->setSearchPattern(Piwik_Common::REFERER_TYPE_WEBSITE, 'label'); - return $this->renderView($view, $fetch); - } - function getLastCampaignsGraph( $fetch = false ) + + protected $refererTypeToLabel = array( + Piwik_Common::REFERER_TYPE_DIRECT_ENTRY => 'Referers_DirectEntry', + Piwik_Common::REFERER_TYPE_SEARCH_ENGINE => 'Referers_SearchEngines', + Piwik_Common::REFERER_TYPE_WEBSITE => 'Referers_Websites', + Piwik_Common::REFERER_TYPE_CAMPAIGN => 'Referers_Campaigns', + ); + + public function getEvolutionGraph( $fetch = false, $typeReferer = false, $columns = false) { - $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, 'Referers.getRefererType'); - $view->setSearchPattern(Piwik_Common::REFERER_TYPE_CAMPAIGN, 'label'); + $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Referers.getRefererType'); + if(empty($columns)) + { + $columns = Piwik_Common::getRequestVar('columns'); + } + if(empty($typeReferer)) + { + $typeReferer = Piwik_Common::getRequestVar('typeReferer'); + } + $view->setColumnsToDisplay($columns); + $view->setSearchPattern($typeReferer, 'label'); + $view->setParametersToModify(array('typeReferer' => $typeReferer)); + foreach($columns as $columnName) + { + $columnTranslation = $this->standardColumnNameToTranslation[$columnName]; + $refererTypeTranslation = $this->refererTypeToLabel[$typeReferer]; + $view->setColumnTranslation( + $columnName, + Piwik_Translate('Referers_MetricsFromRefererTypeGraphLegend', + array( Piwik_Translate($columnTranslation), + Piwik_Translate($refererTypeTranslation) + ) + ) + ); + } return $this->renderView($view, $fetch); } + function getLastDistinctSearchEnginesGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, "Referers.getNumberOfDistinctSearchEngines"); + $view->setColumnTranslation('Referers_distinctSearchEngines', ucfirst(Piwik_Translate('Referers_DistinctSearchEngines'))); + $view->setColumnsToDisplay(array('Referers_distinctSearchEngines')); return $this->renderView($view, $fetch); } function getLastDistinctKeywordsGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, "Referers.getNumberOfDistinctKeywords"); + $view->setColumnTranslation('Referers_distinctKeywords', ucfirst(Piwik_Translate('Referers_DistinctKeywords'))); + $view->setColumnsToDisplay(array('Referers_distinctKeywords')); return $this->renderView($view, $fetch); } function getLastDistinctWebsitesGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, "Referers.getNumberOfDistinctWebsites"); + $view->setColumnTranslation('Referers_distinctWebsites', ucfirst(Piwik_Translate('Referers_DistinctWebsites'))); + $view->setColumnsToDisplay(array('Referers_distinctWebsites')); return $this->renderView($view, $fetch); } function getLastDistinctCampaignsGraph( $fetch = false ) { $view = $this->getLastUnitGraph($this->pluginName,__FUNCTION__, "Referers.getNumberOfDistinctCampaigns"); + $view->setColumnTranslation('Referers_distinctCampaigns', ucfirst(Piwik_Translate('Referers_DistinctCampaigns'))); + $view->setColumnsToDisplay(array('Referers_distinctCampaigns')); return $this->renderView($view, $fetch); } + function getNumberOfDistinctSearchEngines( $fetch = false) { return $this->getNumericValue('Referers.' . __FUNCTION__); diff --git a/plugins/Referers/Referers.php b/plugins/Referers/Referers.php index 4041955db2..8bf6446d0f 100644 --- a/plugins/Referers/Referers.php +++ b/plugins/Referers/Referers.php @@ -51,11 +51,11 @@ class Piwik_Referers extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'Referers', 'getKeywords', Piwik_Translate('Referers_WidgetKeywords')); - Piwik_AddWidget( 'Referers', 'getCampaigns', Piwik_Translate('Referers_WidgetCampaigns')); - Piwik_AddWidget( 'Referers', 'getWebsites', Piwik_Translate('Referers_WidgetExternalWebsites')); - Piwik_AddWidget( 'Referers', 'getSearchEngines', Piwik_Translate('Referers_WidgetSearchEngines')); - Piwik_AddWidget( 'Referers', 'getRefererType', Piwik_Translate('Referers_WidgetOverview')); + Piwik_AddWidget( 'Referers', 'Referers_WidgetKeywords', 'Referers', 'getKeywords'); + Piwik_AddWidget( 'Referers', 'Referers_WidgetCampaigns', 'Referers', 'getCampaigns'); + Piwik_AddWidget( 'Referers', 'Referers_WidgetExternalWebsites', 'Referers', 'getWebsites'); + Piwik_AddWidget( 'Referers', 'Referers_WidgetSearchEngines', 'Referers', 'getSearchEngines'); + Piwik_AddWidget( 'Referers', 'Referers_WidgetOverview', 'Referers', 'getRefererType'); } function addMenus() diff --git a/plugins/Referers/templates/index.tpl b/plugins/Referers/templates/index.tpl index 6715b2a774..bb00ae94e6 100644 --- a/plugins/Referers/templates/index.tpl +++ b/plugins/Referers/templates/index.tpl @@ -8,16 +8,16 @@ <div id='leftcolumn'> <h2>{'Referers_Type'|translate}</h2> <div id='leftcolumn'> - <p>{sparkline src=$urlSparklineDirectEntry}<span> - {'Referers_TypeDirectEntries'|translate:"<strong>$visitorsFromDirectEntry</strong>"}</span></p> - <p>{sparkline src=$urlSparklineSearchEngines}<span> - {'Referers_TypeSearchEngines'|translate:"<strong>$visitorsFromSearchEngines</strong>"}</span></p> + <div class="sparkline">{sparkline src=$urlSparklineDirectEntry} + {'Referers_TypeDirectEntries'|translate:"<strong>$visitorsFromDirectEntry</strong>"}</div> + <div class="sparkline">{sparkline src=$urlSparklineSearchEngines} + {'Referers_TypeSearchEngines'|translate:"<strong>$visitorsFromSearchEngines</strong>"}</div> </div> <div id='rightcolumn'> - <p>{sparkline src=$urlSparklineWebsites}<span> - {'Referers_TypeWebsites'|translate:"<strong>$visitorsFromWebsites</strong>"}</span></p> - <p>{sparkline src=$urlSparklineCampaigns}<span> - {'Referers_TypeCampaigns'|translate:"<strong>$visitorsFromCampaigns</strong>"}</span></p> + <div class="sparkline">{sparkline src=$urlSparklineWebsites} + {'Referers_TypeWebsites'|translate:"<strong>$visitorsFromWebsites</strong>"}</div> + <div class="sparkline">{sparkline src=$urlSparklineCampaigns} + {'Referers_TypeCampaigns'|translate:"<strong>$visitorsFromCampaigns</strong>"}</div> </div> </div> @@ -27,17 +27,17 @@ </div> <div style="clear:both" /> -<h2>{'Referers_Other'|translate}</h2> -<table> - <tr><td> - <p>{sparkline src=$urlSparklineDistinctSearchEngines}<span> - {'Referers_OtherDistinctSearchEngines'|translate:"<strong>$numberDistinctSearchEngines</strong>"}</span></p> - <p>{sparkline src=$urlSparklineDistinctKeywords}<span> - {'Referers_OtherDistinctKeywords'|translate:"<strong>$numberDistinctKeywords</strong>"}</span></p> - </td><td> - <p>{sparkline src=$urlSparklineDistinctWebsites}<span> - {'Referers_OtherDistinctWebsites'|translate:"<strong>$numberDistinctWebsites</strong>":"<strong>$numberDistinctWebsitesUrls</strong>"}</span></p> - <p>{sparkline src=$urlSparklineDistinctCampaigns}<span> - {'Referers_OtherDistinctCampaigns'|translate:"<strong>$numberDistinctCampaigns</strong>"}</span></p> - </td></tr> +<h2>{'Referers_Distinct'|translate}</h2> +<table cellpadding="15"> +<tr><td style="padding-right:50px"> + <div class="sparkline">{sparkline src=$urlSparklineDistinctSearchEngines} + <strong>{$numberDistinctSearchEngines}</strong> {'Referers_DistinctSearchEngines'|translate}</div> + <div class="sparkline">{sparkline src=$urlSparklineDistinctKeywords} + <strong>{$numberDistinctKeywords}</strong> {'Referers_DistinctKeywords'|translate}</div> +</td> + <div class="sparkline">{sparkline src=$urlSparklineDistinctWebsites} + <strong>{$numberDistinctWebsites}</strong> {'Referers_DistinctWebsites'|translate} {'Referers_UsingNDistinctUrls'|translate:"<strong>$numberDistinctWebsitesUrls</strong>"}</div> + <div class="sparkline">{sparkline src=$urlSparklineDistinctCampaigns} + <strong>{$numberDistinctCampaigns}</strong> {'Referers_DistinctCampaigns'|translate}</div> +</td></tr> </table> diff --git a/plugins/SitesManager/templates/SitesManager.js b/plugins/SitesManager/templates/SitesManager.js index 8ebfedd3b3..48bcab165d 100644 --- a/plugins/SitesManager/templates/SitesManager.js +++ b/plugins/SitesManager/templates/SitesManager.js @@ -92,7 +92,7 @@ $(document).ready( function() { var idRow = $(this).attr('id'); var nameToDelete = $(this).parent().parent().find('#siteName').html(); var idsiteToDelete = $(this).parent().parent().find('#idSite').html(); - if(confirm(sprintf(_pk_translate('SitesManager_DeleteConfirm'),'"'+nameToDelete+'" (idSite = '+idsiteToDelete+')')) ) + if(confirm(sprintf(_pk_translate('SitesManager_DeleteConfirm_js'),'"'+nameToDelete+'" (idSite = '+idsiteToDelete+')')) ) { $.ajax( getDeleteSiteAJAX( idsiteToDelete ) ); } diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php index 976f649344..ac9f758fb0 100644 --- a/plugins/UserCountry/API.php +++ b/plugins/UserCountry/API.php @@ -62,7 +62,7 @@ class Piwik_UserCountry_API { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date ); - return $archive->getDataTableFromNumeric('UserCountry_distinctCountries'); + return $archive->getNumeric('UserCountry_distinctCountries'); } diff --git a/plugins/UserCountry/Controller.php b/plugins/UserCountry/Controller.php index ecf5c0548f..a7fadc8b17 100644 --- a/plugins/UserCountry/Controller.php +++ b/plugins/UserCountry/Controller.php @@ -5,7 +5,7 @@ class Piwik_UserCountry_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('UserCountry/index.tpl'); + $view = new Piwik_View('UserCountry/templates/index.tpl'); $view->urlSparklineCountries = $this->getUrlSparkline('getLastDistinctCountriesGraph'); $view->numberDistinctCountries = $this->getNumberOfDistinctCountries(true); diff --git a/plugins/UserCountry/UserCountry.php b/plugins/UserCountry/UserCountry.php index 7f39f2a147..04b41463bd 100644 --- a/plugins/UserCountry/UserCountry.php +++ b/plugins/UserCountry/UserCountry.php @@ -40,8 +40,8 @@ class Piwik_UserCountry extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'UserCountry', 'getContinent', Piwik_Translate('UserCountry_WidgetContinents')); - Piwik_AddWidget( 'UserCountry', 'getCountry', Piwik_Translate('UserCountry_WidgetCountries')); + Piwik_AddWidget( 'General_Visitors', 'UserCountry_WidgetContinents', 'UserCountry', 'getContinent'); + Piwik_AddWidget( 'General_Visitors', 'UserCountry_WidgetCountries', 'UserCountry', 'getCountry'); } function addMenu() diff --git a/plugins/UserCountry/index.tpl b/plugins/UserCountry/templates/index.tpl similarity index 100% rename from plugins/UserCountry/index.tpl rename to plugins/UserCountry/templates/index.tpl diff --git a/plugins/UserSettings/Controller.php b/plugins/UserSettings/Controller.php index 055a4c2f5b..f8306b39d0 100644 --- a/plugins/UserSettings/Controller.php +++ b/plugins/UserSettings/Controller.php @@ -4,7 +4,7 @@ class Piwik_UserSettings_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('UserSettings/index.tpl'); + $view = new Piwik_View('UserSettings/templates/index.tpl'); $view->dataTablePlugin = $this->getPlugin( true ); $view->dataTableResolution = $this->getResolution( true ); diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php index 0ead724fcf..5ab97e0bb8 100644 --- a/plugins/UserSettings/UserSettings.php +++ b/plugins/UserSettings/UserSettings.php @@ -38,7 +38,7 @@ class Piwik_UserSettings extends Piwik_Plugin static public $browserType_display = array( 'ie' => 'Internet Explorer', 'gecko' => 'Gecko (Mozilla, Netscape)', - 'khtml' => 'Khtml (Konqueror, Safari)', + 'khtml' => 'KHTML (Safari, Chrome)', 'opera' => 'Opera', ); @@ -55,13 +55,13 @@ class Piwik_UserSettings extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'UserSettings', 'getResolution', Piwik_Translate('UserSettings_WidgetResolutions')); - Piwik_AddWidget( 'UserSettings', 'getBrowser', Piwik_Translate('UserSettings_WidgetBrowsers')); - Piwik_AddWidget( 'UserSettings', 'getPlugin', Piwik_Translate('UserSettings_WidgetPlugins')); - Piwik_AddWidget( 'UserSettings', 'getWideScreen', Piwik_Translate('UserSettings_WidgetWidescreen')); - Piwik_AddWidget( 'UserSettings', 'getBrowserType', Piwik_Translate('UserSettings_WidgetBrowserFamilies')); - Piwik_AddWidget( 'UserSettings', 'getOS', Piwik_Translate('UserSettings_WidgetOperatingSystems')); - Piwik_AddWidget( 'UserSettings', 'getConfiguration', Piwik_Translate('UserSettings_WidgetGlobalVisitors')); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetResolutions', 'UserSettings', 'getResolution'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetBrowsers', 'UserSettings', 'getBrowser'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetPlugins', 'UserSettings', 'getPlugin'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetWidescreen', 'UserSettings', 'getWideScreen'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetBrowserFamilies', 'UserSettings', 'getBrowserType'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetOperatingSystems', 'UserSettings', 'getOS'); + Piwik_AddWidget( 'UserSettings_VisitorSettings', 'UserSettings_WidgetGlobalVisitors', 'UserSettings', 'getConfiguration'); } function addMenu() diff --git a/plugins/UserSettings/index.tpl b/plugins/UserSettings/templates/index.tpl similarity index 100% rename from plugins/UserSettings/index.tpl rename to plugins/UserSettings/templates/index.tpl diff --git a/plugins/UsersManager/templates/UsersManager.js b/plugins/UsersManager/templates/UsersManager.js index 2b1e446270..5dc9fa9ca2 100644 --- a/plugins/UsersManager/templates/UsersManager.js +++ b/plugins/UsersManager/templates/UsersManager.js @@ -200,7 +200,7 @@ $(document).ready( function() { ajaxHideError(); var idRow = $(this).attr('id'); var loginToDelete = $(this).parent().parent().find('#userLogin').html(); - if( confirm(sprintf(_pk_translate('UsersManager_DeleteConfirm'),'"'+loginToDelete+'"')) ) + if( confirm(sprintf(_pk_translate('UsersManager_DeleteConfirm_js'),'"'+loginToDelete+'"')) ) { $.ajax( getDeleteUserAJAX( loginToDelete ) ); } diff --git a/plugins/VisitFrequency/API.php b/plugins/VisitFrequency/API.php index 70e6010a02..ab9ed031b2 100644 --- a/plugins/VisitFrequency/API.php +++ b/plugins/VisitFrequency/API.php @@ -26,19 +26,36 @@ class Piwik_VisitFrequency_API return self::$instance; } - public function getSummary( $idSite, $period, $date ) + public function get( $idSite, $period, $date, $columns = array() ) { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date ); - $toFetch = array( 'nb_uniq_visitors_returning', - 'nb_visits_returning', - 'nb_actions_returning', - 'max_actions_returning', - 'sum_visit_length_returning', - 'bounce_count_returning', - 'nb_visits_converted_returning', - ); + $bounceRateReturningRequested = false; + if(!empty($columns)) + { + $toFetch = $columns; + if(($bounceRateReturningRequested = array_search('bounce_rate_returning', $toFetch)) !== false) + { + $toFetch = array('nb_visits_returning', 'bounce_count_returning'); + } + } + else + { + $toFetch = array( 'nb_uniq_visitors_returning', + 'nb_visits_returning', + 'nb_actions_returning', + 'max_actions_returning', + 'sum_visit_length_returning', + 'bounce_count_returning', + 'nb_visits_converted_returning', + ); + } $dataTable = $archive->getDataTableFromNumeric($toFetch); + if($bounceRateReturningRequested !== false) + { + $dataTable->filter('ColumnCallbackAddColumnPercentage', array('bounce_count_returning', 'bounce_rate_returning', 'nb_visits_returning', 0)); + $dataTable->deleteColumns($toFetch); + } return $dataTable; } diff --git a/plugins/VisitFrequency/Controller.php b/plugins/VisitFrequency/Controller.php index 366ed17ab4..e792b0a104 100644 --- a/plugins/VisitFrequency/Controller.php +++ b/plugins/VisitFrequency/Controller.php @@ -5,70 +5,61 @@ class Piwik_VisitFrequency_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('VisitFrequency/index.tpl'); - $view->graphEvolutionVisitFrequency = $this->getLastVisitsReturningGraph( true ); + $view = new Piwik_View('VisitFrequency/templates/index.tpl'); + $view->graphEvolutionVisitFrequency = $this->getEvolutionGraph(true, array('nb_visits_returning') ); $this->setSparklinesAndNumbers($view); echo $view->render(); } - protected function setSparklinesAndNumbers($view) + public function getSparklines() { - - $view->urlSparklineNbVisitsReturning = $this->getUrlSparkline( 'getLastVisitsReturningGraph'); - $view->urlSparklineNbActionsReturning = $this->getUrlSparkline( 'getLastActionsReturningGraph'); - $view->urlSparklineSumVisitLengthReturning = $this->getUrlSparkline( 'getLastSumVisitsLengthReturningGraph'); - $view->urlSparklineMaxActionsReturning = $this->getUrlSparkline( 'getLastMaxActionsReturningGraph'); - $view->urlSparklineBounceCountReturning = $this->getUrlSparkline( 'getLastBounceCountReturningGraph'); - - $dataTableFrequency = $this->getSummary(); - $view->nbVisitsReturning = $dataTableFrequency->getColumn('nb_visits_returning'); - $view->nbActionsReturning = $dataTableFrequency->getColumn('nb_actions_returning'); - $view->maxActionsReturning = $dataTableFrequency->getColumn('max_actions_returning'); - $view->sumVisitLengthReturning = $dataTableFrequency->getColumn('sum_visit_length_returning'); - $view->bounceCountReturning = $dataTableFrequency->getColumn('bounce_count_returning'); - } - - function getSparklines() - { - $view = new Piwik_View('VisitFrequency/sparklines.tpl'); + $view = new Piwik_View('VisitFrequency/templates/sparklines.tpl'); $this->setSparklinesAndNumbers($view); echo $view->render(); } - - protected function getSummary() - { - $requestString = "method=VisitFrequency.getSummary&format=original"; - $request = new Piwik_API_Request($requestString); - return $request->process(); - } - - function getLastVisitsReturningGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.getVisitsReturning"); - return $this->renderView($view, $fetch); - } - - function getLastActionsReturningGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.getActionsReturning"); - return $this->renderView($view, $fetch); - } - function getLastSumVisitsLengthReturningGraph( $fetch = false ) + public function getEvolutionGraph( $fetch = false, $columns = false) { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.getSumVisitsLengthReturning"); + $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.get"); + if(empty($columns)) + { + $columns = Piwik_Common::getRequestVar('columns'); + } + $view->setColumnsToDisplay($columns); + $view->setColumnsTranslations(array( + 'nb_visits_returning' => Piwik_Translate('VisitFrequency_ColumnReturningVisits'), + 'nb_actions_returning' => Piwik_Translate('VisitFrequency_ColumnActionsByReturningVisits'), + 'max_actions_returning' => Piwik_Translate('VisitFrequency_ColumnMaximumActionsByAReturningVisit'), + 'sum_visit_length_returning' => Piwik_Translate('VisitFrequency_ColumnTotalTimeSpentByReturningVisits'), + 'bounce_rate_returning' => Piwik_Translate('VisitFrequency_ColumnBounceRateForReturningVisits'), + )); return $this->renderView($view, $fetch); } - function getLastMaxActionsReturningGraph( $fetch = false ) + protected function setSparklinesAndNumbers($view) { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.getMaxActionsReturning"); - return $this->renderView($view, $fetch); + $view->urlSparklineNbVisitsReturning = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_visits_returning'))); + $view->urlSparklineNbActionsReturning = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_actions_returning'))); + $view->urlSparklineMaxActionsReturning = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('max_actions_returning'))); + $view->urlSparklineSumVisitLengthReturning = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('sum_visit_length_returning'))); + $view->urlSparklineBounceRateReturning = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('bounce_rate_returning'))); + + $dataTableFrequency = $this->getSummary(); + $dataRow = $dataTableFrequency->getFirstRow(); + $nbVisitsReturning = $dataRow->getColumn('nb_visits_returning'); + $view->nbVisitsReturning = $nbVisitsReturning; + $view->nbActionsReturning = $dataRow->getColumn('nb_actions_returning'); + $view->maxActionsReturning = $dataRow->getColumn('max_actions_returning'); + $view->sumVisitLengthReturning = $dataRow->getColumn('sum_visit_length_returning'); + $nbBouncedReturningVisits = $dataRow->getColumn('bounce_count_returning'); + $view->bounceRateReturning = Piwik::getPercentageSafe($nbBouncedReturningVisits, $nbVisitsReturning); + } - - function getLastBounceCountReturningGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.getBounceCountReturning"); - return $this->renderView($view, $fetch); + + protected function getSummary() + { + $requestString = "method=VisitFrequency.get&format=original"; + $request = new Piwik_API_Request($requestString); + return $request->process(); } } diff --git a/plugins/VisitFrequency/VisitFrequency.php b/plugins/VisitFrequency/VisitFrequency.php index 226960bc4a..fbab275603 100644 --- a/plugins/VisitFrequency/VisitFrequency.php +++ b/plugins/VisitFrequency/VisitFrequency.php @@ -40,8 +40,8 @@ class Piwik_VisitFrequency extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'VisitFrequency', 'getSparklines', Piwik_Translate('VisitFrequency_WidgetOverview')); - Piwik_AddWidget( 'VisitFrequency', 'getLastVisitsReturningGraph', Piwik_Translate('VisitFrequency_WidgetGraphReturning')); + Piwik_AddWidget( 'General_Visitors', 'VisitFrequency_WidgetOverview', 'VisitFrequency', 'getSparklines'); + Piwik_AddWidget( 'General_Visitors', 'VisitFrequency_WidgetGraphReturning', 'VisitFrequency', 'getEvolutionGraph', array('columns' => array('nb_visits_returning'))); } function addMenu() diff --git a/plugins/VisitFrequency/sparklines.tpl b/plugins/VisitFrequency/sparklines.tpl deleted file mode 100644 index bccbd06ea4..0000000000 --- a/plugins/VisitFrequency/sparklines.tpl +++ /dev/null @@ -1,13 +0,0 @@ - - <p>{sparkline src=$urlSparklineNbVisitsReturning}<span> - {'VisitFrequency_ReturnVisits'|translate:"<strong>$nbVisitsReturning</strong>"}</span></p> - <p>{sparkline src=$urlSparklineNbActionsReturning}<span> - {'VisitFrequency_ReturnActions'|translate:"<strong>$nbActionsReturning</strong>"}</span></p> - <p>{sparkline src=$urlSparklineMaxActionsReturning}<span> - {'VisitFrequency_ReturnMaxActions'|translate:"<strong>$maxActionsReturning</strong>"}</span></p> - <p>{sparkline src=$urlSparklineSumVisitLengthReturning}<span> - {assign var=sumtimeVisitLengthReturning value=$sumVisitLengthReturning|sumtime} - {'VisitFrequency_ReturnTotalTime'|translate:"<strong>$sumtimeVisitLengthReturning</strong>"}</span></p> - <p>{sparkline src=$urlSparklineBounceCountReturning}<span> - {'VisitFrequency_ReturnBounces'|translate:"<strong>$bounceCountReturning</strong>"} </span></p> - diff --git a/plugins/VisitFrequency/index.tpl b/plugins/VisitFrequency/templates/index.tpl similarity index 68% rename from plugins/VisitFrequency/index.tpl rename to plugins/VisitFrequency/templates/index.tpl index 069a56d4df..ec4664d310 100644 --- a/plugins/VisitFrequency/index.tpl +++ b/plugins/VisitFrequency/templates/index.tpl @@ -1,11 +1,11 @@ {postEvent name="template_headerVisitsFrequency"} <script type="text/javascript" src="plugins/CoreHome/templates/sparkline.js"></script> -<a name="evolutionGraph" graphId="VisitFrequencygetLastVisitsReturningGraph"></a> +<a name="evolutionGraph" graphId="VisitFrequencygetEvolutionGraph"></a> <h2>{'VisitFrequency_Evolution'|translate}</h2> {$graphEvolutionVisitFrequency} <br /> -{include file=VisitFrequency/sparklines.tpl} +{include file=VisitFrequency/templates/sparklines.tpl} {postEvent name="template_footerVisitsFrequency"} diff --git a/plugins/VisitFrequency/templates/sparklines.tpl b/plugins/VisitFrequency/templates/sparklines.tpl new file mode 100644 index 0000000000..a72ae2eb6c --- /dev/null +++ b/plugins/VisitFrequency/templates/sparklines.tpl @@ -0,0 +1,11 @@ +<div class="sparkline">{sparkline src=$urlSparklineNbVisitsReturning} +{'VisitFrequency_ReturnVisits'|translate:"<strong>$nbVisitsReturning</strong>"}</div> +<div class="sparkline">{sparkline src=$urlSparklineNbActionsReturning} +{'VisitFrequency_ReturnActions'|translate:"<strong>$nbActionsReturning</strong>"}</div> +<div class="sparkline">{sparkline src=$urlSparklineMaxActionsReturning} + {'VisitFrequency_ReturnMaxActions'|translate:"<strong>$maxActionsReturning</strong>"}</div> +<div class="sparkline">{sparkline src=$urlSparklineSumVisitLengthReturning} + {assign var=sumtimeVisitLengthReturning value=$sumVisitLengthReturning|sumtime} + {'VisitFrequency_ReturnTotalTime'|translate:"<strong>$sumtimeVisitLengthReturning</strong>"}</div> +<div class="sparkline">{sparkline src=$urlSparklineBounceRateReturning} + {'VisitFrequency_ReturnBounceRate'|translate:"<strong>$bounceRateReturning%</strong>"} </div> \ No newline at end of file diff --git a/plugins/VisitTime/Controller.php b/plugins/VisitTime/Controller.php index 923c406a1e..0a21a346ac 100644 --- a/plugins/VisitTime/Controller.php +++ b/plugins/VisitTime/Controller.php @@ -5,7 +5,7 @@ class Piwik_VisitTime_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('VisitTime/index.tpl'); + $view = new Piwik_View('VisitTime/templates/index.tpl'); $view->dataTableVisitInformationPerLocalTime = $this->getVisitInformationPerLocalTime(true); $view->dataTableVisitInformationPerServerTime = $this->getVisitInformationPerServerTime(true); echo $view->render(); diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php index 531c303014..8d32d3012f 100644 --- a/plugins/VisitTime/VisitTime.php +++ b/plugins/VisitTime/VisitTime.php @@ -40,8 +40,8 @@ class Piwik_VisitTime extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'VisitTime', 'getVisitInformationPerLocalTime', Piwik_Translate('VisitTime_WidgetLocalTime')); - Piwik_AddWidget( 'VisitTime', 'getVisitInformationPerServerTime', Piwik_Translate('VisitTime_WidgetServerTime')); + Piwik_AddWidget( 'VisitTime_SubmenuTimes', 'VisitTime_WidgetLocalTime', 'VisitTime', 'getVisitInformationPerLocalTime'); + Piwik_AddWidget( 'VisitTime_SubmenuTimes', 'VisitTime_WidgetServerTime', 'VisitTime', 'getVisitInformationPerServerTime'); } function addMenu() @@ -101,7 +101,7 @@ class Piwik_VisitTime extends Piwik_Plugin private function makeSureAllHoursAreSet($table, $archiveProcessing) { - for($i=0;$i<=23;$i++) + for($i=0; $i<=23; $i++) { if($table->getRowFromLabel($i) === false) { diff --git a/plugins/VisitTime/index.tpl b/plugins/VisitTime/templates/index.tpl similarity index 100% rename from plugins/VisitTime/index.tpl rename to plugins/VisitTime/templates/index.tpl diff --git a/plugins/VisitorInterest/Controller.php b/plugins/VisitorInterest/Controller.php index dcca856b3a..cd4817ef3d 100644 --- a/plugins/VisitorInterest/Controller.php +++ b/plugins/VisitorInterest/Controller.php @@ -5,7 +5,7 @@ class Piwik_VisitorInterest_Controller extends Piwik_Controller { function index() { - $view = new Piwik_View('VisitorInterest/index.tpl'); + $view = new Piwik_View('VisitorInterest/templates/index.tpl'); $view->dataTableNumberOfVisitsPerVisitDuration = $this->getNumberOfVisitsPerVisitDuration(true); $view->dataTableNumberOfVisitsPerPage = $this->getNumberOfVisitsPerPage(true); echo $view->render(); diff --git a/plugins/VisitorInterest/VisitorInterest.php b/plugins/VisitorInterest/VisitorInterest.php index 3f36d8b474..d5bb5091b1 100644 --- a/plugins/VisitorInterest/VisitorInterest.php +++ b/plugins/VisitorInterest/VisitorInterest.php @@ -66,9 +66,10 @@ class Piwik_VisitorInterest extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'VisitorInterest', 'getNumberOfVisitsPerVisitDuration', Piwik_Translate('VisitorInterest_WidgetLengths')); - Piwik_AddWidget( 'VisitorInterest', 'getNumberOfVisitsPerPage', Piwik_Translate('VisitorInterest_WidgetPages')); + Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_WidgetLengths', 'VisitorInterest', 'getNumberOfVisitsPerVisitDuration'); + Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_WidgetPages', 'VisitorInterest', 'getNumberOfVisitsPerPage'); } + function addMenu() { Piwik_RenameMenuEntry('General_Visitors', 'VisitFrequency_SubmenuFrequency', diff --git a/plugins/VisitorInterest/index.tpl b/plugins/VisitorInterest/templates/index.tpl similarity index 100% rename from plugins/VisitorInterest/index.tpl rename to plugins/VisitorInterest/templates/index.tpl diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php index ed9a75df7c..e042e518df 100644 --- a/plugins/VisitsSummary/API.php +++ b/plugins/VisitsSummary/API.php @@ -25,20 +25,37 @@ class Piwik_VisitsSummary_API return self::$instance; } - public function get( $idSite, $period, $date ) + public function get( $idSite, $period, $date, $columns = array() ) { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date ); - $toFetch = array( 'max_actions', - 'nb_uniq_visitors', - 'nb_visits', - 'nb_actions', - 'sum_visit_length', - 'bounce_count', - 'nb_visits_converted', - ); + $bounceRateRequested = false; + if(!empty($columns)) + { + $toFetch = $columns; + if(($bounceRateRequested = array_search('bounce_rate', $toFetch)) !== false) + { + $toFetch = array('nb_visits', 'bounce_count'); + } + } + else + { + $toFetch = array( 'max_actions', + 'nb_uniq_visitors', + 'nb_visits', + 'nb_actions', + 'sum_visit_length', + 'bounce_count', + 'nb_visits_converted', + ); + } $dataTable = $archive->getDataTableFromNumeric($toFetch); + if($bounceRateRequested !== false) + { + $dataTable->filter('ColumnCallbackAddColumnPercentage', array('bounce_count', 'bounce_rate', 'nb_visits', 0)); + $dataTable->deleteColumns($toFetch); + } return $dataTable; } @@ -70,23 +87,23 @@ class Piwik_VisitsSummary_API return self::getNumeric( $idSite, $period, $date, 'max_actions'); } - public function getSumVisitsLength( $idSite, $period, $date ) + public function getBounceCount( $idSite, $period, $date ) { - return self::getNumeric( $idSite, $period, $date, 'sum_visit_length'); + return self::getNumeric( $idSite, $period, $date, 'bounce_count'); } - public function getSumVisitsLengthPretty( $idSite, $period, $date ) + public function getVisitsConverted( $idSite, $period, $date ) { - return Piwik::getPrettyTimeFromSeconds(self::getSumVisitsLength( $idSite, $period, $date )); + return self::getNumeric( $idSite, $period, $date, 'nb_visits_converted'); } - public function getBounceCount( $idSite, $period, $date ) + public function getSumVisitsLength( $idSite, $period, $date ) { - return self::getNumeric( $idSite, $period, $date, 'bounce_count'); + return self::getNumeric( $idSite, $period, $date, 'sum_visit_length'); } - public function getVisitsConverted( $idSite, $period, $date ) + public function getSumVisitsLengthPretty( $idSite, $period, $date ) { - return self::getNumeric( $idSite, $period, $date, 'nb_visits_converted'); + return Piwik::getPrettyTimeFromSeconds(self::getSumVisitsLength( $idSite, $period, $date )); } } diff --git a/plugins/VisitsSummary/Controller.php b/plugins/VisitsSummary/Controller.php index 9f7b5ad296..d622dfb19b 100644 --- a/plugins/VisitsSummary/Controller.php +++ b/plugins/VisitsSummary/Controller.php @@ -3,51 +3,31 @@ require_once "ViewDataTable.php"; class Piwik_VisitsSummary_Controller extends Piwik_Controller { - function index() + public function index() { - $view = new Piwik_View('VisitsSummary/index.tpl'); + $view = new Piwik_View('VisitsSummary/templates/index.tpl'); $this->setPeriodVariablesView($view); - $view->graphEvolutionVisitsSummary = $this->getLastVisitsGraph( true ); + $view->graphEvolutionVisitsSummary = $this->getEvolutionGraph( true, array('nb_visits') ); $this->setSparklinesAndNumbers($view); echo $view->render(); } - protected function setSparklinesAndNumbers($view) + public function getSparklines() { - $view->urlSparklineNbVisits = $this->getUrlSparkline( 'getLastVisitsGraph'); - $view->urlSparklineNbActions = $this->getUrlSparkline( 'getLastActionsGraph'); - $view->urlSparklineSumVisitLength = $this->getUrlSparkline( 'getLastSumVisitsLengthGraph'); - $view->urlSparklineMaxActions = $this->getUrlSparkline( 'getLastMaxActionsGraph'); - $view->urlSparklineBounceCount = $this->getUrlSparkline( 'getLastBounceCountGraph'); - - $dataTableVisit = self::getVisitsSummary(); - - if($view->period == 'day') - { - $view->urlSparklineNbUniqVisitors = $this->getUrlSparkline( 'getLastUniqueVisitorsGraph'); - $view->nbUniqVisitors = $dataTableVisit->getColumn('nb_uniq_visitors'); - } - $view->nbVisits = $dataTableVisit->getColumn('nb_visits'); - $view->nbActions = $dataTableVisit->getColumn('nb_actions'); - $view->sumVisitLength = $dataTableVisit->getColumn('sum_visit_length'); - $view->bounceCount = $dataTableVisit->getColumn('bounce_count'); - $view->maxActions = $dataTableVisit->getColumn('max_actions'); - } - - function getSparklines() - { - $view = new Piwik_View('VisitsSummary/sparklines.tpl'); + $view = new Piwik_View('VisitsSummary/templates/sparklines.tpl'); $this->setSparklinesAndNumbers($view); echo $view->render(); } - static public function getVisits() + public function getEvolutionGraph( $fetch = false, $columns = false) { - $requestString = "method=VisitsSummary.getVisits". - "&format=original". - "&disable_generic_filters=true"; - $request = new Piwik_API_Request($requestString); - return $request->process(); + $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitsSummary.get"); + if(empty($columns)) + { + $columns = Piwik_Common::getRequestVar('columns'); + } + $view->setColumnsToDisplay($columns); + return $this->renderView($view, $fetch); } static public function getVisitsSummary() @@ -61,39 +41,36 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller return $request->process(); } - function getLastVisitsGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getVisits"); - return $this->renderView($view, $fetch); - } - - function getLastUniqueVisitorsGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getUniqueVisitors"); - return $this->renderView($view, $fetch); - } - - function getLastActionsGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getActions"); - return $this->renderView($view, $fetch); - } - - function getLastSumVisitsLengthGraph( $fetch = false ) - { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getSumVisitsLength"); - return $this->renderView($view, $fetch); - } - - function getLastMaxActionsGraph( $fetch = false ) + static public function getVisits() { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getMaxActions"); - return $this->renderView($view, $fetch); + $requestString = "method=VisitsSummary.getVisits". + "&format=original". + "&disable_generic_filters=true"; + $request = new Piwik_API_Request($requestString); + return $request->process(); } - function getLastBounceCountGraph( $fetch = false ) + protected function setSparklinesAndNumbers($view) { - $view = $this->getLastUnitGraph('VisitsSummary', __FUNCTION__, "VisitsSummary.getBounceCount"); - return $this->renderView($view, $fetch); + $view->urlSparklineNbVisits = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_visits'))); + $view->urlSparklineNbActions = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_actions'))); + $view->urlSparklineSumVisitLength = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('sum_visit_length'))); + $view->urlSparklineMaxActions = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('max_actions'))); + $view->urlSparklineBounceRate = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('bounce_rate'))); + + $dataTableVisit = self::getVisitsSummary(); + $dataRow = $dataTableVisit->getFirstRow(); + if($view->period == 'day') + { + $view->urlSparklineNbUniqVisitors = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_uniq_visitors'))); + $view->nbUniqVisitors = $dataRow->getColumn('nb_uniq_visitors'); + } + $nbVisits = $dataRow->getColumn('nb_visits'); + $view->nbVisits = $nbVisits; + $view->nbActions = $dataRow->getColumn('nb_actions'); + $view->sumVisitLength = $dataRow->getColumn('sum_visit_length'); + $nbBouncedVisits = $dataRow->getColumn('bounce_count'); + $view->bounceRate = Piwik::getPercentageSafe($nbBouncedVisits, $nbVisits); + $view->maxActions = $dataRow->getColumn('max_actions'); } } diff --git a/plugins/VisitsSummary/VisitsSummary.php b/plugins/VisitsSummary/VisitsSummary.php index 29e4398a90..846a3dcb5e 100644 --- a/plugins/VisitsSummary/VisitsSummary.php +++ b/plugins/VisitsSummary/VisitsSummary.php @@ -36,10 +36,9 @@ class Piwik_VisitsSummary extends Piwik_Plugin function addWidgets() { - Piwik_AddWidget( 'VisitsSummary', 'getLastVisitsGraph', Piwik_Translate('VisitsSummary_WidgetLastVisits')); - Piwik_AddWidget( 'VisitsSummary', 'getSparklines', Piwik_Translate('VisitsSummary_WidgetVisits')); - Piwik_AddWidget( 'VisitsSummary', 'getLastUniqueVisitorsGraph', Piwik_Translate('VisitsSummary_WidgetLastVisitors')); - Piwik_AddWidget( 'VisitsSummary', 'index', Piwik_Translate('VisitsSummary_WidgetOverviewGraph')); + Piwik_AddWidget( 'Visits Summary', 'VisitsSummary_WidgetLastVisits', 'VisitsSummary', 'getEvolutionGraph', array('columns' => array('nb_visits'))); + Piwik_AddWidget( 'Visits Summary', 'VisitsSummary_WidgetVisits', 'VisitsSummary', 'getSparklines'); + Piwik_AddWidget( 'Visits Summary', 'VisitsSummary_WidgetOverviewGraph', 'VisitsSummary', 'index'); } function addMenu() diff --git a/plugins/VisitsSummary/sparklines.tpl b/plugins/VisitsSummary/sparklines.tpl deleted file mode 100644 index 7d0f2e28d7..0000000000 --- a/plugins/VisitsSummary/sparklines.tpl +++ /dev/null @@ -1,13 +0,0 @@ -<div id='leftcolumn'> - <p>{sparkline src=$urlSparklineNbVisits} <span>{'VisitsSummary_NbVisits'|translate:"<strong>$nbVisits</strong>"}</span></p> - {if isset($urlSparklineNbUniqVisitors)} - <p>{sparkline src=$urlSparklineNbUniqVisitors} <span>{'VisitsSummary_NbUniqueVisitors'|translate:"<strong>$nbUniqVisitors</strong>"}</span></p> - {/if} - <p>{sparkline src=$urlSparklineNbActions} <span>{'VisitsSummary_NbActions'|translate:"<strong>$nbActions</strong>"}</span></p> -</div> -<div id='rightcolumn'> - <p>{sparkline src=$urlSparklineSumVisitLength} <span>{assign var=sumtimeVisitLength value=$sumVisitLength|sumtime} {'VisitsSummary_TotalTime'|translate:"<strong>$sumtimeVisitLength</strong>"}</span></p> - <p>{sparkline src=$urlSparklineMaxActions} <span>{'VisitsSummary_MaxNbActions'|translate:"<strong>$maxActions</strong>"}</span></p> - <p>{sparkline src=$urlSparklineBounceCount} <span>{'VisitsSummary_NbBounced'|translate:"<strong>$bounceCount</strong>"}</span></p> -</div> -<div style="clear:both" /> \ No newline at end of file diff --git a/plugins/VisitsSummary/index.tpl b/plugins/VisitsSummary/templates/index.tpl similarity index 65% rename from plugins/VisitsSummary/index.tpl rename to plugins/VisitsSummary/templates/index.tpl index 8e8e51398d..7255107589 100644 --- a/plugins/VisitsSummary/index.tpl +++ b/plugins/VisitsSummary/templates/index.tpl @@ -1,11 +1,12 @@ + <script type="text/javascript" src="plugins/CoreHome/templates/sparkline.js"></script> -<a name="evolutionGraph" graphId="VisitsSummarygetLastVisitsGraph"></a> -<h2>{'VisitsSummary_EvolutionPeriods'|translate:$periodsNames.$period.plural}</h2> +<a name="evolutionGraph" graphId="VisitsSummarygetEvolutionGraph"></a> +<h2>{'VisitsSummary_EvolutionOverLastPeriods'|translate:$periodsNames.$period.plural}</h2> {$graphEvolutionVisitsSummary} <h2>{'VisitsSummary_Report'|translate}</h2> -{include file=VisitsSummary/sparklines.tpl} +{include file=VisitsSummary/templates/sparklines.tpl} <br /><br /><br /> <p style='color:lightgrey; size:0.8em;'> diff --git a/plugins/VisitsSummary/templates/sparklines.tpl b/plugins/VisitsSummary/templates/sparklines.tpl new file mode 100644 index 0000000000..f8ce97cc29 --- /dev/null +++ b/plugins/VisitsSummary/templates/sparklines.tpl @@ -0,0 +1,13 @@ +<div id='leftcolumn'> + <div class="sparkline">{sparkline src=$urlSparklineNbVisits} {'VisitsSummary_NbVisits'|translate:"<strong>$nbVisits</strong>"}</div> + {if isset($urlSparklineNbUniqVisitors)} + <div class="sparkline">{sparkline src=$urlSparklineNbUniqVisitors} {'VisitsSummary_NbUniqueVisitors'|translate:"<strong>$nbUniqVisitors</strong>"}</div> + {/if} + <div class="sparkline">{sparkline src=$urlSparklineNbActions} {'VisitsSummary_NbActions'|translate:"<strong>$nbActions</strong>"}</div> +</div> +<div id='rightcolumn'> + <div class="sparkline">{sparkline src=$urlSparklineSumVisitLength} {assign var=sumtimeVisitLength value=$sumVisitLength|sumtime} {'VisitsSummary_TotalTime'|translate:"<strong>$sumtimeVisitLength</strong>"}</div> + <div class="sparkline">{sparkline src=$urlSparklineMaxActions} {'VisitsSummary_MaxNbActions'|translate:"<strong>$maxActions</strong>"}</div> + <div class="sparkline">{sparkline src=$urlSparklineBounceRate} {'VisitsSummary_NbVisitsBounced'|translate:"<strong>$bounceRate%</strong>"}</div> +</div> +<div style="clear:both" /> \ No newline at end of file diff --git a/plugins/Widgetize/templates/iframe.tpl b/plugins/Widgetize/templates/iframe.tpl index 0cb5f23cf9..6d61d51ada 100644 --- a/plugins/Widgetize/templates/iframe.tpl +++ b/plugins/Widgetize/templates/iframe.tpl @@ -4,20 +4,9 @@ {loadJavascriptTranslations plugins='CoreHome'} {include file="CoreHome/templates/js_global_variables.tpl"} -<script type="text/javascript" src="libs/jquery/jquery.js"></script> -<script type="text/javascript" src="libs/javascript/sprintf.js"></script> -<script type="text/javascript" src="themes/default/common.js"></script> -<script type="text/javascript" src="libs/jquery/jquery.dimensions.js"></script> -<script type="text/javascript" src="libs/jquery/tooltip/jquery.tooltip.js"></script> -<script type="text/javascript" src="libs/jquery/truncate/jquery.truncate.js"></script> -<script type="text/javascript" src="libs/jquery/jquery.scrollTo.js"></script> +{include file="CoreHome/templates/js_css_includes.tpl"} -<script type="text/javascript" src="libs/swfobject/swfobject.js"></script> - -<script type="text/javascript" src="plugins/CoreHome/templates/datatable.js"></script> -<link rel="stylesheet" href="plugins/CoreHome/templates/datatable.css"> - -<div class="widgetDiv"> +<div class="widget"> {$content} </div> diff --git a/plugins/Widgetize/templates/index.tpl b/plugins/Widgetize/templates/index.tpl index 8254bf9fef..cf78a1f1dd 100644 --- a/plugins/Widgetize/templates/index.tpl +++ b/plugins/Widgetize/templates/index.tpl @@ -4,7 +4,6 @@ {loadJavascriptTranslations plugins='Dashboard'} <script type="text/javascript" src="plugins/Dashboard/templates/widgetMenu.js"></script> - <script type="text/javascript" src="themes/default/common.js"></script> <script type="text/javascript" src="libs/jquery/jquery.dimensions.js"></script> <script type="text/javascript" src="libs/jquery/tooltip/jquery.tooltip.js"></script> @@ -65,53 +64,31 @@ label { $(document).ready( function() { var menu = new widgetMenu(); var widgetized = new widgetize(); - widgetized.callbackHideButtons(); menu.init(); menu.registerCallbackOnWidgetLoad( widgetized.callbackAddExportButtonsUnderWidget ); - menu.registerCallbackOnMainMenuHover( widgetized.callbackHideButtons ); - menu.registerCallbackOnSubMenuHover( widgetized.callbackSavePluginName ); + menu.registerCallbackOnMenuHover( widgetized.deleteEmbedElements ); menu.show(); + $('#exportFullDashboard').html( + widgetized.getInputFormWithHtml( 'dashboardEmbed', '<iframe src="'+document.location.protocol + '//' + document.location.hostname + document.location.pathname + '?'+'module=Widgetize&action=iframe&moduleToWidgetize=Dashboard&actionToWidgetize=index&idSite=1&period=week&date=yesterday" frameborder="0" marginheight="0" marginwidth="0" width="100%" height="100%"></iframe>') + ); }); {/literal} </script> <div style="max-width:980px;"> -<p>With Piwik, you can export your Web Analytics reports on your blog, website, or intranet dashboard... in one click. -If you want your widgets to be viewable by everybody, you first have to set the 'view' permissions to the anonymous user in the <a href='?module=UsersManager'>Users Management section</a>.</p> -<div id="widgetChooser"> - <div class="subMenu" id="sub1"> - </div> - <div class="subMenu" id="sub2"> - </div> - <div class="subMenu" id="sub3"> - <div class="widget"> - <div class="widgetDiv previewDiv"></div> - </div> - - <div id="embedThisWidgetIframe"> - <label for="embedThisWidgetIframeInput">› Embed Iframe</label> - <span id="embedThisWidgetIframeInput"></span> - </div> - - <div id="embedThisWidgetFlash"> - <label for="embedThisWidgetFlashInput">› Embed Flash</label> - <span id="embedThisWidgetFlashInput"></span> - </div> - - <div id="embedThisWidgetEverywhere"> - <div id="exportThisWidget"> - <label for="flashEmbed">› Export anywhere!</label> - <img src='http://cdn.clearspring.com/launchpad/static/cs_button_share1.gif'> - </div> - <div id="exportThisWidgettest"></div> - <div id="exportThisWidgetMenu"> - <span style="display:none"><img src="{$piwikUrl}themes/default/images/loading-blue.gif" /></span> - </div> - </div> - </div> + <p>With Piwik, you can export your Web Analytics reports on your blog, website, or intranet dashboard... in one click. + If you want your widgets to be viewable by everybody, you first have to set the 'view' permissions + to the anonymous user in the <a href='?module=UsersManager'>Users Management section</a>. + <br>Note: You can also display the full Piwik dashboard in your application or website in an Iframe. + For example, for idSite=1 and date=yesterday, you can write: <span id='exportFullDashboard'></span> + </p> - <div class="menuClear"> </div> -</div> -<div id='iframeDivToExport' style='display:none;'></div> + <div id="widgetChooser"> + <div class="subMenu" id="sub1"></div> + <div class="subMenu" id="sub2"></div> + <div class="subMenu" id="sub3"></div> + <div class="menuClear"></div> + </div> + <div id='iframeDivToExport' style='display:none;'></div> </div> diff --git a/plugins/Widgetize/templates/js.tpl b/plugins/Widgetize/templates/js.tpl index 50284a9591..0cce58d362 100644 --- a/plugins/Widgetize/templates/js.tpl +++ b/plugins/Widgetize/templates/js.tpl @@ -1,4 +1,4 @@ -{loadJavascriptTranslations noHtml=1 plugins='CoreHome'} +{loadJavascriptTranslations disableOutputScriptTag=1 plugins='CoreHome'} document.write('<scr'+'ipt language="javascript" src="{$piwikUrl}libs/swfobject/swfobject.js"></scr'+'ipt>'); document.write('<scr'+'ipt language="javascript" src="{$piwikUrl}libs/javascript/sprintf.js"></scr'+'ipt>'); diff --git a/plugins/Widgetize/templates/widgetize.js b/plugins/Widgetize/templates/widgetize.js index ad3a05a979..3f30806ff1 100644 --- a/plugins/Widgetize/templates/widgetize.js +++ b/plugins/Widgetize/templates/widgetize.js @@ -7,24 +7,31 @@ function widgetize() return '<input class="formEmbedCode" id="'+inputId+'" value=\''+ htmlEmbed +'\' onclick="javascript:document.getElementById(\''+inputId+'\').focus();document.getElementById(\''+inputId+'\').select();" readonly="true" type="text">'; } - this.getEmbedUrl = function( pluginId, actionId, exportFormat ) + this.getEmbedUrl = function( parameters, exportFormat ) { + copyParameters = new Object; + for(var variableName in parameters) { + copyParameters[variableName] = parameters[variableName]; + } + copyParameters['moduleToWidgetize'] = parameters['module']; + copyParameters['actionToWidgetize'] = parameters['action']; + delete copyParameters['action']; + delete copyParameters['module']; var sourceUrl; sourceUrl = document.location.protocol + '//' + document.location.hostname + document.location.pathname + '?'; - sourceUrl += "module=Widgetize&action="+exportFormat+"&moduleToWidgetize="+pluginId+"&actionToWidgetize="+actionId+"&idSite="+piwik.idSite+"&period="+piwik.period+"&date="+piwik.currentDateString; - sourceUrl += "&disableLink=1"; + sourceUrl += "module=Widgetize" + + "&action="+exportFormat+ + "&"+piwikHelper.getQueryStringFromParameters(copyParameters)+ + "&idSite="+piwik.idSite+ + "&period="+piwik.period+ + "&date="+piwik.currentDateString+ + "&disableLink=1"; return sourceUrl; } - this.callbackSavePluginName = function(pluginName, actionName, widgetName) + this.deleteEmbedElements = function() { - self.currentWidgetName = widgetName; - self.callbackHideButtons(); - } - - this.callbackHideButtons = function() - { - $('#embedThisWidgetIframe, #embedThisWidgetFlash, #embedThisWidgetEverywhere').hide(); + $('#exportButtons').remove(); } this.htmlentities = function(s) @@ -32,47 +39,79 @@ function widgetize() return s.replace( /[<>&]/g, function(m) { return "&" + m.charCodeAt(0) + ";"; }); } - this.callbackAddExportButtonsUnderWidget = function (widget, pluginId, actionId) + this.callbackAddExportButtonsUnderWidget = function ( widgetUniqueId, + loadedWidgetElement) { - var html = widget.html(); - - // Div containing IFRAME code to load the widget - var widgetIframe = '<div id="widgetIframe"><iframe width="100%" height="350" src="' - + self.getEmbedUrl(pluginId, actionId, "iframe") - + '" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe></div>'; + widget = widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId); + widgetName = widget["name"]; + widgetParameters = widget['parameters']; - // Iframe Export - $('#embedThisWidgetIframe') - .show() - .find('#embedThisWidgetIframeInput') - .empty() - .append(self.getInputFormWithHtml('iframeEmbed', widgetIframe)); - - - // Flash Export - widget.find('embed').each(function() { - var htmlEmbed = $(this).parent().html(); - $('#embedThisWidgetFlash') - .show() - .find('#embedThisWidgetFlashInput') - .empty() - .append(self.getInputFormWithHtml('flashEmbed', htmlEmbed)); - }); + self.deleteEmbedElements(); + var exportButtonsElement = $('<span id="exportButtons">'); + + // We first build the HTML code that will load the widget in an IFRAME + var widgetIframeHtml = '<div id="widgetIframe">'+ + '<iframe width="100%" height="350" src="'+ + self.getEmbedUrl(widgetParameters, "iframe")+ + '" scrolling="no" frameborder="0" marginheight="0" marginwidth="0">'+ + '</iframe>'+ + '</div>'; + + // Add the input field containing the widget in an Iframe + $(exportButtonsElement).append( + '<div id="embedThisWidgetIframe">'+ + '<label for="embedThisWidgetIframeInput">› Embed Iframe</label>'+ + '<span id="embedThisWidgetIframeInput">'+ + self.getInputFormWithHtml('iframeEmbed', widgetIframeHtml)+ + '</span>'+ + '</div>' + ); + // Add the Flash Export if a flash <embed> is found in the widget + $(loadedWidgetElement) + .find('embed,object') + .each(function() { + var htmlEmbed = $(this).parent().html(); + + $(exportButtonsElement).append( + '<div id="embedThisWidgetFlash">'+ + '<label for="embedThisWidgetFlashInput">› Embed Flash</label>'+ + '<span id="embedThisWidgetFlashInput">'+ + self.getInputFormWithHtml('flashEmbed', htmlEmbed) + + '</span>'+ + '</div>' + ); + }); - // Clearspring Export + // Add the Clearspring Export + $(exportButtonsElement).append( + '<div id="embedThisWidgetEverywhere">'+ + '<div id="exportThisWidget">'+ + '<label for="flashEmbed">› Export anywhere!</label>'+ + '<img src="http://cdn.clearspring.com/launchpad/static/cs_button_share1.gif">'+ + '</div>'+ + '<div id="exportThisWidgetMenu"></div>'+ + '</div>' + ); + + // We then replace the div iframeDivToExport with the actual Iframe html + // Clearspring will then build a widget that has the same html as this div $('#iframeDivToExport') - .html(widgetIframe); + .html(widgetIframeHtml); - $('#exportThisWidgetMenu').empty(); - $('#embedThisWidgetEverywhere').show(); + // Finally we append the content to the parent widget DIV + $(loadedWidgetElement) + .parent() + .append(exportButtonsElement); + + // Call clearspring $Launchpad.ShowButton({ actionElement : "exportThisWidget", targetElement : "exportThisWidgetMenu", - userId : "49ac5bea72e5cd05", - widgetName : self.currentWidgetName + " - Piwik", + userId : "4797da88692e4fe9", + widgetName : widgetName + " - Piwik", source : "iframeDivToExport" - }); + }); // JS is buggy at least on IE //var widgetJS = '<script type="text/javascript" src="'+ getEmbedUrl(pluginId, actionId, "js") +'"></scr'+'ipt>'; diff --git a/tests/core/DataTable/Renderer.test.php b/tests/core/DataTable/Renderer.test.php index dbfb455054..a170ca784b 100644 --- a/tests/core/DataTable/Renderer.test.php +++ b/tests/core/DataTable/Renderer.test.php @@ -231,13 +231,8 @@ Yahoo!,1,,,15,151,147,50,517,90,http://www.yahoo.com,./plugins/Referers/images/s $render = new Piwik_DataTable_Renderer_Csv(); $render->setTable($dataTable); $render->convertToUnicode = false; - $expected = 'label,value -max_actions,14 -nb_uniq_visitors,57 -nb_visits,66 -nb_actions,151 -sum_visit_length,5118 -bounce_count,44'; + $expected = 'max_actions,nb_uniq_visitors,nb_visits,nb_actions,sum_visit_length,bounce_count +14,57,66,151,5118,44'; $this->assertEqual( $expected,$render->render()); } @@ -1018,11 +1013,9 @@ date2,Yahoo!1,150,1510,http://www.yahoo.com1,./plugins/Referers/images/searchEng $render = new Piwik_DataTable_Renderer_Csv(); $render->setTable($dataTable); $render->convertToUnicode = false; - $expected = 'testKey,label,value -row1,max_actions,14 -row1,nb_uniq_visitors,57 -row2,max_actions,140 -row2,nb_uniq_visitors,570'; + $expected = 'testKey,max_actions,nb_uniq_visitors +row1,14,57 +row2,140,570'; $rendered = $render->render(); $this->assertEqual( $expected,$rendered); @@ -1063,11 +1056,9 @@ idSite,date2,Yahoo!1,150,1510,http://www.yahoo.com1,./plugins/Referers/images/se $render = new Piwik_DataTable_Renderer_Csv(); $render->setTable($dataTable); $render->convertToUnicode = false; - $expected = 'parentArrayKey,testKey,label,value -idSite,row1,max_actions,14 -idSite,row1,nb_uniq_visitors,57 -idSite,row2,max_actions,140 -idSite,row2,nb_uniq_visitors,570'; + $expected = 'parentArrayKey,testKey,max_actions,nb_uniq_visitors +idSite,row1,14,57 +idSite,row2,140,570'; $rendered = $render->render(); $this->assertEqual( $expected,$rendered); diff --git a/tests/core/Url.test.php b/tests/core/Url.test.php index 04ea0fadd3..1b130472f2 100644 --- a/tests/core/Url.test.php +++ b/tests/core/Url.test.php @@ -19,6 +19,7 @@ class Test_Piwik_Url extends UnitTestCase $this->assertEqual(Piwik_Url::getCurrentQueryStringWithParametersModified(array()),Piwik_Url::getCurrentQueryString() ); $this->assertEqual(Piwik_Url::getCurrentUrl(), Piwik_Url::getCurrentUrlWithoutQueryString()); $this->assertEqual(Piwik_Url::getCurrentUrl(), Piwik_Url::getCurrentHost() . Piwik_Url::getCurrentScriptName() ); + print("<br>\nPiwik_Url::getCurrentQueryStringWithParametersModified() " . Piwik_Url::getCurrentQueryStringWithParametersModified(array())); print("<br>\nPiwik_Url::getCurrentUrl() " @@ -35,6 +36,17 @@ class Test_Piwik_Url extends UnitTestCase . Piwik_Url::getCurrentQueryString()); print("<br>\nPiwik_Url::getArrayFromCurrentQueryString() "); var_dump(Piwik_Url::getArrayFromCurrentQueryString()); + + // setting parameter to null should remove it from url + // test on Url.test.php?test=value + $parameters = array_keys(Piwik_Url::getArrayFromCurrentQueryString()); + $parametersNameToValue = array(); + foreach($parameters as $name) + { + $parametersNameToValue[$name] = null; + } + $this->assertEqual(Piwik_Url::getCurrentQueryStringWithParametersModified($parametersNameToValue), ''); + } } diff --git a/themes/default/common.js b/themes/default/common.js index d0d2611c7c..29a16923dd 100644 --- a/themes/default/common.js +++ b/themes/default/common.js @@ -1,3 +1,34 @@ +function piwikHelper() +{ +} +/* + * Returns query string for an object of key,values + * Note: we don't use $.param from jquery as it doesn't return array values the PHP way (returns a=v1&a=v2 instead of a[]=v1&a[]=v2) + * Example: + * piwikHelper.getQueryStringFromParameters({"a":"va","b":["vb","vc"],"c":1}) + * Returns: + * a=va&b[]=vb&b[]=vc&c=1 + */ +piwikHelper.getQueryStringFromParameters = function(parameters) +{ + var queryString = ''; + if(parameters.length==0) { + return queryString; + } + for(var name in parameters) { + value = parameters[name]; + if(typeof value == 'object') { + for(var i in value) { + queryString += name + '[]=' + value[i] + '&'; + } + } else { + queryString += name + '=' + value + '&'; + } + } + return queryString.substring(0, queryString.length-1); +} + +//TODO all piwik global functions should be static of piwikHelper function findSWFGraph(name) { if (navigator.appName.indexOf("Microsoft")!= -1) { return window[name]; @@ -6,6 +37,9 @@ function findSWFGraph(name) { } } +function redirectToUrl(url) { + window.location = url; +} function ajaxHandleError() { $('#loadingError').show(); -- GitLab