Example #1
0
 /**
  * st_col function.
  *
  * @access public
  * @static
  * @param mixed $atts
  * @param mixed $content
  * @return void
  */
 public static function st_col($atts, $content)
 {
     $atts = shortcode_atts(array('width' => '1/1'), $atts);
     extract($atts);
     self::$shortcode_count++;
     $out = '';
     $class = stpb_layout_column_class(str_replace('/', '-', $width));
     $out .= '<div class="' . esc_attr(trim($class)) . '">';
     $out .= do_shortcode($content);
     $out .= '</div>';
     $out = apply_filters('st_col', $out, $atts);
     return $out;
 }
 function group_columns_to_row($cols, $level = 1, $parent_type = '')
 {
     $rows = array();
     $ri = $i = 0;
     $n = count($cols);
     while ($i < $n) {
         $width = $this->get_col_width($cols[$i]);
         $c = $this->divider($width);
         if ($rows[$ri]['total'] + $c <= 1) {
             $rows[$ri]['total'] += $c;
             $rows[$ri]['cols'][] = $cols[$i];
         } else {
             $ri++;
             $rows[$ri]['total'] += $c;
             $rows[$ri]['cols'][] = $cols[$i];
         }
         $rows[$ri]['__type'] = $cols[$i]['type'];
         $i++;
     }
     // end while
     // generate code to display: maybe html or shortcode
     $string_shortcode = array();
     $n_rows = count($rows);
     $row_data = false;
     foreach ($rows as $j => $row) {
         $str_cols = array();
         $i = 1;
         $nr = count($row['cols']);
         $row_wrapper_class = '';
         $row_data = false;
         foreach ($row['cols'] as $ci => $data) {
             // row - column index
             $rc = 'index-' . $i;
             if ($i == $nr) {
                 $rc .= ' last ';
             }
             if ($i == 1) {
                 $rc .= ' first ';
             }
             $i++;
             $data = stripslashes_deep($data);
             $width = $this->get_col_width($data);
             $item_class = '';
             //$item_class =' lv-'.$level;
             if (strtolower($data['type']) == 'item') {
                 $row_wrapper_class = ' items-inside';
                 $item_class = ' ' . stpb_layout_column_class('1-1') . ' ' . $item_class;
                 $item = $this->builder_items[$data['item_func']];
                 if (empty($item)) {
                     $item = $this->builder_items[$data['builder_item_func']];
                 }
                 $i_class = ' index-' . ($j + 1);
                 if ($j == 0) {
                     $i_class .= ' first';
                 }
                 if ($j == $n_rows - 1) {
                     $i_class .= ' last';
                 }
                 $row_wrapper_class .= $i_class;
                 if (function_exists($item['generate_func'])) {
                     $func_class = str_replace(array('generate_', '_'), array('', '-'), $item['generate_func']);
                     //$str_cols[]="<div class=\"".apply_filters('stpb_item_generate_class',"builder-item".$item_class." $rc", $data)."\" ><div class=\"item-inner {$func_class}\">".call_user_func($item['generate_func'],$data)."</div> </div>";
                     //$str_cols[]="<div class=\"item-inner ".apply_filters('stpb_item_generate_class',"builder-item".$item_class." $rc", $data)." {$func_class}\">".call_user_func($item['generate_func'],$data)."</div> ";
                     if ($level == 1) {
                         if (in_array($item['generate_func'], array('stpb_generate_map', 'stpb_generate_LayerSlider', 'stpb_generate_revslider'))) {
                             // fake is row
                             $row['__type'] = 'row';
                             $row_data = array('settings' => array('_classes' => $func_class));
                             $str_cols[] = call_user_func($item['generate_func'], $data);
                         } else {
                             $str_cols[] = "<div class=\"" . apply_filters('stpb_item_generate_class', "builder-item" . $item_class . " {$rc}", $data) . "\" ><div class=\"item-inner {$func_class}\">" . call_user_func($item['generate_func'], $data) . "</div> </div>";
                         }
                     } else {
                         $str_cols[] = "<div class=\"item-inner {$func_class}\">" . call_user_func($item['generate_func'], $data) . "</div>";
                     }
                 } else {
                     $str_cols[] = "<div class=\"nothing-inside " . apply_filters('stpb_item_generate_class', "builder-item" . $item_class . " {$rc}", $data) . "\">  </div>";
                 }
             } elseif (strtolower($data['type']) == 'column') {
                 // if item is a column
                 $row_wrapper_class = ' columns-inside';
                 $data['settings'] = array_filter($data['settings']);
                 $str_cols[] = '   <div class=" ' . apply_filters('stpb_column_generate_class', "builder-column " . stpb_layout_column_class($width, $level) . $item_class . " {$rc}", $data) . '"> ' . apply_filters('stpb_column_generate_settings_before', '', $data) . self::group_columns_to_row($data['items'], $level + 1, 'column') . apply_filters('stpb_column_generate_settings_after', '', $data) . ' </div> ';
             } elseif (strtolower($data['type']) == 'row') {
                 // $data['settings'] = array_filter($data['settings']);
                 $row_data = $data;
                 $row_wrapper_class = ' rows-inside';
                 // row- secction mod
                 //$row_data['settings']['_classes'] = apply_filters('stpb_row_generate_class','builder-row'.$item_class." $rc", $data);
                 $str_cols[] = self::group_columns_to_row($data['items'], $level + 1, 'row');
                 // .apply_filters('stpb_row_generate_settings_after','',$data);
             } else {
                 $str_cols[] = "<div class=\"no-item-inside" . stpb_layout_column_class($width, $level) . $item_class . "\"></div>";
             }
         }
         $str_cols = join("\n", $str_cols);
         $classes = 'items-wrapper ' . $row_wrapper_class;
         if ($level < 2) {
             $classes .= ' row';
         }
         $index_class = '';
         /*
         if($level<2){
             $index_class.=' r-index-'.($j+1);
             if($j==0){
                 $index_class .=' r-first';
             }
             if($j==$n_rows-1){
                 $index_class .=' r-last';
             }
         }
         */
         // echo  var_dump($row['__type'])."\n\n<hr/>\n\n";
         if ($row_data) {
             $content = $str_cols;
         } else {
             $content = '<div class="' . apply_filters('stpb_wraper_class', $classes, $level, $row) . '">' . $str_cols . ' <div class="clear"></div> </div>';
         }
         $string_shortcode[] = array('content' => $content, 'type' => $row['__type'], 'data' => $row_data);
         $row_index++;
     }
     $a_content = array();
     $isc = 0;
     $is_new_row = false;
     foreach ($string_shortcode as $k => $e) {
         if ($e['type'] != 'row') {
             if ($is_new_row) {
                 $isc++;
                 $is_new_row = false;
             }
             $a_content[$isc]['c'][] = $e['content'];
             $a_content[$isc]['data'] = $e['data'];
         } else {
             $isc++;
             $a_content[$isc]['c'] = $e['content'];
             $a_content[$isc]['data'] = $e['data'];
             $is_new_row = true;
         }
     }
     unset($string_shortcode, $isc);
     // $a_content = array_filter($a_content);
     $return_content = '';
     $ca = count($a_content);
     $aindex = 0;
     foreach ($a_content as $k => $e) {
         $classes = array();
         $classes[] = 'section  section-' . ($aindex + 1);
         $classes[] = ' lv-' . $level;
         if ($aindex == 0) {
             $classes[] = ' first';
         }
         if ($aindex == $ca - 1) {
             $classes[] = 'last';
         }
         if ($level == 1) {
             if (!empty($e['data']) && is_array($e['data'])) {
                 $e['data']['settings']['_classes'] .= '  ' . join(' ', $classes);
                 $return_content .= apply_filters('stpb_row_generate_settings_before', '', $e['data']);
             } else {
                 $classes[] = 'g';
                 $return_content .= '<div class="' . join(' ', $classes) . '">';
             }
         }
         if (is_array($e['c']) && count($e['c']) > 1) {
             //$return_content .=   join(' ', $e['c']);
             $n = count($e['c']);
             foreach ($e['c'] as $k => $c) {
                 $classs = 'bd-row row-' . $k . ' n-' . $n . ' lv-' . $level;
                 if ($k == 0) {
                     $classs .= ' first';
                 }
                 if ($k == $n - 1) {
                     $classs .= ' last';
                 }
                 if ($level < 2) {
                     $classs .= ' row';
                 }
                 $classs .= ' clearfix';
                 $return_content .= '<div class="' . $classs . '">' . $c . '</div>';
             }
         } else {
             $c = is_string($e['c']) ? $e['c'] : $e['c'][0];
             if ($level == 1) {
                 $c = '<div class="bd-row one first last clearfix lv-1">' . $c . '</div>';
             }
             $return_content .= $c;
             unset($c);
         }
         if ($level == 1) {
             if (!empty($e['data']) && is_array($e['data'])) {
                 $return_content .= apply_filters('stpb_row_generate_settings_after', '', $e['data']);
             } else {
                 $return_content .= "</div>";
             }
         }
         $aindex++;
     }
     // $string_shortcode = join("\n",$string_shortcode);
     return $return_content;
 }