web/wp-content/plugins/acf-extended/includes/acfe-form-functions.php (139 lines of code) (raw):

<?php if(!defined('ABSPATH')){ exit; } /** * acfe_get_pretty_forms * * Similar to acf_get_pretty_post_types() but for ACFE Forms * Used in the Forms field type * * @param array $forms * * @return array */ function acfe_get_pretty_forms($allowed = array()){ $forms = acfe_get_module('form')->get_items(); $choices = array(); foreach($forms as $item){ // fallback to name if empty title $item['title'] = !empty($item['title']) ? $item['title'] : $item['name']; if(empty($allowed) || in_array($item['name'], $allowed, true)){ $choices[ $item['name'] ] = $item['title']; } } return $choices; } /** * acfe_get_form_sent * * @return array|false */ function acfe_get_form_sent(){ // check post data if(!empty($_POST['_acf_form'])){ // decode post data $form = json_decode(acf_decrypt($_POST['_acf_form']), true); // validate if(!empty($form) && is_array($form)){ return $form; } } return false; } /** * acfe_is_form_success * * Check if the current page is a success form page * * @param false $args * * @return bool */ function acfe_is_form_success($args = false){ // get success form $form = acfe_get_form_sent(); // no form found if(empty($form)){ return false; } // argument if($args){ // name if(is_string($args)){ // compare return acf_maybe_get($form, 'name') === $args; // array }elseif(is_array($args)){ // cleanup keys that are subject to change (via hook or template tag) unset($form['settings'], $form['attributes'], $form['validation'], $form['success'], $form['render'], $form['uniqid'], $form['cid'], $form['map']); unset($args['settings'], $args['attributes'], $args['validation'], $args['success'], $args['render'], $args['uniqid'], $args['cid'], $args['map']); // compare return $form === $args; } } // return return true; } /** * acfe_get_form_actions * * Retrieve all actions output * * @return array */ function acfe_get_form_actions(){ // get actions $actions = acf_get_form_data('acfe/form/actions'); $actions = acf_get_array($actions); // return return $actions; } /** * acfe_get_form_action * * Retrieve the latest action output * * @param $path * @param null $default * * @return false|mixed|string|null */ function acfe_get_form_action($path = null, $default = null){ // get actions $actions = acfe_get_form_actions(); // no action if(empty($actions)){ return $default; } // get last action $action = end($actions); // get by action by path if(!empty($path)){ $action = acfe_array_get($actions, $path, $default); } return $action; } /** * acfe_enqueue_form * * Enqueue ACF scripts and append missing data when form is loaded with ajax * * @return void */ function acfe_enqueue_form(){ // enqueue acf scripts acf_enqueue_scripts(array( 'uploader' => true, // uploader for WYSIWYG field )); // append missing data acf_set_form_data('screen', 'acfe_form'); acf_set_form_data('post_id', acfe_get_post_id()); acf_set_form_data('validation', true); } /** * acfe_import_form * * @param $args * * @return array|mixed|WP_Error */ function acfe_import_form($args){ // json string if(is_string($args)){ $args = json_decode($args, true); } // validate array if(!is_array($args) || empty($args)){ return new WP_Error('acfe_import_form_invalid_input', __("Input is invalid: Must be a json string or an array.")); } // module $module = acfe_get_module('form'); /** * single item * * array( * 'title' => 'My Form', * 'acfe_form_name' => 'my-form', * 'acfe_form_actions' => array(...) * ) */ if(isset($args['title'])){ $args = array( $args ); } // vars $result = array(); // loop foreach($args as $key => $item){ // prior 0.9 // old import had name as key if(!is_numeric($key) && !isset($item['name'])){ $item['name'] = $key; } // name still missing // retrieve from old key acfe_form_name if(!isset($item['name'])){ $item['name'] = acf_maybe_get($item, 'acfe_form_name'); } // search database for existing item $post = $module->get_item_post($item['name']); if($post){ $item['ID'] = $post->ID; } // import item $item = $module->import_item($item); $return = array( 'success' => true, 'post_id' => $item['ID'], 'message' => 'Form "' . get_the_title($item['ID']) . '" successfully imported.', ); $result[] = $return; } if(count($result) === 1){ $result = $result[0]; } return $result; } /** * acfe_form_unique_action_id * * Make actions names unique * * @param $form * @param $type * * @return string * * @deprecated */ function acfe_form_unique_action_id($form, $type){ _deprecated_function('ACF Extended: acfe_form_unique_action_id()', '0.9'); // global global $acfe_form_uniqid; $acfe_form_uniqid = acf_get_array($acfe_form_uniqid); $name = "{$form['name']}-{$type}"; if(!isset($acfe_form_uniqid[ $type ])){ $acfe_form_uniqid[ $type ] = 1; } if($acfe_form_uniqid[ $type ] > 1){ $name = "{$name}-{$acfe_form_uniqid[ $type ]}"; } $acfe_form_uniqid[ $type ]++; return $name; } /** * acfe_form_get_actions * * Retrieve all actions output * * @return array|string[] * * @deprecated */ function acfe_form_get_actions(){ return acfe_get_form_actions(); } /** * acfe_form_get_action * * Retrieve the latest action output * * @param false $name * @param false $key * * @return false|mixed|null * * @deprecated */ function acfe_form_get_action($name = false, $key = false){ // append key to path $name = !$key ? $name : "{$name}.{$key}"; return acfe_get_form_action($name); } /** * acfe_form_decrypt_args * * Wrapper to decrypt ACF & ACFE Forms arguments * * @return array|false * * @deprecated */ function acfe_form_decrypt_args(){ _deprecated_function('ACF Extended: acfe_form_decrypt_args()', '0.9.0.5', "acfe_get_form_sent()"); return acfe_get_form_sent(); } /** * acfe_form_is_submitted * * check if the current page is a success form page * * @param false $name * * @return bool * * @deprecated */ function acfe_form_is_submitted($name = false){ _deprecated_function('ACF Extended: acfe_form_is_submitted()', '0.8.7.5', "acfe_is_form_success()"); return acfe_is_form_success($name); } /** * acfe_form_is_admin * * Check if current screen is back-end * * @return bool * * @deprecated */ function acfe_form_is_admin(){ _deprecated_function('ACF Extended: acfe_form_is_admin()', '0.8.8', "acfe_is_admin()"); return acfe_is_admin(); } /** * acfe_form_is_front * * Check if current screen is front-end * * @return bool * * @deprecated */ function acfe_form_is_front(){ _deprecated_function('ACF Extended: acfe_form_is_front()', '0.8.8', "acfe_is_front()"); return acfe_is_front(); }