Create entries with attached media via email

Est. Reading: 3 minutes
By: rvencu
Created: 01/24/2017
Category:
Difficulty: Intermediate

Create entries with attached media via email

×Warning: This tutorial was created 2646 days ago. Some of the information may be out of date with more recent versions of Formidable. Please proceed with caution and always perform a backup before adding custom code.

The core of this solution is to use the Postie plugin that is free and customizable. After the plugin setup and configuration I changed its behaviour of creating posts and I create Formidable entries instead.

The sample code below contains some logic that may not apply to somebody else but the flow of processing can be easily modified. I put everything into my functions.php file.

global $ivory_to;
//just after the email is retrieved, check for issues and clean data
add_filter('postie_post_pre', 'IVORY_postie_post_pre'); 
function IVORY_postie_post_pre($email) {
	global $ivory_to;
    //preprocess email content to leave only attachemts
	$email['html'] = ""; //clean email body, avoid $5 postie add-on
	$email['text'] = ""; //clean email body, avoid $5 postie add-on	
	//extract from email address
	$ivory_to = $email['headers']['from']['mailbox']."@".$email['headers']['from']['host'];
	if (!filter_var($ivory_to, FILTER_VALIDATE_EMAIL)) {
		preg_match("/[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}/i", $ivory_to, $matches);	
		$ivory_to = $matches[0];
	}
	//test logic if received email is well configured, send feedback in case of error
	if (!is_numeric($email['headers']['subject'])) {
		wp_mail( $ivory_to, "Subectul mesajului nu este numeric: " . $email['headers']['subject'], "Retransmiteti mesajul cu subiect corect.", array('Content-Type: text/html; charset=UTF-8','From: Fise IVORY ') );
		$ivory_to = null;
		return null;
	}
	else if ( strpos(FrmProDisplaysController::get_shortcode(array('id' => 111, 'filter' => 1, 'fisa' => $email['headers']['subject']) ), 'No Entries Found') !== false  ) {
		wp_mail( $ivory_to, "Nu exista nici o fisa cu codul: " . $email['headers']['subject'], "Retransmiteti mesajul cu subiect corect.", array('Content-Type: text/html; charset=UTF-8','From: Fise IVORY ') );
		$ivory_to = null;
		return null;
	}
	else
		return $email;
}
//I only want image attachments as defined into the file upload field
add_action('postie_file_added', 'IVORY_fileadded', 10, 3);
function IVORY_fileadded($postid, $attachmentid, $fileinfo) {
    $file = $fileinfo['file'];
    $url = $fileinfo['url'];
    $mimetype = $fileinfo['type'];
    if (strpos($mimetype, 'image', 0) === 0) { //only if attachment is an image
        //continue
    }
	else {
		wp_delete_attachment( $attachmentid, true );
	}
}
//final processing
add_filter('postie_post_before', 'IVORY_postie_post_function');
function IVORY_postie_post_function($post) {
	global $ivory_to;
	//if there is valid email message then process it
	if ($ivory_to != null) {
		//make array of images from attachments ids placed on separate rows in HTML post_content
		$imgs = explode("n",$post['post_content']);
		array_pop($imgs); //remove last empty item
		$ivory_body = "Mesajul a fost procesat cu succes!nhttps://dentserver2/fisa/" . $post['post_title'];
		//pop any attachment that was deleted
		foreach ($imgs as $v) {
			if ( wp_get_attachment_url( $v ) ) {
				//sometimes 
might be left over, get rid of non numeric characters $ids .= preg_replace('/[^0-9.]+/', '', $v) . ","; } else { $ivory_body = "Unele atasamente au fost eliminate pentru ca nu erau de tip imagine.nhttps://dentserver2/fisa/" . $post['post_title']; } } //cut final comma from string $ids = rtrim($ids, ','); //make it back as an array of permitted media ids to be attached to the entry $ids = explode(",",$ids); //create new medical note FrmEntry::create(array( 'form_id' => 7, //medical note form id to be appended to the patient record 'item_key' => 'entry', //change entry to a dynamic value if you would like 'frm_user_id' => '1', //change $user_ID to the id of the user of your choice (optional) 'item_meta' => array( 96 => 'Imagistica sosita prin email', //medical note text 83 => $ids, //append the valid media attachments 78 => $post['post_title'], //patient record id 77 => '1' //root user id ), )); wp_mail( $ivory_to, "Nota medicala creata pentru fisa " . $post['post_title'], $ivory_body, array('Content-Type: text/html; charset=UTF-8','From: Fise IVORY ') ); } //avoid to actually save any post, the default postie plugin action return null; }

Leave a Reply

Making the Best WordPress Plugin even better - Together

Take on bigger projects with confidence knowing you have access to an entire community of Formidable Experts and Professionals who have your back when the going gets tough. You got this!
Join the community
crosschevron-leftchevron-rightarrow-right