| // +----------------------------------------------------------------------+ /** * Sources module class. * * @category Visualizer * @package Module * * @since 1.1.0 */ class Visualizer_Module_Sources extends Visualizer_Module { const NAME = __CLASS__; /** * The array of fetched sources. * * @since 1.1.0 * * @access private * @var array */ private $_sources = array(); /** * Constructor. * * @since 1.1.0 * * @access public * * @param Visualizer_Plugin $plugin The instance of the plugin. */ public function __construct( Visualizer_Plugin $plugin ) { parent::__construct( $plugin ); $this->_addFilter( Visualizer_Plugin::FILTER_GET_CHART_SERIES, 'filterChartSeries', 1, 2 ); $this->_addFilter( Visualizer_Plugin::FILTER_GET_CHART_DATA, 'filterChartData', 1, 2 ); $this->_addFilter( 'visualizer_pro_upsell', 'addProUpsell', 10, 2 ); } /** * Filters chart sereis. * * @since 1.1.0 * * @access public * * @param array $series The array of chart series. * @param int $chart_id The chart id. * * @return array The array of filtered series. */ public function filterChartSeries( $series, $chart_id ) { $source = $this->_getSource( $chart_id ); if ( ! $source ) { return $series; } return $source->repopulateSeries( $series, $chart_id ); } /** * Returns appropriate source object for a chart. * * @since 1.1.0 * * @access private * * @param int $chart_id The chart id. * * @return Visualizer_Source The source object if source exists, otherwise FALSE. */ private function _getSource( $chart_id ) { if ( ! isset( $this->_sources[ $chart_id ] ) ) { $class = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true ); if ( ! class_exists( $class, true ) ) { return false; } $this->_sources[ $chart_id ] = new $class(); } return $this->_sources[ $chart_id ]; } /** * Filters chart data. * * @since 1.1.0 * * @access public * * @param array $data The array of chart data. * @param int $chart_id The chart id. * * @return array The array of filtered data. */ public function filterChartData( $data, $chart_id ) { $source = $this->_getSource( $chart_id ); if ( ! $source ) { return $data; } return $source->repopulateData( $data, $chart_id ); } /** * Add the pro upsell html. * * @param string $old The previous html string. * @param string $feature What feature is this filter running for. * * @return string The new html code. */ public function addProUpsell( $old, $feature = null ) { $return = ''; $feature = strval( $feature ); if ( empty( $feature ) || ( $feature == 'schedule-chart' && ! apply_filters( 'visualizer_is_business', false ) ) ) { $plan = 'PRO'; if ( $feature === 'schedule-chart' ) { $plan = 'BUSINESS'; } $return = '
' . sprintf( __( 'Enable this feature in %s version!', 'visualizer' ), $plan ) . '
'; $return .= ' ' . __( 'Buy now', 'visualizer' ) . ''; $return .= '