AlkantarClanX12

Your IP : 216.73.217.24


Current Path : /www/capitalgmcbuickregina_830/public/wp-content/plugins/ninja-forms-style/lib/
Upload File :
Current File : /www/capitalgmcbuickregina_830/public/wp-content/plugins/ninja-forms-style/lib/conversion.php

<?php

final class NF_Layouts_Conversion
{
	var $part_array = array();
    var $part_count = - 1;
    var $conditions = array();

    public function __construct()
    {
        add_filter( 'ninja_forms_after_upgrade_settings', array( $this, 'upgrade_field_settings' ), 11 );
    }

    public function upgrade_field_settings( $form_data )
    {

        if ( isset( $form_data[ 'settings' ][ 'formContentData' ] ) ) return $form_data;

        if ( isset ( $form_data[ 'settings' ][ 'conditions' ] ) ) {
            $this->conditions = $form_data[ 'settings' ][ 'conditions' ];
        }
        
        /*
         * Add our fields to the appropriate part.
         */
        array_walk( $form_data[ 'fields' ], array( $this, 'divider_check' ), $form_data );

        /*
         * If we have parts, set our formContentData to the parts array.
         */
        if ( -1 != $this->part_count ) {
            /*
             * If Layouts & Styles data is present, pass our parts through a layout conversion.
             */
            if ( isset ( $form_data[ 'settings' ][ 'style' ] ) ) {
                array_walk( $this->part_array, array( $this, 'layout_check' ), $form_data );
            }

            /*
             * Add else statements to our conditions.
             */
            array_walk( $this->conditions, array( $this, 'conditions_add_else' ) );

            /*
             * Remove any page_divider types we have in our array.
             */
            usort( $form_data[ 'fields' ], array( $this, 'sort_fields' ) );
            $form_data[ 'fields' ] = array_filter( $form_data[ 'fields' ], array( $this, 'remove_dividers' ) );
            $form_data[ 'settings' ][ 'formContentData' ] = $this->part_array;
            $form_data[ 'settings' ][ 'conditions' ] = $this->conditions;
        } else {
            /*
             * We don't have any parts, so pass the fields through our convert layouts function.
             */
            $cols = ( isset ( $form_data[ 'settings' ][ 'style' ] ) ) ? $form_data[ 'settings' ][ 'style' ][ 'cols' ] : 0;
            $form_data[ 'settings' ][ 'formContentData' ] = $this->convert_layouts( $cols, $form_data[ 'fields' ] );
        }

        return $form_data;
    }

    public function divider_check( $field, $index, $form_data )
    {
        if ( 'page_divider' == $field[ 'type' ] ) {
            $this->part_count++;

            $this->part_array[ $this->part_count ] = array(
                'title'             => ( isset( $field[ 'label' ] ) && ! empty( $field[ 'label' ] ) ) ? $field[ 'label' ] : 'Part ' . ( $this->part_count + 1 ),
                'order'             => $this->part_count,
                'type'              => 'part',
                'key'               => uniqid(),
                'formContentData'   => array(),
            );

            /* 
             * Check to see if this page divider is referenced in any conditions. If it is, update those references.
             */
            $this->check_conditions( $field, $this->part_array[ $this->part_count ] );
        } else if ( ! isset ( $form_data[ 'settings' ][ 'style' ] ) ) {
            $this->part_array[ $this->part_count ][ 'formContentData' ][] = $field[ 'key' ];
        } else {
            $this->part_array[ $this->part_count ][ 'formContentData' ][] = $field;
        }
    }

    public function remove_dividers( $field ) {
        return 'page_divider' != $field[ 'type' ];
    }

    public function layout_check( &$part, $index, $form_data ) {
        $part[ 'formContentData' ] = $this->convert_layouts( $form_data[ 'settings' ][ 'style' ][ 'mp' ][ $index + 1 ][ 'cols' ], $part[ 'formContentData' ] );
    }

