mrcoffeeman Posted February 22, 2012 Share Posted February 22, 2012 Hi everyone, I'm working on a WordPress page and currently customizing a plugin that someone else wrote. So far I have managed to add Captcha code to the plugin/webform but the webform will still be submitted if the user submits a picture that is too large or has too many attachments, but the picture will be removed if it's too large or, if more than 1 picture was attached, extra pictures removed (only allow 1 attachment) - so there will just be a blank post. I want it to give me the error page when a picture is too big and do not submit it, because it's just confusing. Can someone please take a look and help me out? <?php /* Plugin Name: User Submitted Posts Author: Jeff Starr @ Perishable Press Author URI: http://perishablepress.com/ Plugin URI: http://perishablepress.com/user-submitted-posts/ Description: The User Submitted Posts plugin enables your visitors to submit posts from anywhere on your site. Version: 1.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ if (!class_exists('Public_Submission_Form')) { class Public_Submission_Form { var $version = '1.0'; var $_post_meta_IsSubmission = 'is_submission'; var $_post_meta_Submitter = 'user_submit_name'; var $_post_meta_SubmitterUrl = 'user_submit_url'; var $_post_meta_SubmitterIp = 'user_submit_ip'; var $_post_meta_Image = 'user_submit_image'; var $_post_meta_ImageInfo = 'user_submit_image_info'; var $settings = null; function Public_Submission_Form() { register_activation_hook(__FILE__, array(&$this, 'saveDefaultSettings')); add_action('admin_init', array(&$this, 'checkForSettingsSave')); add_action('admin_menu', array(&$this, 'addAdministrativeElements')); add_action('init', array(&$this, 'enqueueResources')); add_action('parse_request', array(&$this, 'checkForPublicSubmission')); add_action('parse_query', array(&$this, 'addSubmittedStatusClause')); add_action('restrict_manage_posts', array(&$this, 'outputUserSubmissionLink')); add_filter('the_author', array(&$this, 'replaceAuthor')); add_filter('the_author_link', array(&$this, 'replaceAuthorLink')); add_filter('post_stati', array(&$this, 'addNewPostStatus')); add_shortcode('user-submitted-posts', array(&$this, 'getPublicSubmissionForm')); } function addAdministrativeElements() { add_options_page(__('User Submitted Posts'), __('User Submitted Posts'), 'manage_options', 'user-submitted-posts', array(&$this, 'displaySettingsPage')); } function addNewPostStatus($postStati) { $postStati['submitted'] = array(__('Submitted'), __('User submitted posts'), _n_noop('Submitted', 'Submitted')); return $postStati; } function addSubmittedStatusClause($wp_query) { global $pagenow; if (is_admin() && $pagenow == 'edit.php' && $_GET['user_submitted'] == '1') { set_query_var('meta_key', $this->_post_meta_IsSubmission); set_query_var('meta_value', 1); set_query_var('post_status', 'pending'); } } function checkForPublicSubmission() { if (isset($_POST['user-submitted-post']) && ! empty($_POST['user-submitted-post'])) { $settings = $this->getSettings(); $title = stripslashes($_POST['user-submitted-title']); $content = stripslashes($_POST['user-submitted-content']); $authorName = stripslashes($_POST['user-submitted-name']); $authorUrl = stripslashes($_POST['user-submitted-url']); $tags = stripslashes($_POST['user-submitted-tags']); $category = intval($_POST['user-submitted-category']); $fileData = $_FILES['user-submitted-image']; $publicSubmission = $this->createPublicSubmission($title, $content, $authorName, $authorUrl, $tags, $category, $fileData); if (false == ($publicSubmission)) { $errorMessage = empty($settings['error-message']) ? __('An error occurred. Please go back and try again.') : $settings['error-message']; if( !empty( $_POST[ 'redirect-override' ] ) ) { $redirect = stripslashes( $_POST[ 'redirect-override' ] ); $redirect = add_query_arg( array( 'submission-error' => '1' ), $redirect ); wp_redirect( $redirect ); exit(); } wp_die($errorMessage); } else { $redirect = empty($settings['redirect-url']) ? $_SERVER['REQUEST_URI'] : $settings['redirect-url']; if (! empty($_POST['redirect-override'])) { $redirect = stripslashes($_POST['redirect-override']); } $redirect = add_query_arg(array('success'=>1), $redirect); wp_redirect($redirect); exit(); } } } function checkForSettingsSave() { if (isset($_POST['save-post-submission-settings']) && current_user_can('manage_options') && check_admin_referer('save-post-submission-settings')) { $settings = $this->getSettings(); $settings['author'] = get_userdata($_POST['author']) ? $_POST['author'] : $settings['author']; $settings['categories'] = is_array($_POST['categories']) && ! empty($_POST['categories']) ? array_unique($_POST['categories']) : array(get_option('default_category')); $settings['number-approved'] = is_numeric($_POST['number-approved']) ? intval($_POST['number-approved']) : - 1; $settings['redirect-url'] = stripslashes($_POST['redirect-url']); $settings['error-message'] = stripslashes($_POST['error-message']); $settings['min-images'] = is_numeric($_POST['min-images']) ? intval($_POST['min-images']) : $settings['max-images']; $settings['max-images'] = (is_numeric($_POST['max-images']) && ($settings['min-images'] <= $_POST['max-images'])) ? intval($_POST['max-images']) : $settings['max-images']; $settings['min-image-height'] = is_numeric($_POST['min-image-height']) ? intval($_POST['min-image-height']) : $settings['min-image-height']; $settings['min-image-width'] = is_numeric($_POST['min-image-width']) ? intval($_POST['min-image-width']) : $settings['min-image-width']; $settings['max-image-height'] = (is_numeric($_POST['max-image-height']) && ($settings['min-image-height'] <= $_POST['max-image-height'])) ? intval($_POST['max-image-height']) : $settings['max-image-height']; $settings['max-image-width'] = (is_numeric($_POST['max-image-width']) && ($settings['min-image-width'] <= $_POST['max-image-width'])) ? intval($_POST['max-image-width']) : $settings['max-image-width']; $settings['usp_name'] = stripslashes($_POST['usp_name']); $settings['usp_url'] = stripslashes($_POST['usp_url']); $settings['usp_title'] = stripslashes($_POST['usp_title']); $settings['usp_tags'] = stripslashes($_POST['usp_tags']); $settings['usp_category'] = stripslashes($_POST['usp_category']); $settings['usp_content'] = stripslashes($_POST['usp_content']); $settings['usp_images'] = stripslashes($_POST['usp_images']); $settings['upload-message'] = stripslashes($_POST['upload-message']); $settings['usp_form_width'] = stripslashes($_POST['usp_form_width']); $this->saveSettings($settings); wp_redirect(admin_url('options-general.php?page=user-submitted-posts&updated=1')); } } function displaySettingsPage() { include ('views/settings.php'); } function enqueueResources() { wp_enqueue_script('usp_script', WP_PLUGIN_URL.'/'.basename(dirname(__FILE__)).'/resources/user-submitted-posts.js', array('jquery'), $this->version); wp_enqueue_style('usp_style', WP_PLUGIN_URL.'/'.basename(dirname(__FILE__)).'/resources/user-submitted-posts.css', false, $this->version, 'screen'); } function getPublicSubmissionForm($atts = array(), $content = null) { if ($atts === true) { $redirect = $this->currentPageURL(); } ob_start(); include (WP_PLUGIN_DIR.'/'.basename(dirname(__FILE__)).'/views/submission-form.php'); return ob_get_clean(); } function outputUserSubmissionLink() { global $pagenow; if ($pagenow == 'edit.php') { echo '<a id="usp_admin_filter_posts" class="button-secondary" href="'.admin_url('edit.php?post_status=pending&user_submitted=1').'">'.__('User Submitted Posts').'</a>'; } } function replaceAuthor($author) { global $post; $isSubmission = get_post_meta($post->ID, $this->_post_meta_IsSubmission, true); $submissionAuthor = get_post_meta($post->ID, $this->_post_meta_Submitter, true); if ($isSubmission && ! empty($submissionAuthor)) { return $submissionAuthor; } else { return $author; } } function replaceAuthorLink($authorLink) { global $post; $isSubmission = get_post_meta($post->ID, $this->_post_meta_IsSubmission, true); $submissionAuthor = get_post_meta($post->ID, $this->_post_meta_Submitter, true); $submissionLink = get_post_meta($post->ID, $this->_post_meta_SubmitterUrl, true); if ($isSubmission && ! empty($submissionAuthor)) { if ( empty($submissionLink)) { return $submissionAuthor; } else { return "<a href='{$submissionLink}'>{$submissionAuthor}</a>"; } } else { return $authorLink; } } function saveDefaultSettings() { $settings = $this->getSettings(); if ( empty($settings)) { $currentUser = wp_get_current_user(); $settings = array(); $settings['author'] = $currentUser->ID; $settings['categories'] = array(get_option('default_category')); $settings['number-approved'] = -1; $settings['redirect-url'] = ''; //site_url(); $settings['error-message'] = __('There was an error. Please ensure that you have added a title, some content, and that you have uploaded only images.'); $settings['min-images'] = 0; $settings['max-images'] = 1; $settings['min-image-height'] = 0; $settings['min-image-width'] = 0; $settings['max-image-height'] = 500; $settings['max-image-width'] = 500; $settings['usp_name'] = 'show'; $settings['usp_url'] = 'show'; $settings['usp_title'] = 'show'; $settings['usp_tags'] = 'show'; $settings['usp_category'] = 'show'; $settings['usp_content'] = 'show'; $settings['usp_images'] = 'hide'; $settings['upload-message'] = ''; // 'Please select your image(s) to upload:'; $settings['usp_form_width'] = '300'; // in pixels $this->saveSettings($settings); } } function getSettings() { if ($this->settings === null) { $defaults = array(); $this->settings = get_option('User Submitted Posts Settings', array()); } return $this->settings; } function saveSettings($settings) { if (!is_array($settings)) { return; } $this->settings = $settings; update_option('User Submitted Posts Settings', $this->settings); } function createPublicSubmission($title, $content, $authorName, $authorUrl, $tags, $category, $fileData) { $settings = $this->getSettings(); $authorName = strip_tags($authorName); $authorUrl = strip_tags($authorUrl); $authorIp = $_SERVER['REMOTE_ADDR']; if (!$this->validateTitle($title)) { return false; } if (!$this->validateContent($title)) { return false; } if (!$this->validateTags($tags)) { return false; } $postData = array(); $postData['post_title'] = $title; $postData['post_content'] = $content; $postData['post_status'] = 'pending'; $postData['author'] = $settings['author']; $numberApproved = $settings['number-approved']; if ($numberApproved < 0) {} elseif ($numberApproved == 0) { $postData['post_status'] = 'publish'; include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php'; $securimage = new Securimage(); if ($securimage->check($_POST['captcha_code']) == false) { // the code was incorrect // you should handle the error so that the form processor doesn't continue // or you can use the following code if there is no validation or you do not know how echo "The security code entered was incorrect.<br /><br />"; echo "Please go <a href='javascript:history.go(-1)'>back</a> and try again."; exit; } } else { $posts = get_posts(array('post_status'=>'publish', 'meta_key'=>$this->_post_meta_Submitter, 'meta_value'=>$authorName)); $counter = 0; foreach ($posts as $post) { $submitterUrl = get_post_meta($post->ID, $this->_post_meta_SubmitterUrl, true); $submitterIp = get_post_meta($post->ID, $this->_post_meta_SubmitterIp, true); if ($submitterUrl == $authorUrl && $submitterIp == $authorIp) { $counter++; } } if ($counter >= $numberApproved) { $postData['post_status'] = 'publish'; } } $newPost = wp_insert_post($postData); if ($newPost) { wp_set_post_tags($newPost, $tags); wp_set_post_categories($newPost, array($category)); if (!function_exists('media_handle_upload')) { require_once (ABSPATH.'/wp-admin/includes/media.php'); require_once (ABSPATH.'/wp-admin/includes/file.php'); require_once (ABSPATH.'/wp-admin/includes/image.php'); } $attachmentIds = array(); $imageCounter = 0; for ($i = 0; $i < count($fileData['name']); $i++) { if((count($fileData['tmp_name'][$i]) > 0) && ($fileData['tmp_name'][$i] != '')){ $imageInfo = getimagesize($fileData['tmp_name'][$i]); if (false === $imageInfo || !$this->imageIsRightSize($imageInfo[0], $imageInfo[1])) { continue; } $key = "public-submission-attachment-{$i}"; $_FILES[$key] = array(); $_FILES[$key]['name'] = $fileData['name'][$i]; $_FILES[$key]['tmp_name'] = $fileData['tmp_name'][$i]; $_FILES[$key]['type'] = $fileData['type'][$i]; $_FILES[$key]['error'] = $fileData['error'][$i]; $_FILES[$key]['size'] = $fileData['size'][$i]; $attachmentId = media_handle_upload($key, $newPost); if (!is_wp_error($attachmentId) && wp_attachment_is_image($attachmentId)) { $attachmentIds[] = $attachmentId; add_post_meta($newPost, $this->_post_meta_Image, wp_get_attachment_url($attachmentId)); $imageCounter++; } else { wp_delete_attachment($attachmentId); } if ($imageCounter == $settings['max-images']) { break;} } } if (count($attachmentIds) < $settings['min-images']) { foreach ($attachmentIds as $idToDelete) { wp_delete_attachment($idToDelete); } wp_delete_post($newPost); return false; } update_post_meta($newPost, $this->_post_meta_IsSubmission, true); update_post_meta($newPost, $this->_post_meta_Submitter, htmlentities(($authorName))); update_post_meta($newPost, $this->_post_meta_SubmitterUrl, htmlentities(($authorUrl))); update_post_meta($newPost, $this->_post_meta_SubmitterIp, $authorIp); } return $newPost; } function imageIsRightSize($width, $height) { $settings = $this->getSettings(); $widthFits = ($width <= intval($settings['max-image-width'])) && ($width >= $settings['min-image-width']); $heightFits = ($height <= $settings['max-image-height']) && ($height >= $settings['min-image-height']); return $widthFits && $heightFits; } function validateContent($content) { return ! empty($content); } function validateTags($tags) { return true; } function validateTitle($title) { return ! empty($title); } function currentPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } } $publicSubmissionForm = new Public_Submission_Form(); include ('library/template-tags.php'); } ?> Link to comment https://forums.phpfreaks.com/topic/257553-webform-how-do-i-make-an-error-page-appear-for-bad-submissions/ Share on other sites More sharing options...
mrcoffeeman Posted February 22, 2012 Author Share Posted February 22, 2012 Just wanted to say that I've been messing around with it a bit and, as far as I can see, it does not reach the "wp_delete_post" part of the php script. Even when I removed wp_delete_attachment & wp_delete_post from it the pictures still got removed and the post created (if there was more than 1 picture or too big). Link to comment https://forums.phpfreaks.com/topic/257553-webform-how-do-i-make-an-error-page-appear-for-bad-submissions/#findComment-1320112 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.