/wp-content/plugins/fusion-core/shortcodes/class-counters-box.php

https://gitlab.com/woxiprogrammers/infinia-wordpress · PHP · 262 lines · 166 code · 75 blank · 21 comment · 25 complexity · 8b90b4abe3e35b482d70b692ba1707e2 MD5 · raw file

  1. <?php
  2. class FusionSC_CountersBox {
  3. public static $parent_args;
  4. public static $child_args;
  5. /**
  6. * Initiate the shortcode
  7. */
  8. public function __construct() {
  9. add_filter( 'fusion_attr_counters-box-shortcode', array( $this, 'parent_attr' ) );
  10. add_filter( 'fusion_attr_counter-box-container', array( $this, 'container_attr' ) );
  11. add_shortcode( 'counters_box', array( $this, 'render_parent' ) );
  12. add_filter( 'fusion_attr_counter-box-shortcode', array( $this, 'child_attr' ) );
  13. add_filter( 'fusion_attr_counter-box-shortcode-icon', array( $this, 'icon_attr' ) );
  14. add_filter( 'fusion_attr_counter-box-shortcode-unit', array( $this, 'unit_attr' ) );
  15. add_filter( 'fusion_attr_counter-box-shortcode-counter', array( $this, 'counter_attr' ) );
  16. add_filter( 'fusion_attr_counter-box-shortcode-counter-container', array( $this, 'counter_container_attr' ) );
  17. add_filter( 'fusion_attr_counter-box-shortcode-content', array( $this, 'content_attr' ) );
  18. add_shortcode( 'counter_box', array( $this, 'render_child' ) );
  19. }
  20. /**
  21. * Render the shortcode
  22. *
  23. * @param array $args Shortcode paramters
  24. * @param string $content Content between shortcode
  25. * @return string HTML output
  26. */
  27. function render_parent( $args, $content = '' ) {
  28. global $smof_data;
  29. $defaults = FusionCore_Plugin::set_shortcode_defaults(
  30. array(
  31. 'class' => '',
  32. 'id' => '',
  33. 'body_color' => strtolower( $smof_data['counter_box_body_color'] ),
  34. 'body_size' => strtolower( $smof_data['counter_box_body_size'] ),
  35. 'border_color' => strtolower( $smof_data['counter_box_border_color'] ),
  36. 'color' => strtolower( $smof_data['counter_box_color'] ),
  37. 'columns' => '',
  38. 'icon_size' => strtolower( $smof_data['counter_box_icon_size'] ),
  39. 'icon_top' => strtolower( $smof_data['counter_box_icon_top'] ),
  40. 'title_size' => strtolower( $smof_data['counter_box_title_size'] ),
  41. ), $args
  42. );
  43. extract( $defaults );
  44. self::$parent_args = $defaults;
  45. if( self::$parent_args['columns'] > 6 ) {
  46. self::$parent_args['columns'] = 6;
  47. }
  48. $this->set_num_of_columns( $content );
  49. $html = sprintf( '<div %s>%s</div><div class="clearfix"></div>', FusionCore_Plugin::attributes( 'counters-box-shortcode' ), do_shortcode( $content ) );
  50. return $html;
  51. }
  52. function parent_attr() {
  53. $attr['class'] = sprintf( 'fusion-counters-box counters-box row fusion-clearfix fusion-columns-%s', self::$parent_args['columns'] );
  54. if( self::$parent_args['class'] ) {
  55. $attr['class'] .= ' ' . self::$parent_args['class'];
  56. }
  57. if( self::$parent_args['id'] ) {
  58. $attr['id'] = self::$parent_args['id'];
  59. }
  60. return $attr;
  61. }
  62. function container_attr() {
  63. $attr['class'] = 'counter-box-container';
  64. $attr['style'] = sprintf( 'border: 1px solid %s;', self::$parent_args['border_color'] );
  65. return $attr;
  66. }
  67. /**
  68. * Render the child shortcode
  69. *
  70. * @param array $args Shortcode paramters
  71. * @param string $content Content between shortcode
  72. * @return string HTML output
  73. */
  74. function render_child( $args, $content = '' ) {
  75. global $smof_data;
  76. $defaults = FusionCore_Plugin::set_shortcode_defaults(
  77. array(
  78. 'class' => '',
  79. 'id' => '',
  80. 'delimiter' => '',
  81. 'direction' => 'up',
  82. 'icon' => '',
  83. 'unit' => '',
  84. 'unit_pos' => 'suffix',
  85. 'value' => '20'
  86. ), $args
  87. );
  88. extract( $defaults );
  89. self::$child_args = $defaults;
  90. self::$child_args['value'] = intval( $value );
  91. $unit_output = '';
  92. if( $unit ) {
  93. $unit_output = sprintf( '<span %s>%s</span>', FusionCore_Plugin::attributes( 'counter-box-shortcode-unit' ), $unit );
  94. }
  95. if( $direction == 'up' ) {
  96. $init_value = 0;
  97. } else {
  98. $init_value = self::$child_args['value'];
  99. }
  100. $counter = sprintf( '<span %s>%s</span>', FusionCore_Plugin::attributes( 'counter-box-shortcode-counter' ), $init_value );
  101. $icon_output = '';
  102. if( $icon ) {
  103. $icon_output = sprintf( '<i %s></i>', FusionCore_Plugin::attributes( 'counter-box-shortcode-icon' ) );
  104. }
  105. if( $unit_pos == 'prefix' ) {
  106. $counter = $icon_output . $unit_output . $counter;
  107. } else {
  108. $counter = $icon_output . $counter . $unit_output;
  109. }
  110. $counter_wrapper = sprintf( '<div %s>%s</div>', FusionCore_Plugin::attributes( 'counter-box-shortcode-counter-container' ), $counter );
  111. $content_output = sprintf( '<div %s>%s</div>', FusionCore_Plugin::attributes( 'counter-box-shortcode-content' ), do_shortcode( $content ) );
  112. $html = sprintf( '<div %s><div %s>%s</div></div>', FusionCore_Plugin::attributes( 'counter-box-shortcode' ), FusionCore_Plugin::attributes( 'counter-box-container' ),
  113. $counter_wrapper . $content_output );
  114. return $html;
  115. }
  116. function child_attr() {
  117. if( self::$parent_args['columns'] &&
  118. ! empty( self::$parent_args['columns'] )
  119. ) {
  120. $columns = 12 / self::$parent_args['columns'];
  121. } else {
  122. $columns = 1;
  123. }
  124. $attr['class'] = 'fusion-counter-box fusion-column col-counter-box counter-box-wrapper col-lg-' . $columns . ' col-md-' . $columns . ' col-sm-' . $columns;
  125. if( self::$parent_args['columns'] == '5' ) {
  126. $attr['class'] = 'fusion-counter-box fusion-column col-counter-box counter-box-wrapper col-lg-2 col-md-2 col-sm-2';
  127. }
  128. if( self::$child_args['class'] ) {
  129. $attr['class'] .= ' ' . self::$child_args['class'];
  130. }
  131. if( self::$child_args['id'] ) {
  132. $attr['id'] = self::$child_args['id'];
  133. }
  134. return $attr;
  135. }
  136. function icon_attr() {
  137. $attr['class'] = sprintf( 'counter-box-icon fa fontawesome-icon %s', FusionCore_Plugin::font_awesome_name_handler( self::$child_args['icon'] ) );
  138. $attr['style'] = sprintf( 'font-size:%spx;', self::$parent_args['icon_size'] );
  139. if( self::$parent_args['icon_top'] == 'yes' ) {
  140. $attr['style'] .= 'display:block;';
  141. }
  142. return $attr;
  143. }
  144. function unit_attr() {
  145. $attr['class'] = 'unit';
  146. return $attr;
  147. }
  148. function counter_attr() {
  149. $attr['class'] = 'display-counter';
  150. $attr['data-value'] = self::$child_args['value'];
  151. $attr['data-delimiter'] = self::$child_args['delimiter'];
  152. $attr['data-direction'] = self::$child_args['direction'];
  153. return $attr;
  154. }
  155. function counter_container_attr() {
  156. $attr['class'] = 'content-box-percentage content-box-counter';
  157. $attr['style'] = sprintf( 'color:%s;font-size:%spx;line-height:%s;', self::$parent_args['color'], self::$parent_args['title_size'], 'normal' );
  158. return $attr;
  159. }
  160. function content_attr() {
  161. $attr['class'] = 'counter-box-content';
  162. $attr['style'] = sprintf( 'color:%s;font-size:%spx;', self::$parent_args['body_color'], self::$parent_args['body_size'] );
  163. return $attr;
  164. }
  165. /**
  166. * Calculate the number of columns automatically
  167. * @param string $content Content to be parsed
  168. */
  169. function set_num_of_columns( $content ) {
  170. if( ! self::$parent_args['columns'] ) {
  171. preg_match_all( '/(\[counter_box (.*?)\](.*?)\[\/counter_box\])/s', $content, $matches );
  172. if( is_array( $matches ) &&
  173. ! empty( $matches )
  174. ) {
  175. self::$parent_args['columns'] = count( $matches[0] );
  176. if( self::$parent_args['columns'] > 6 ) {
  177. self::$parent_args['columns'] = 6;
  178. }
  179. } else {
  180. self::$parent_args['columns'] = 1;
  181. }
  182. } elseif( self::$parent_args['columns'] > 6 ) {
  183. self::$parent_args['columns'] = 6;
  184. }
  185. }
  186. }
  187. new FusionSC_CountersBox();