Changeset 1834405
- Timestamp:
- 03/06/2018 11:00:09 AM (8 years ago)
- Location:
- advanced-angular-contact-form/trunk
- Files:
-
- 12 added
- 1 edited
-
contact-form.php (modified) (16 diffs)
-
templates (added)
-
templates/fields (added)
-
templates/fields/after-form-fields.php (added)
-
templates/fields/before-form-fields.php (added)
-
templates/fields/checkbox-field.php (added)
-
templates/fields/email-field.php (added)
-
templates/fields/number-field.php (added)
-
templates/fields/radio-field.php (added)
-
templates/fields/select-field.php (added)
-
templates/fields/submit-field.php (added)
-
templates/fields/text-field.php (added)
-
templates/fields/textarea-field.php (added)
Legend:
- Unmodified
- Added
- Removed
-
advanced-angular-contact-form/trunk/contact-form.php
r1834011 r1834405 4 4 * Plugin Name: Advanced Angular Contact Form 5 5 * Description: A simple contact form builder developed with Angular and Angular material design. Check it! 6 * Version: 1. 0.06 * Version: 1.1.0 7 7 * Author: Tauhidul Alam 8 8 * Author URI: https://github.com/CoreJADeveloper/contact-form 9 *10 9 * Text Domain: ngForms 11 10 * Domain Path: /languages/ … … 229 228 unset($_POST['form_id']); 230 229 } else { 231 die();230 wp_die(); 232 231 } 233 232 … … 263 262 $email_subject = str_replace('{site_title}', strval(get_bloginfo('name')), $email_subject); 264 263 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 266 267 $user_info = get_userdata(1); 267 268 … … 321 322 322 323 /** 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 /** 323 375 * Generates short code content 324 376 * 325 * @since 1. 0.0377 * @since 1.1.0 326 378 * @param mixed $atts 327 379 * @return string … … 338 390 return false; 339 391 340 $esc_html = 'esc_html';341 342 392 wp_register_script('angcf-inline-script', ANGCF_PLUGIN_URL . 'dist/script.js', array('angcf-script'), false, true); 343 393 wp_enqueue_script('angcf-inline-script'); … … 354 404 ob_start(); 355 405 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); 370 408 371 409 if (!empty($form_fields_array)) { … … 373 411 switch ($field->type) { 374 412 case 'text': 375 echo$this->generate_text_field($key, $field);413 $this->generate_text_field($key, $field); 376 414 break; 377 415 378 416 case 'textarea': 379 echo$this->generate_textarea_field($key, $field);417 $this->generate_textarea_field($key, $field); 380 418 break; 381 419 382 420 case 'email': 383 echo$this->generate_email_field($key, $field);421 $this->generate_email_field($key, $field); 384 422 break; 385 423 386 424 case 'number': 387 echo$this->generate_number_field($key, $field);425 $this->generate_number_field($key, $field); 388 426 break; 389 427 390 428 case 'checkbox': 391 echo$this->generate_checkbox_field($key, $field);429 $this->generate_checkbox_field($key, $field); 392 430 break; 393 431 394 432 case 'radio': 395 echo$this->generate_radio_field($key, $field);433 $this->generate_radio_field($key, $field); 396 434 break; 397 435 398 436 case 'select': 399 echo$this->generate_select_field($key, $field);437 $this->generate_select_field($key, $field); 400 438 break; 401 439 402 440 case 'submit': 403 echo$this->generate_submit_field($field);441 $this->generate_submit_field($field); 404 442 break; 405 443 } … … 407 445 } 408 446 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 415 450 $custom_form_style = '.ng-contact-form-container{margin: 10px 0;}'; 416 451 … … 511 546 private function generate_text_field($key, $field_object) 512 547 { 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); 562 551 } 563 552 … … 572 561 private function generate_textarea_field($key, $field_object) 573 562 { 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); 623 566 } 624 567 … … 633 576 private function generate_email_field($key, $field_object) 634 577 { 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); 685 581 } 686 582 … … 695 591 private function generate_number_field($key, $field_object) 696 592 { 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); 746 596 } 747 597 … … 756 606 private function generate_checkbox_field($array_key, $field_object) 757 607 { 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); 870 611 } 871 612 … … 880 621 private function generate_radio_field($array_key, $field_object) 881 622 { 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); 950 626 } 951 627 … … 960 636 private function generate_select_field($array_key, $field_object) 961 637 { 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); 1021 641 } 1022 642 … … 1031 651 private function generate_submit_field($field_object) 1032 652 { 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); 1057 655 } 1058 656
Note: See TracChangeset
for help on using the changeset viewer.