Builder
5 years ago
MyAccount
5 years ago
EditProfileTag.php
5 years ago
FormProcessor.php
5 years ago
FrontendProfileTag.php
5 years ago
LoginFormTag.php
5 years ago
MelangeTag.php
5 years ago
MemberDirectoryTag.php
5 years ago
PasswordResetTag.php
5 years ago
RegistrationFormTag.php
5 years ago
index.php
5 years ago
MelangeTag.php
128 lines
| 1 | <?php |
| 2 | |
| 3 | namespace ProfilePress\Core\ShortcodeParser; |
| 4 | |
| 5 | use ProfilePress\Core\Classes\EditUserProfile; |
| 6 | use ProfilePress\Core\Classes\FormRepository as FR; |
| 7 | |
| 8 | class MelangeTag extends FormProcessor |
| 9 | { |
| 10 | public function __construct() |
| 11 | { |
| 12 | /** |
| 13 | * We're not including check_password_reset_key(), and process_password_reset_handler_form() |
| 14 | * cos it is already active and called by PasswordResetTag. |
| 15 | * |
| 16 | * Using priority 999999999 'cos we want it to run after that of their respective form types. |
| 17 | */ |
| 18 | add_action('wp', [$this, 'process_password_reset_form'], 999999999); |
| 19 | add_action('wp', [$this, 'process_registration_form'], 999999999); |
| 20 | add_action('wp', [$this, 'process_login_form'], 999999999); |
| 21 | add_action('wp', [$this, 'process_edit_profile_form'], 999999999); |
| 22 | |
| 23 | add_shortcode('profilepress-melange', [$this, 'parser']); |
| 24 | } |
| 25 | |
| 26 | public function parser($atts) |
| 27 | { |
| 28 | $atts = shortcode_atts(['id' => '', 'redirect' => ''], $atts); |
| 29 | |
| 30 | $id = absint($atts['id']); |
| 31 | $redirect = isset($atts['redirect']) ? esc_url_raw($atts['redirect']) : ''; |
| 32 | |
| 33 | if (is_string($this->password_reset_form_error) && ! empty($this->password_reset_form_error)) { |
| 34 | $response = apply_filters('ppress_password_reset_notice', $this->password_reset_form_error, $id); |
| 35 | } |
| 36 | |
| 37 | if (is_array($this->password_reset_form_error) && isset($this->password_reset_form_error[$id])) { |
| 38 | $response = apply_filters('ppress_password_reset_notice', $this->password_reset_form_error[$id], $id); |
| 39 | } |
| 40 | |
| 41 | if (is_string($this->login_form_error) && ! empty($this->login_form_error)) { |
| 42 | $response = apply_filters('ppress_login_error', $this->login_form_error, $id); |
| 43 | } |
| 44 | |
| 45 | if (is_array($this->login_form_error) && isset($this->login_form_error[$id])) { |
| 46 | $response = apply_filters('ppress_login_error', $this->login_form_error[$id], $id); |
| 47 | } |
| 48 | |
| 49 | if (isset($this->registration_form_error[$id])) { |
| 50 | $response = apply_filters('ppress_registration_status', $this->registration_form_error[$id], $id, $redirect); |
| 51 | } |
| 52 | |
| 53 | if (isset($_GET['edit']) && ($_GET['edit'] == 'true')) { |
| 54 | $response = apply_filters('ppress_edit_profile_status', html_entity_decode(EditUserProfile::get_success_message($id, true)), $id); |
| 55 | } |
| 56 | |
| 57 | if (isset($this->edit_profile_form_error[$id])) { |
| 58 | $response = apply_filters('ppress_edit_profile_status', $this->edit_profile_form_error[$id], $id); |
| 59 | } |
| 60 | |
| 61 | // pp_login_error_output is used by modules eg email confirmation to output custom login notices. |
| 62 | if (empty($response)) $response = apply_filters('ppress_login_error_output', ''); |
| 63 | |
| 64 | $attribution_start = apply_filters('ppress_hide_attribution', '<!-- This (Melange) form was created and powered by ProfilePress WordPress plugin - https://profilepress.net -->' . "\r\n"); |
| 65 | $attribution_end = apply_filters('ppress_hide_attribution', "\r\n" . '<!-- / ProfilePress WordPress plugin. -->' . "\r\n"); |
| 66 | |
| 67 | $css = self::get_melange_css($id); |
| 68 | |
| 69 | $class = 'pp-melange-form-wrap'; |
| 70 | if (isset($_GET['key'], $_GET['login'])) { |
| 71 | $class = 'pp-password-reset-handler-wrap'; |
| 72 | } |
| 73 | $container_div_start = sprintf('<div id="pp-melange-form-%s-wrap" class="pp-form-container %s">', $id, $class); |
| 74 | $container_div_end = '</div>'; |
| 75 | |
| 76 | return $attribution_start . $css . $container_div_start . $response . $this->get_melange_structure($id, $redirect) . $container_div_end . $attribution_end; |
| 77 | } |
| 78 | |
| 79 | |
| 80 | /** |
| 81 | * Get the melange structure from the database |
| 82 | * |
| 83 | * @param int $id |
| 84 | * @param string $redirect |
| 85 | * |
| 86 | * @return string |
| 87 | */ |
| 88 | public function get_melange_structure($id, $redirect) |
| 89 | { |
| 90 | if ('GET' == $_SERVER['REQUEST_METHOD'] && isset($_REQUEST['key'], $_REQUEST['login'])) { |
| 91 | $structure = '<form method="post">' . PasswordResetTag::get_password_reset_handler_structure() . '</form>'; |
| 92 | } else { |
| 93 | $structure = FR::get_form_meta($id, FR::MELANGE_TYPE, FR::FORM_STRUCTURE); |
| 94 | } |
| 95 | |
| 96 | $GLOBALS['pp_melange_form_id'] = $id; |
| 97 | $GLOBALS['pp_melange_form_redirect'] = $redirect; |
| 98 | |
| 99 | return do_shortcode($structure); |
| 100 | } |
| 101 | |
| 102 | |
| 103 | /** |
| 104 | * Get the CSS stylesheet for the ID melange |
| 105 | * |
| 106 | * @return string |
| 107 | */ |
| 108 | public static function get_melange_css($melange_id) |
| 109 | { |
| 110 | // if no id is set return |
| 111 | if ( ! isset($melange_id)) return ''; |
| 112 | |
| 113 | $melange_css = FR::get_form_meta($melange_id, FR::MELANGE_TYPE, FR::FORM_CSS); |
| 114 | |
| 115 | return "<style type=\"text/css\">\r\n $melange_css \r\n</style>"; |
| 116 | } |
| 117 | |
| 118 | public static function get_instance() |
| 119 | { |
| 120 | static $instance = false; |
| 121 | |
| 122 | if ( ! $instance) { |
| 123 | $instance = new self; |
| 124 | } |
| 125 | |
| 126 | return $instance; |
| 127 | } |
| 128 | } |