Plugin Directory

Changeset 1834405


Ignore:
Timestamp:
03/06/2018 11:00:09 AM (8 years ago)
Author:
Tauhidul Alam
Message:

Added PHP templating within plugin, removed heredoc and fixed some PHP issues

Location:
advanced-angular-contact-form/trunk
Files:
12 added
1 edited

Legend:

Unmodified
Added
Removed
  • advanced-angular-contact-form/trunk/contact-form.php

    r1834011 r1834405  
    44 * Plugin Name: Advanced Angular Contact Form
    55 * Description: A simple contact form builder developed with Angular and Angular material design. Check it!
    6  * Version: 1.0.0
     6 * Version: 1.1.0
    77 * Author: Tauhidul Alam
    88 * Author URI: https://github.com/CoreJADeveloper/contact-form
    9  *
    109 * Text Domain: ngForms
    1110 * Domain Path: /languages/
     
    229228            unset($_POST['form_id']);
    230229        } else {
    231             die();
     230            wp_die();
    232231        }
    233232
     
    263262        $email_subject = str_replace('{site_title}', strval(get_bloginfo('name')), $email_subject);
    264263
    265 //        For now we are calculating smart tag only for the super admin (1), later we'll add global settings page and deliver appropriate user info who would be selected
     264//         For now we are calculating smart tag only for the super admin (1),
     265//         later we'll add global settings page and deliver appropriate user
     266//         info who would be selected
    266267        $user_info = get_userdata(1);
    267268
     
    321322
    322323    /**
     324     * Include a template
     325     *
     326     * @since 1.1.0
     327     * @param string $template_name
     328     * @param mixed $args
     329     * @param string $template_path
     330     * @param string $default_path
     331     */
     332    private function ng_locate_template_part($template_name, $args = array(), $template_path = '', $default_path = '')
     333    {
     334        if (isset($args) && is_array($args)) :
     335            extract($args);
     336        endif;
     337
     338        $template_file = $this->ng_locate_template($template_name, $template_path, $default_path);
     339
     340        include $template_file;
     341    }
     342
     343    /**
     344     * Process file location to include
     345     *
     346     * @since 1.1.0
     347     * @param string $template_name
     348     * @param string $template_path
     349     * @param string $default_path
     350     * @return string
     351     */
     352    private function ng_locate_template($template_name, $template_path = '', $default_path = '')
     353    {
     354        if (!$template_path) :
     355            $template_path = 'templates/';
     356        endif;
     357
     358        if (!$default_path) :
     359            $default_path = ANGCF_PLUGIN_PATH . 'templates/';
     360        endif;
     361
     362        $template = locate_template(array(
     363            $template_path . $template_name,
     364            $template_name
     365        ));
     366
     367        if (!$template) :
     368            $template = $default_path . $template_name;
     369        endif;
     370
     371        return apply_filters('ng_contact_form_locate_template', $template, $template_name, $template_path, $default_path);
     372    }
     373
     374    /**
    323375     * Generates short code content
    324376     *
    325      * @since 1.0.0
     377     * @since 1.1.0
    326378     * @param mixed $atts
    327379     * @return string
     
    338390            return false;
    339391
    340         $esc_html = 'esc_html';
    341 
    342392        wp_register_script('angcf-inline-script', ANGCF_PLUGIN_URL . 'dist/script.js', array('angcf-script'), false, true);
    343393        wp_enqueue_script('angcf-inline-script');
     
    354404        ob_start();
    355405
    356         echo <<<EOL
    357             <div class="ng-contact-form-container">
    358 EOL;
    359 
    360         if (isset($form_fields_settings->form_name) && !empty($form_fields_settings->form_name)) {
    361             echo <<<EOV
    362             <h3>{$esc_html($form_fields_settings->form_name)}</h3>
    363 EOV;
    364         }
    365 
    366         echo <<<EOY
    367             <form action='#' method='post' class='{$form_fields_settings->form_css_classes} ng-contact-form-submit'>
    368 EOY;
    369 
     406        $before_args['form_fields_settings'] = $form_fields_settings;
     407        $this->ng_locate_template_part('fields/before-form-fields.php', $before_args);
    370408
    371409        if (!empty($form_fields_array)) {
     
    373411                switch ($field->type) {
    374412                    case 'text':
    375                         echo $this->generate_text_field($key, $field);
     413                        $this->generate_text_field($key, $field);
    376414                        break;
    377415
    378416                    case 'textarea':
    379                         echo $this->generate_textarea_field($key, $field);
     417                        $this->generate_textarea_field($key, $field);
    380418                        break;
    381419
    382420                    case 'email':
    383                         echo $this->generate_email_field($key, $field);
     421                        $this->generate_email_field($key, $field);
    384422                        break;
    385423
    386424                    case 'number':
    387                         echo $this->generate_number_field($key, $field);
     425                        $this->generate_number_field($key, $field);
    388426                        break;
    389427
    390428                    case 'checkbox':
    391                         echo $this->generate_checkbox_field($key, $field);
     429                        $this->generate_checkbox_field($key, $field);
    392430                        break;
    393431
    394432                    case 'radio':
    395                         echo $this->generate_radio_field($key, $field);
     433                        $this->generate_radio_field($key, $field);
    396434                        break;
    397435
    398436                    case 'select':
    399                         echo $this->generate_select_field($key, $field);
     437                        $this->generate_select_field($key, $field);
    400438                        break;
    401439
    402440                    case 'submit':
    403                         echo $this->generate_submit_field($field);
     441                        $this->generate_submit_field($field);
    404442                        break;
    405443                }
     
    407445        }
    408446
    409         echo <<<EOY
    410             <input type='hidden' name='action' value='send-ng-contact-email' />
    411             <input type='hidden' name='form_id' value='{$esc_html($form_id)}' />
    412             </form>
    413             </div>
    414 EOY;
     447        $before_args['form_id'] = $form_id;
     448        $this->ng_locate_template_part('fields/after-form-fields.php', $before_args);
     449
    415450        $custom_form_style = '.ng-contact-form-container{margin: 10px 0;}';
    416451
     
    511546    private function generate_text_field($key, $field_object)
    512547    {
    513         $esc_html = 'esc_html';
    514         $esc_attr = 'esc_attr';
    515         if ($field_object->required) {
    516             $required = 'required';
    517         } else {
    518             $required = '';
    519         }
    520         if (!$field_object->hide_label && $field_object->required) {
    521             $field_html_label = <<<EOD
    522                     <div>
    523                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    524                     </div>
    525 EOD;
    526         } else if (!$field_object->hide_label && !$field_object->required) {
    527             $field_html_label = <<<EOD
    528                     <div>
    529                     <label>{$esc_html($field_object->label)}</label>
    530                     </div>
    531 EOD;
    532         } else {
    533             $field_html_label = '';
    534         }
    535 
    536         if ($field_object->hide_label && $field_object->required) {
    537             $field_html_input = <<<EOF
    538                     <div class={$esc_attr($field_object->built_classes)}>
    539                     <span class='required-field-class'>*</span>
    540                     <input type='text'
    541                     placeholder='{$field_object->placeholder}'
    542                     class='{$esc_attr($field_object->built_classes)} {$esc_attr($field_object->classes)}'
    543                     {$required} name='ng-field[ng-field-{$key}]'
    544                     value='{$esc_html($field_object->default_value)}' />
    545                     <span>{$esc_html($field_object->description)}</span>
    546                     </div>
    547 EOF;
    548         } else {
    549             $field_html_input = <<<EOF
    550                     <div class={$esc_attr($field_object->built_classes)}>
    551                     <input type='text'
    552                     placeholder='{$field_object->placeholder}'
    553                     class='{$esc_attr($field_object->classes)}'
    554                     {$required} name='ng-field[ng-field-{$key}]'
    555                     value='{$esc_html($field_object->default_value)}' />
    556                     <span>{$esc_html($field_object->description)}</span>
    557                     </div>
    558 EOF;
    559         }
    560 
    561         return $field_html_label . $field_html_input;
     548        $args['key'] = $key;
     549        $args['field_object'] = $field_object;
     550        $this->ng_locate_template_part('fields/text-field.php', $args);
    562551    }
    563552
     
    572561    private function generate_textarea_field($key, $field_object)
    573562    {
    574         $esc_html = 'esc_html';
    575         $esc_attr = 'esc_attr';
    576         $esc_textarea = 'esc_textarea';
    577         if ($field_object->required) {
    578             $required = 'required';
    579         } else {
    580             $required = '';
    581         }
    582         if (!$field_object->hide_label && $field_object->required) {
    583             $field_html_label = <<<EOD
    584                     <div>
    585                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    586                     </div>
    587 EOD;
    588         } else if (!$field_object->hide_label && !$field_object->required) {
    589             $field_html_label = <<<EOD
    590                     <div>
    591                     <label>{$esc_html($field_object->label)}</label>
    592                     </div>
    593 EOD;
    594         } else {
    595             $field_html_label = '';
    596         }
    597 
    598         if ($field_object->hide_label && $field_object->required) {
    599             $field_html_input = <<<EOF
    600                     <div class={$esc_attr($field_object->built_classes)}>
    601                     <span class='required-field-class'>*</span>
    602                     <textarea
    603                     placeholder='{$field_object->placeholder}'
    604                     class='{$field_object->built_classes} {$field_object->classes}'
    605                     {$required} name='ng-field[ng-field-{$key}]'>{$esc_textarea($field_object->default_value)}</textarea>
    606                     <span>{$esc_html($field_object->description)}</span>
    607                     </div>
    608 EOF;
    609         } else {
    610             $field_html_input = <<<EOF
    611                     <div class={$esc_attr($field_object->built_classes)}>
    612                     <textarea
    613                     placeholder='{$field_object->placeholder}'
    614                     class='{$esc_attr($field_object->classes)}'
    615                     {$required} name='ng-field[ng-field-{$key}]'>{$esc_textarea($field_object->default_value)}</textarea>
    616                     <span>{$esc_html($field_object->description)}</span>
    617                     </div>
    618 EOF;
    619         }
    620 
    621         return $field_html_label . $field_html_input;
    622 
     563        $args['key'] = $key;
     564        $args['field_object'] = $field_object;
     565        $this->ng_locate_template_part('fields/textarea-field.php', $args);
    623566    }
    624567
     
    633576    private function generate_email_field($key, $field_object)
    634577    {
    635         $esc_html = 'esc_html';
    636         $esc_attr = 'esc_attr';
    637 
    638         if ($field_object->required) {
    639             $required = 'required';
    640         } else {
    641             $required = '';
    642         }
    643         if (!$field_object->hide_label && $field_object->required) {
    644             $field_html_label = <<<EOD
    645                     <div>
    646                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    647                     </div>
    648 EOD;
    649         } else if (!$field_object->hide_label && !$field_object->required) {
    650             $field_html_label = <<<EOD
    651                     <div>
    652                     <label>{$esc_html($field_object->label)}</label>
    653                     </div>
    654 EOD;
    655         } else {
    656             $field_html_label = '';
    657         }
    658 
    659         if ($field_object->hide_label && $field_object->required) {
    660             $field_html_input = <<<EOF
    661                     <div class={$esc_attr($field_object->built_classes)}>
    662                     <span class='required-field-class'>*</span>
    663                     <input type='email'
    664                     placeholder='{$field_object->placeholder}'
    665                     class='{$esc_attr($field_object->built_classes)} {$esc_attr($field_object->classes)}'
    666                     {$required} name='ng-field[ng-field-{$key}]'
    667                     value='{$esc_html($field_object->default_value)}' />
    668                     <span>{$esc_html($field_object->description)}</span>
    669                     </div>
    670 EOF;
    671         } else {
    672             $field_html_input = <<<EOF
    673                     <div class={$esc_attr($field_object->built_classes)}>
    674                     <input type='email'
    675                     placeholder='{$field_object->placeholder}'
    676                     class='{$esc_attr($field_object->classes)}'
    677                     {$required} name='ng-field[ng-field-{$key}]'
    678                     value='{$esc_html($field_object->default_value)}' />
    679                     <span>{$esc_html($field_object->description)}</span>
    680                     </div>
    681 EOF;
    682         }
    683 
    684         return $field_html_label . $field_html_input;
     578        $args['key'] = $key;
     579        $args['field_object'] = $field_object;
     580        $this->ng_locate_template_part('fields/email-field.php', $args);
    685581    }
    686582
     
    695591    private function generate_number_field($key, $field_object)
    696592    {
    697         $esc_html = 'esc_html';
    698         $esc_attr = 'esc_attr';
    699         if ($field_object->required) {
    700             $required = 'required';
    701         } else {
    702             $required = '';
    703         }
    704         if (!$field_object->hide_label && $field_object->required) {
    705             $field_html_label = <<<EOD
    706                     <div>
    707                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    708                     </div>
    709 EOD;
    710         } else if (!$field_object->hide_label && !$field_object->required) {
    711             $field_html_label = <<<EOD
    712                     <div>
    713                     <label>{$esc_html($field_object->label)}</label>
    714                     </div>
    715 EOD;
    716         } else {
    717             $field_html_label = '';
    718         }
    719 
    720         if ($field_object->hide_label && $field_object->required) {
    721             $field_html_input = <<<EOF
    722                     <div class={$esc_attr($field_object->built_classes)}>
    723                     <span class='required-field-class'>*</span>
    724                     <input type='number'
    725                     placeholder='{$field_object->placeholder}'
    726                     class='{$esc_attr($field_object->built_classes)} {$esc_attr($field_object->classes)}'
    727                     {$required} name='ng-field[ng-field-{$key}]'
    728                     value='{$esc_html($field_object->default_value)}' />
    729                     <span>{$esc_html($field_object->description)}</span>
    730                     </div>
    731 EOF;
    732         } else {
    733             $field_html_input = <<<EOF
    734                     <div class={$esc_attr($field_object->built_classes)}>
    735                     <input type='number'
    736                     placeholder='{$field_object->placeholder}'
    737                     class='{$esc_attr($field_object->classes)}'
    738                     {$required} name='ng-field[ng-field-{$key}]'
    739                     value='{$esc_html($field_object->default_value)}' />
    740                     <span>{$esc_html($field_object->description)}</span>
    741                     </div>
    742 EOF;
    743         }
    744 
    745         return $field_html_label . $field_html_input;
     593        $args['key'] = $key;
     594        $args['field_object'] = $field_object;
     595        $this->ng_locate_template_part('fields/number-field.php', $args);
    746596    }
    747597
     
    756606    private function generate_checkbox_field($array_key, $field_object)
    757607    {
    758         $esc_html = 'esc_html';
    759         $esc_attr = 'esc_attr';
    760         if ($field_object->required) {
    761             $required = 'required';
    762         } else {
    763             $required = '';
    764         }
    765         if (!$field_object->hide_label && $field_object->required) {
    766             $field_html_label = <<<EOD
    767                     <div>
    768                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    769                     </div>
    770 EOD;
    771         } else if (!$field_object->hide_label && !$field_object->required) {
    772             $field_html_label = <<<EOD
    773                     <div>
    774                     <label>{$esc_html($field_object->label)}</label>
    775                     </div>
    776 EOD;
    777         } else {
    778             $field_html_label = '';
    779         }
    780 
    781         $field_html_input = '';
    782 
    783         $field_html_input .= <<<EOH
    784                          <div class={$field_object->built_classes}>
    785 EOH;
    786 
    787         foreach ($field_object->choices as $key => $choice) {
    788             if ($choice->checked) {
    789                 $checked = 'checked';
    790             } else {
    791                 $checked = '';
    792             }
    793             if ($field_object->hide_label && $field_object->required) {
    794                 $field_html_input .= <<<EOF
    795                     <div>
    796                     <span class='required-field-class'>*</span>
    797                     <label>
    798                     <input type='checkbox'
    799                     class='{$esc_attr($field_object->classes)}'
    800                     {$checked}
    801                     value='{$esc_html($choice->text)}'
    802                     {$required} name='ng-field[ng-field-{$array_key}]' />{$esc_html($choice->text)}</label>
    803                     </div>
    804 EOF;
    805             } else {
    806                 $field_html_input .= <<<EOF
    807                     <div>
    808                     <label>
    809                     <input type='checkbox'
    810                     class='{$esc_attr($field_object->classes)}'
    811                     {$checked}
    812                     value='{$esc_html($choice->text)}'
    813                     {$required} name='ng-field[ng-field-{$array_key}]' />{$esc_html($choice->text)}</label>
    814                     </div>
    815 EOF;
    816             }
    817         }
    818 
    819         $field_html_input .= <<<EOI
    820         <span>{$field_object->description}</span>
    821                          </div>
    822 EOI;
    823 
    824         if ($required == 'required') {
    825             $checkbox_required = "
    826         var checkbox_elements = document.getElementsByName('ng-field[ng-field-" . $array_key . "]');
    827 
    828         for (let el of checkbox_elements) {
    829           if (el.checked === true) {
    830             remove_required_attribute(checkbox_elements);
    831             break;
    832           }
    833 
    834           el.addEventListener( 'change', function() {
    835             if(this.checked) {
    836                 remove_required_attribute(checkbox_elements);
    837             } else {
    838                 check_required_attribute_checked(checkbox_elements);
    839             }
    840           });
    841         }
    842 
    843         function check_required_attribute_checked(checkbox_elements){
    844           for (let el of checkbox_elements) {
    845             if (el.checked === true) {
    846                 remove_required_attribute(checkbox_elements);
    847                 break;
    848             } else{
    849                 add_required_attribute(checkbox_elements);
    850             }
    851           }
    852         }
    853 
    854         function remove_required_attribute(checkbox_elements){
    855             for (let el of checkbox_elements) {
    856               el.required = false;
    857             }
    858         }
    859 
    860         function add_required_attribute(checkbox_elements){
    861             for (let el of checkbox_elements) {
    862               el.required = true;
    863             }
    864         }
    865         ";
    866             wp_add_inline_script('angcf-inline-script', $checkbox_required);
    867         }
    868 
    869         return $field_html_label . $field_html_input;
     608        $args['array_key'] = $array_key;
     609        $args['field_object'] = $field_object;
     610        $this->ng_locate_template_part('fields/checkbox-field.php', $args);
    870611    }
    871612
     
    880621    private function generate_radio_field($array_key, $field_object)
    881622    {
    882         $esc_html = 'esc_html';
    883         $esc_attr = 'esc_attr';
    884         if ($field_object->required) {
    885             $required = 'required';
    886         } else {
    887             $required = '';
    888         }
    889 
    890         if (!$field_object->hide_label && $field_object->required) {
    891             $field_html_label = <<<EOD
    892                     <div>
    893                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    894                     </div>
    895 EOD;
    896         } else if (!$field_object->hide_label && !$field_object->required) {
    897             $field_html_label = <<<EOD
    898                     <div>
    899                     <label>{$esc_html($field_object->label)}</label>
    900                     </div>
    901 EOD;
    902         } else {
    903             $field_html_label = '';
    904         }
    905 
    906         $field_html_input = '';
    907 
    908         $field_html_input .= <<<EOH
    909                          <div class={$esc_attr($field_object->built_classes)}>
    910 EOH;
    911 
    912         foreach ($field_object->choices as $key => $choice) {
    913             if ($field_object->choice_selected == $key) {
    914                 $checked = 'checked';
    915             } else {
    916                 $checked = '';
    917             }
    918             if ($field_object->hide_label && $field_object->required) {
    919                 $field_html_input .= <<<EOF
    920                     <div>
    921                     <span class='required-field-class'>*</span>
    922                     <label>
    923                     <input type='radio'
    924                     class='{$esc_attr($field_object->classes)}'
    925                     {$checked}
    926                     value='{$esc_html($choice->text)}'
    927                     {$required} name='ng-field[ng-field-{$array_key}]' />{$esc_html($choice->text)}</label>
    928                     </div>
    929 EOF;
    930             } else {
    931                 $field_html_input .= <<<EOF
    932                     <div>
    933                     <label>
    934                     <input type='radio'
    935                     class='{$esc_attr($field_object->classes)}'
    936                     {$checked}
    937                     value='{$esc_html($choice->text)}'
    938                     {$required} name='ng-field[ng-field-{$array_key}]' />{$esc_html($choice->text)}</label>
    939                     </div>
    940 EOF;
    941             }
    942         }
    943 
    944         $field_html_input .= <<<EOI
    945         <span>{$esc_html($field_object->description)}</span>
    946                          </div>
    947 EOI;
    948 
    949         return $field_html_label . $field_html_input;
     623        $args['array_key'] = $array_key;
     624        $args['field_object'] = $field_object;
     625        $this->ng_locate_template_part('fields/radio-field.php', $args);
    950626    }
    951627
     
    960636    private function generate_select_field($array_key, $field_object)
    961637    {
    962         $esc_html = 'esc_html';
    963         $esc_attr = 'esc_attr';
    964         if ($field_object->required) {
    965             $required = 'required';
    966         } else {
    967             $required = '';
    968         }
    969         if (!$field_object->hide_label && $field_object->required) {
    970             $field_html_label = <<<EOD
    971                     <div>
    972                     <label>{$esc_html($field_object->label)} <span class='required-field-class'>*</span></label>
    973                     </div>
    974 EOD;
    975         } else if (!$field_object->hide_label && !$field_object->required) {
    976             $field_html_label = <<<EOD
    977                     <div>
    978                     <label>{$esc_html($field_object->label)}</label>
    979                     </div>
    980 EOD;
    981         } else {
    982             $field_html_label = '';
    983         }
    984 
    985         $field_html_options = '';
    986 
    987         foreach ($field_object->choices as $key => $choice) {
    988             if ($field_object->choice_selected == $key) {
    989                 $selected = 'selected';
    990             } else {
    991                 $selected = '';
    992             }
    993 
    994             $field_html_options .= <<<EOL
    995                     <option value='{$choice->text}' {$selected}>{$esc_html($choice->text)}</option>
    996 EOL;
    997         }
    998 
    999         if ($field_object->hide_label && $field_object->required) {
    1000             $field_html_input = <<<EOF
    1001                     <div>
    1002                     <span><span class='required-field-class'>*</span></span>
    1003                     <select
    1004                     class='{$field_object->classes}'
    1005                     {$required} name='ng-field[ng-field-{$array_key}]'>{$field_html_options}</select>
    1006                     <div><span>{$esc_html($field_object->description)}</span></div>
    1007                     </div>
    1008 EOF;
    1009         } else {
    1010             $field_html_input = <<<EOF
    1011                     <div class={$esc_html($field_object->built_classes)}>
    1012                     <select
    1013                     class='{$esc_attr($field_object->classes)}'
    1014                     {$required} name='ng-field[ng-field-{$array_key}]'>{$field_html_options}</select>
    1015                     <div><span>{$esc_html($field_object->description)}</span></div>
    1016                     </div>
    1017 EOF;
    1018         }
    1019 
    1020         return $field_html_label . $field_html_input;
     638        $args['array_key'] = $array_key;
     639        $args['field_object'] = $field_object;
     640        $this->ng_locate_template_part('fields/select-field.php', $args);
    1021641    }
    1022642
     
    1031651    private function generate_submit_field($field_object)
    1032652    {
    1033         $esc_html = 'esc_html';
    1034         $esc_attr = 'esc_attr';
    1035         $field_html_submit = <<<EOF
    1036                     <div class='{$field_object->built_classes} ng-submit-button-position'>
    1037                     <input type='submit'
    1038                     class='{$esc_attr($field_object->classes)} ng-contact-form-submit-button'
    1039                     value='{$esc_html($field_object->label)}' />
    1040                     <div class="ng-confirmation-message"></div>
    1041                     </div>
    1042 EOF;
    1043         if ($field_object->position_checked > 0) {
    1044             $button_position = '.ng-submit-button-position {width: 100%; padding: 10px 0;}
    1045             .ng-contact-form-submit-button{float: right;}
    1046             ';
    1047 
    1048             wp_add_inline_style('angcf-inline-style', $button_position);
    1049         }
    1050 
    1051         $button_space = '.ng-contact-form-submit-button{margin-bottom: 10px;}
    1052             ';
    1053 
    1054         wp_add_inline_style('angcf-inline-style', $button_space);
    1055 
    1056         return $field_html_submit;
     653        $args['field_object'] = $field_object;
     654        $this->ng_locate_template_part('fields/submit-field.php', $args);
    1057655    }
    1058656
Note: See TracChangeset for help on using the changeset viewer.