    public function convert_layouts( $cols, $fields ) {
        /*
         * If we have no columns, return a default formContentData
         */
        if ( empty( $cols ) ) {
            usort( $fields, array( $this, 'sort_fields' ) );
            $formContentData = array();
            for( $i = 0; $i < count( $fields ); $i++ ){
                $formContentData[] = array(
                    'order' => 0,
                    'cells' => array(
                        array(
                            'order' => 0,
                            'fields' => array(
                                $fields[ $i ][ 'key' ]
                            ),
                            'width' => 100
                        )
                    )
                );
            }

            return $formContentData;
        }

        /*
         * Try to catch any bad layout errors.
         */
        $rows = array();
        $roworder = 0;
        $coltrack = 0;
        $cells = array();
        $cellorder = 0;

        for ( $i = 0; $i < count( $fields ); $i++ ) {
            /*
             * If we don't have a colspan set, it should be equal to our cols.
             */
            if ( ! isset( $fields[ $i ][ 'style' ][ 'colspan' ] ) ) {
                $fields[ $i ][ 'style' ][ 'colspan' ] = $cols;
            }

            if ( $fields[ $i ][ 'style' ][ 'colspan' ] > $cols ) {
                $fields[ $i ][ 'style' ][ 'colspan' ] = $cols;
            }

            /*
             * If our colspan + coltrack is less than or equal to cols, we add this to our cells.
             */
            if ( $fields[ $i ][ 'style' ][ 'colspan' ] + $coltrack <= $cols ) {
                
                if( ! isset( $fields[ $i ][ 'key' ] ) ){
                    $fields[ $i ][ 'key' ] = ltrim( $fields[ $i ][ 'type' ], '_' ) . '_asdf' . $fields[ $i ][ 'id' ];
                }

                if( '_text' == $fields[ $i ][ 'type' ] && isset( $fields[ $i ][ 'datepicker' ] ) && $fields[ $i ][ 'datepicker' ] ){
                    $fields[ $i ][ 'key' ] = 'date_' . $fields[ $i ][ 'id' ];
                }

                $cells[] = array(
                    'order'     => $cellorder,
                    'fields'    => array(
                        $fields[ $i ][ 'key' ]
                    ),
                    'width'     => $fields[ $i ][ 'style' ][ 'colspan' ],
                );
             
                $coltrack += $fields[ $i ][ 'style' ][ 'colspan' ];
                $cellorder++;
            } else {
                $rows[] = $this->layouts_new_row( $cols, $cells, $roworder, $cellorder );
                
                $roworder++;
                $coltrack = 0;
                $cellorder = 0;
                $cells = array();
                $i--;
            }

            if ( $i == count( $fields ) - 1 ) {
                $rows[] = $this->layouts_new_row( $cols, $cells, $roworder, $cellorder );
            }

        } // for field loop
        return $rows;
    }

    private function layouts_new_row( $cols, $cells, $roworder, $cellorder )
    {
        /*
         * We're on a new row. We now need to add the previous row, represented by the $cells variable, to our rows array.
         *
         * 1) Add any blank cells necessary.
         * 1) Add the cells to a new row.
         * 2) Move our $i pointer back one field.
         * 
         * We need to add an extra blank cell to make up the difference.
         */
        $diff = 0;
        foreach( $cells as $cell ) {
            $diff += $cell[ 'width' ];
        }
        $diff = $cols - $diff;

        if ( 0 != $diff ) {
            $cells[] = array(
                'order'     => $cellorder,
                'fields'    => array(),
                'width'     => $diff,
            );
        }

        foreach( $cells as $index => $cell ) {
            $cells[ $index ][ 'width' ] = $this->convert_width( $cells[ $index ][ 'width' ], $cols, $cells );
        }

        return array(
            'order' => $roworder,
            'cells' => $cells
        );
    }

