Piwik\ViewDataTable\Manager::getAvailableViewDataTables PHP Метод

getAvailableViewDataTables() публичный статический Метод

Returns all registered visualization classes. Uses the 'Visualization.getAvailable' event to retrieve visualizations.
public static getAvailableViewDataTables ( ) : array
Результат array Array mapping visualization IDs with their associated visualization classes.
    public static function getAvailableViewDataTables()
    {
        $cache = Cache::getTransientCache();
        $cacheId = 'ViewDataTable.getAvailableViewDataTables';
        $dataTables = $cache->fetch($cacheId);
        if (!empty($dataTables)) {
            return $dataTables;
        }
        $klassToExtend = '\\Piwik\\Plugin\\ViewDataTable';
        /** @var string[] $visualizations */
        $visualizations = PluginManager::getInstance()->findMultipleComponents('Visualizations', $klassToExtend);
        $result = array();
        foreach ($visualizations as $viz) {
            if (!class_exists($viz)) {
                throw new \Exception("Invalid visualization class '{$viz}' found in Visualization.getAvailableVisualizations.");
            }
            if (!is_subclass_of($viz, $klassToExtend)) {
                throw new \Exception("ViewDataTable class '{$viz}' does not extend Plugin/ViewDataTable");
            }
            $vizId = $viz::getViewDataTableId();
            if (isset($result[$vizId])) {
                throw new \Exception("ViewDataTable ID '{$vizId}' is already in use!");
            }
            $result[$vizId] = $viz;
        }
        /**
         * Triggered to filter available DataTable visualizations.
         *
         * Plugins that want to disable certain visualizations should subscribe to
         * this event and remove visualizations from the incoming array.
         *
         * **Example**
         *
         *     public function filterViewDataTable(&$visualizations)
         *     {
         *         unset($visualizations[HtmlTable::ID]);
         *     }
         *
         * @param array &$visualizations An array of all available visualizations indexed by visualization ID.
         * @since Piwik 3.0.0
         */
        Piwik::postEvent('ViewDataTable.filterViewDataTable', array(&$result));
        $cache->save($cacheId, $result);
        return $result;
    }

Usage Example

Пример #1
0
 /**
  * Creates a {@link Piwik\Plugin\ViewDataTable} instance by ID. If the **viewDataTable** query parameter is set,
  * this parameter's value is used as the ID.
  *
  * See {@link Piwik\Plugin\ViewDataTable} to read about the visualizations that are packaged with Piwik.
  *
  * @param string|null $defaultType A ViewDataTable ID representing the default ViewDataTable type to use. If
  *                                 the **viewDataTable** query parameter is not found, this value is used as
  *                                 the ID of the ViewDataTable to create.
  *
  *                                 If a visualization type is configured for the report being displayed, it
  *                                 is used instead of the default type. (See {@hook ViewDataTable.getDefaultType}).
  *                                 If nothing is configured for the report and `null` is supplied for this
  *                                 argument, **table** is used.
  * @param bool|false|string $apiAction The API method for the report that will be displayed, eg,
  *                               `'UserSettings.getBrowser'`.
  * @param bool|false|string $controllerAction The controller name and action dedicated to displaying the report. This
  *                                       action is used when reloading reports or changing the report visualization.
  *                                       Defaulted to `$apiAction` if `false` is supplied.
  * @param bool $forceDefault If true, then the visualization type that was configured for the report will be
  *                           ignored and `$defaultType` will be used as the default.
  * @throws \Exception
  * @return \Piwik\Plugin\ViewDataTable
  */
 public static function build($defaultType = null, $apiAction = false, $controllerAction = false, $forceDefault = false)
 {
     if (false === $controllerAction) {
         $controllerAction = $apiAction;
     }
     $defaultViewType = self::getDefaultViewTypeForReport($apiAction);
     if (!$forceDefault && !empty($defaultViewType)) {
         $defaultType = $defaultViewType;
     }
     $isWidget = Common::getRequestVar('widget', '0', 'string');
     if (!empty($isWidget)) {
         $params = array();
     } else {
         $login = Piwik::getCurrentUserLogin();
         $params = Manager::getViewDataTableParameters($login, $controllerAction);
     }
     $savedViewDataTable = false;
     if (!empty($params['viewDataTable'])) {
         $savedViewDataTable = $params['viewDataTable'];
     }
     $type = Common::getRequestVar('viewDataTable', $savedViewDataTable, 'string');
     // Common::getRequestVar removes backslashes from the defaultValue in case magic quotes are enabled.
     // therefore do not pass this as a default value to getRequestVar()
     if ('' === $type) {
         $type = $defaultType ?: HtmlTable::ID;
     }
     $visualizations = Manager::getAvailableViewDataTables();
     if (array_key_exists($type, $visualizations)) {
         return self::createViewDataTableInstance($visualizations[$type], $controllerAction, $apiAction, $params);
     }
     if (class_exists($type)) {
         return self::createViewDataTableInstance($type, $controllerAction, $apiAction, $params);
     }
     if (array_key_exists($defaultType, $visualizations)) {
         return self::createViewDataTableInstance($visualizations[$defaultType], $controllerAction, $apiAction, $params);
     }
     if (array_key_exists(HtmlTable::ID, $visualizations)) {
         return self::createViewDataTableInstance($visualizations[HtmlTable::ID], $controllerAction, $apiAction, $params);
     }
     throw new \Exception('No visualization found to render ViewDataTable');
 }
All Usage Examples Of Piwik\ViewDataTable\Manager::getAvailableViewDataTables