Exemple #1
0
 /**
  * This functions reads the customization values for the DataTable and returns an array (name,value) to be printed in Javascript.
  * This array defines things such as:
  * - name of the module & action to call to request data for this table
  * - optional filters information, eg. filter_limit and filter_offset
  * - etc.
  *
  * The values are loaded:
  * - from the generic filters that are applied by default @see Piwik_API_DataTableGenericFilter.php::getGenericFiltersInformation()
  * - from the values already available in the GET array
  * - from the values set using methods from this class (eg. setSearchPattern(), setLimit(), etc.)
  *
  * @return array eg. array('show_offset_information' => 0, 'show_...
  */
 protected function getJavascriptVariablesToSet()
 {
     // build javascript variables to set
     $javascriptVariablesToSet = array();
     $genericFilters = Piwik_API_DataTableGenericFilter::getGenericFiltersInformation();
     foreach ($genericFilters as $filter) {
         foreach ($filter as $filterVariableName => $filterInfo) {
             // if there is a default value for this filter variable we set it
             // so that it is propagated to the javascript
             if (isset($filterInfo[1])) {
                 $javascriptVariablesToSet[$filterVariableName] = $filterInfo[1];
                 // we set the default specified column and Order to sort by
                 // when this javascript variable is not set already
                 // for example during an AJAX call this variable will be set in the URL
                 // so this will not be executed (and the default sorted not be used as the sorted column might have changed in the meanwhile)
                 if (false !== ($defaultValue = $this->getDefault($filterVariableName))) {
                     $javascriptVariablesToSet[$filterVariableName] = $defaultValue;
                 }
             }
         }
     }
     foreach ($_GET as $name => $value) {
         try {
             $requestValue = Piwik_Common::getRequestVar($name);
         } catch (Exception $e) {
             $requestValue = '';
         }
         $javascriptVariablesToSet[$name] = $requestValue;
     }
     // at this point there are some filters values we  may have not set,
     // case of the filter without default values and parameters set directly in this class
     // for example setExcludeLowPopulation
     // we go through all the $this->variablesDefault array and set the variables not set yet
     foreach ($this->variablesDefault as $name => $value) {
         if (!isset($javascriptVariablesToSet[$name])) {
             $javascriptVariablesToSet[$name] = $value;
         }
     }
     if ($this->dataTable instanceof Piwik_DataTable) {
         // we override the filter_sort_column with the column used for sorting,
         // which can be different from the one specified (eg. if the column doesn't exist)
         $javascriptVariablesToSet['filter_sort_column'] = $this->dataTable->getSortedByColumnName();
         // datatable can return "2" but we want to write "nb_visits" in the js
         if (isset(Piwik_Archive::$mappingFromIdToName[$javascriptVariablesToSet['filter_sort_column']])) {
             $javascriptVariablesToSet['filter_sort_column'] = Piwik_Archive::$mappingFromIdToName[$javascriptVariablesToSet['filter_sort_column']];
         }
     }
     $javascriptVariablesToSet['module'] = $this->currentControllerName;
     $javascriptVariablesToSet['action'] = $this->currentControllerAction;
     $javascriptVariablesToSet['viewDataTable'] = $this->getViewDataTableId();
     $javascriptVariablesToSet['controllerActionCalledWhenRequestSubTable'] = $this->controllerActionCalledWhenRequestSubTable;
     if ($this->dataTable) {
         $javascriptVariablesToSet['totalRows'] = $this->dataTable->getRowsCountBeforeLimitFilter();
     }
     // we escape the values that will be displayed in the javascript footer of each datatable
     // to make sure there is malicious code injected (the value are already htmlspecialchar'ed as they
     // are loaded with Piwik_Common::getRequestVar()
     foreach ($javascriptVariablesToSet as &$value) {
         if (is_array($value)) {
             $value = array_map('addslashes', $value);
         } else {
             $value = addslashes($value);
         }
     }
     $deleteFromJavascriptVariables = array('filter_excludelowpop', 'filter_excludelowpop_value');
     foreach ($deleteFromJavascriptVariables as $name) {
         if (isset($javascriptVariablesToSet[$name])) {
             unset($javascriptVariablesToSet[$name]);
         }
     }
     return $javascriptVariablesToSet;
 }