    private function convert_width( $width, $cols, $cells )
    {

        /*
         * width will be set to the colspan of our initial cell.
         */
        switch ( $cols ) {
            case 1:
                if ( 1 == $width ) {
                    $width = 100;
                }
                break;
            case 2:
                /*
                 * If we have a colspan of 2, either it's 100%, which is handled above, or 50%.
                 */
                if ( 2 == $width ) {
                    $width = 100;
                } else {
                    $width = 50; 
                }
                break;
            
            case 3:
                /*
                 * If we have a cols value of 3, either all cells are 33% or one is 75% and the other is 25%.
                 */
                if ( 1 == $width && 2 == count( $cells ) ) {
                    $width = 25;
                } else if ( 2 == $width ) {
                    $width = 75;
                } else if ( 3 == $width ){
                    $width = 100;
                } else {
                    $width = 33;
                }

                break;
            
            case 4:
                /*
                 * If we have a cols value of 4, we can get our percentages with simple math.
                 */
                $width = $width / 4 * 100;
                break;
        }

        return $width;
    }

    private function check_conditions( $field, $part )
    {
        array_walk( $this->conditions, array( $this, 'check_conditions_walk' ), array( 'field' => $field, 'part' => $part ) );
    }

    private function check_conditions_walk( &$condition, $index, $data )
    {

        $field = $data[ 'field' ];
        $part = $data[ 'part' ];

        /*
         * If we have any "then" statements that reference our divider, replace them with part info.
         * Also replace the trigger.
         */
        array_walk( $condition[ 'then' ], array( $this, 'conditions_replace_then' ), $data );
    }

    private function conditions_replace_then( &$then, $index, $data )
    {
        $field = $data[ 'field' ];
        $part = $data[ 'part' ];

        if ( $then[ 'key' ] == $field[ 'key' ] ) {
            $then[ 'key' ] = $part[ 'key' ];
            $then[ 'type' ] = 'part';
            if ( 'ninja_forms_show_mp_page' == $then[ 'trigger' ] ) {
                $then[ 'trigger' ] = 'show_part';
            } else if ( 'ninja_forms_hide_mp_page' == $then[ 'trigger' ] ) {
                $then[ 'trigger' ] = 'hide_part';
            }
        }
    }

    private function conditions_add_else( &$condition, $index )
    {
        foreach( $condition[ 'then' ] as $tindex => $then ) {
            if ( 'part' != $then[ 'type' ] ) continue;
            if ( 'show_part' == $then[ 'trigger' ] ) {
                $opposite = 'hide_part';
            } else {
                $opposite = 'show_part';
            }
            if ( empty ( $condition[ 'else' ][0] ) ) {
                unset( $condition[ 'else' ][0] );
                $condition[ 'else' ] = array_values( $condition[ 'else' ] );
            }
            $condition[ 'else' ][] = array(
                'key' => $then[ 'key' ],
                'trigger' => $opposite,
                'value' => '',
                'type'  => 'part'
            );
        }
    }

    private function sort_fields($a, $b) {
        return $a['order'] - $b['order'];
    }
} // End of Class

new NF_Layouts_Conversion();

Home - Capital GMC Buick Regina

No data

Welcome to Capital GMC BUICK – REGINA

Thank you for choosing Capital GMC Buick | Regina, your premier certified Buick and GMC dealership proudly serving drivers in Regina and the surrounding communities. Whether you’re searching for a brand-new Buick or GMC vehicle or a meticulously inspected pre-owned model, we have a diverse selection to match your needs and lifestyle.

Beyond our impressive inventory, we offer a seamless and stress-free financing experience through our well-connected finance centre, where our team of experts is dedicated to securing the best loan or lease options for you, quickly, transparently, and hassle-free.

But our commitment to you doesn’t stop at the sale. Our state-of-the-art service centre is staffed with skilled Buick and GMC technicians who use the latest equipment and genuine OEM parts to keep your vehicle running at its best. From routine maintenance to complex repairs, we’ve got you covered.

Experience top-tier customer service, quality vehicles, and expert care, all in one place. Visit Capital GMC Buick | Regina today or call us at 306-205-8072 with any questions. We’re here to help!

Ask a Question