WordPress.org

Ready to get started?Download WordPress

Forums

Dropbox Upload Form
Dropbox Upload Form with added features (7 posts)

  1. andfinally
    Member
    Posted 3 years ago #

    I've modified Henrik's very handy plugin to add some extra features. On upload the plugin now

    • Saves some metadata about the file uploaded. The data's saved in a text file which has the name of the uploaded file + ".txt".
    • Leaves a copy of the uploaded file and metadata text file in the temp directory.
    • Copies both files to Dropbox.
    • Emails a notification about the upload.

    The code below should replace the contents of Henrik's main plugin page wp-dropbox.php. Hope someone finds this useful!

    Andfinally

    <?php /*
    
    **************************************************************************
    
    Plugin Name:  Dropbox Upload Form
    Plugin URI:
    Description:  Use the shortcode [wp-dropbox] in any page to insert a Dropbox file upload form. Kudos to <a href="http://inuse.se">inUse</a> for letting me release this in-house developed plugin under GPL. Use with caution and DON'T blame me if something breaks.
    Version:      0.0.4
    Author:       Henrik Östlund
    Author URI:   http://östlund.info/
    
    **************************************************************************
    
    Copyright (C) 2010 Henrik Östlund henrik(at)myworld.se
    
    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 3 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, see <http://www.gnu.org/licenses/>.
    
    **************************************************************************/
    
    function show_dropbox()
    {
    	$db_user = get_option( 'db_username' );
    	$db_pass = get_option( 'db_password' );
    	$db_path = get_option( 'db_path' );
    	$db_tmp_path = get_option( 'db_temp_path' );
    	$db_allow_ext = trim( get_option( 'db_allow_ext' ) );
    
    	echo '<link type="text/css" rel="stylesheet" href="' . get_bloginfo('wpurl') . '/wp-content/plugins/wp-dropbox/css/wp-db-style.css" />' . "\n";
    
    echo '<div class="wp-dropbox">';
    
    	$showform = True;
    
    	try
    	{
    		if (($db_user == '') or ($db_pass == '') )
    			throw new Exception(__('Need to configure plugin!'));
    
    		if ($db_allow_ext == '')
    			throw new Exception(__('Need to configure allowed file extensions!'));
    
    	} catch(Exception $e) {
        	echo '<span id="syntax_error">'.__('Error:'). ' ' . htmlspecialchars($e->getMessage()) . '</span>';
    		$showform = False;
    	}
    
    	if ($_POST) {
    	    require 'inc/DropboxUploader.php';
    	try {
    
    	$allowedExtensions = split("[ ]+", $db_allow_ext);
    	  foreach ($_FILES as $file) {
    	    if ($file['tmp_name'] > '') {
    	      if (!in_array(end(explode(".",
    	            strtolower($file['name']))),
    	            $allowedExtensions)) {
    			$ext = implode(", ", $allowedExtensions);
    	       die('<p>'.__('Allowed file extensions: ',wpdbUploadForm).''.$ext.'<br/>'.
    	        '<a href="javascript:history.go(-1);">'.
    	        __('<= Go back',wpdbUploadForm).'</a></p>');
    	      }
    	    }
    	  } 
    
    	        // Rename uploaded file to reflect original name
    	        if ($_FILES['file']['error'] !== UPLOAD_ERR_OK)
    	            throw new Exception(__('File was not uploaded from your computer.',wpdbUploadForm));
    
    			if (!file_exists($db_tmp_path))
    			{
    	        if (!mkdir($db_tmp_path))
    	            throw new Exception(__('Cannot create temporary directory!',wpdbUploadForm));
    			}
    	        if ($_FILES['file']['name'] === "")
    	            throw new Exception(__('File name not supplied by the browser.',wpdbUploadForm));
    
    			$new_file_name = explode(".",$file['name']);
    		    $tmpFile = $db_tmp_path . str_replace("/", '_', $new_file_name[0]) . "_" . date("Y-m-d") . "." . str_replace("/", '_', $new_file_name[1]);
    
    	    	if (!move_uploaded_file($_FILES['file']['tmp_name'], $tmpFile))
    	        	throw new Exception(__('Cannot rename uploaded file!',wpdbUploadForm));
    
    			save_metadata($db_tmp_path, $tmpFile, $_POST['client'], $_POST['medium'], $_POST['country'], $_POST['email']);
    
    	       	// Upload
    	    	$uploader = new DropboxUploader($db_user, $db_pass);
    		    $uploader->upload($tmpFile, $db_path);
    			$uploader->upload($tmpFile . '.txt', $db_path);
    
    			send_mail($db_tmp_path, $tmpFile, $_POST['client'], $_POST['medium'], $_POST['country'], $_POST['email']);
    
    	        echo '<div class="instructions" style="width:450px;margin:20px 0;padding:20px;border:1px solid #333;font-size:16px;"><p>'.__('Thanks, your file has been uploaded.',wpdbUploadForm).'</p><p style="margin-bottom:0;"><a href="" style="color:#fff;">'.__('Upload another',wpdbUploadForm).'</a></p></div>';
    	    	$showform = False;
    			//$delete_file = True;
    			$delete_file = False;
    
    	    } catch(Exception $e) {
    	        echo '<span id="syntax_error">'.__('Error:',wpdbUploadForm) . ' ' . htmlspecialchars($e->getMessage()) . '</span>';
    			$delete_file = False;
    	    }
    
    	    // Clean up
    	if($delete_file == True)
    		{
    	    	if (isset($tmpFile) && file_exists($tmpFile))
    	        	unlink($tmpFile);
    		}
    
    	}
    
    	if($showform == True)
    		{
    		?>
    			<style>
    			form.dropbox
    			{
    				width:450px;
    				padding:20px 20px 0;
    				background-color:#444;
    			}
    
    			.dropbox input,
    			.dropbox select
    			{
    				display: block;
    				margin: 0 0 10px;
    			}
    
    			.dropbox label
    			{
    				margin: 0;
    				color: #fff;
    				font-weight: normal;
    			}
    
    			div.instructions
    			{
    				margin:8px;
    				color:#ccc;
    				font-size:13px;
    			}
    
    			</style>
    	        <form method="POST" class="dropbox" enctype="multipart/form-data">
    				<?php
    					global $current_user;
    					get_currentuserinfo(); ?>
    
    					<div class="instructions">
    							<p>Choose the file you want to upload using the "Browse" or "Choose File" button and browsing to the location of the file on your computer.</p>
    							<p>Enter the client name and choose the most appropriate medium and country of origin.</p>
    							<p>Click the "Upload" button to start the upload.</p>
    					</div>
    
    	            <input type="hidden" name="email" <?php if (! empty( $current_user->user_email) ) echo 'value="' . $current_user->user_email . '" '; ?>/>
    
    				<table>
    					<tr>
    						<td colspan="2">
    							<input class="input_form button" type="file" name="file"/>
    						</td>
    					</tr>
    					<tr>
    						<td colspan="2">
    							<label for="client">Client</label>
    							<input type="text" name="client" size="50" />
    						</td>
    					</tr>
    					<tr>
    						<td>
    							<label for="medium">Medium</label>
    							<select type="text" name="medium" >
    								<option></option>
    								<option value="TV">TV</option>
    								<option value="Press">Press</option>
    								<option value="Radio">Radio</option>
    							</select>
    						</td>
    						<td>
    							<label for="country">Country</label>
    							<select type="text" name="country" >
    								<option></option>
    								<option value="Austria">Austria</option>
    								<option value="Belarus">Belarus</option>
    								<option value="Belgium">Belgium</option>
    								<option value="Botswana">Botswana</option>
    								<option value="Bulgaria">Bulgaria</option>
    								<option value="Kenya">Kenya</option>
    								<option value="Kuwait">Kuwait</option>
    								<option value="Serbia">Serbia</option>
    								<option value="Slovenia">Slovenia</option>
    								<option value="South Africa">South Africa</option>
    								<option value="Spain">Spain</option>
    								<option value="Sweden">Sweden</option>
    								<option value="Turkey">Turkey</option>
    								<option value="Ukraine">Ukraine</option>
    								<option value="United Kingdom">United Kingdom</option>
    								<option value="Uzbekistan">Uzbekistan</option>
    							</select>
    						</td>
    					</tr>
    					<tr>
    						<td>
    						</td>
    						<td>
    								<p align="right">
    									<input type="submit" value="<?php _e('Upload',wpdbUploadForm); ?>" />
    								</p>
    						</td>
    					</tr>
    				</table>
    
    		</form>
    		<?php }
    	echo "</div>";
    }
    
    	function wp_dropbox_settings_page() {
    	?>
    	<div class="wrap">
    		<h2>WordPress Drobox Upload Form</h2>
    		<p>Make and use a special folder on your Dropbox if you allow public uploads. The date when the file got uploaded is appended at the end of the filename, example foo_2010-01-01.pdf just so we don't overwrite files.</p>
    <?php
    		if( $_POST[ "wp_db_submit_hidden" ] == 'Y' ) {
    		        // Save the posted value in the database
    		        update_option( 'db_username', $_POST[ 'wp_db_username' ] );
    		        update_option( 'db_password', $_POST[ 'wp_db_password' ] );
    		        update_option( 'db_path', $_POST[ 'db_path' ] );
    		        update_option( 'db_temp_path', $_POST[ 'db_temp_path' ] );
    		        update_option( 'db_allow_ext', $_POST[ 'db_allow_ext' ] );
    		        // Put an options updated message on the screen
    		?>
    		<div class="updated"><p><strong><?php _e('Options saved.', 'mt_trans_domain' ); ?></strong></p></div>
    		<?php
    
    		    }
    ?>
    	        <form name="wp_db_form" method="POST" action="">
    				<input type="hidden" name="wp_db_submit_hidden" value="Y">
    <table class="form-table">
    				<tr>
    					<th scope="row"><p>Dropbox username/login.</p></td>
    	            	<td><input id="inputid" type="text" size="30" name="wp_db_username" value="<?php echo get_option( 'db_username' ); ?>" />
    					<label for="inputid">username@foo.bar</label>
    					</td>
    				</tr>
    				<tr>
    					<th scope="row"><p>Dropbox password.</p></th>
    		            <td><input id="inputid" type="password" size="30" name="wp_db_password" value="<?php echo get_option( 'db_password' ); ?>" />
    					<label for="inputid">supersecretpassword</label>
    					</td>
    				</tr>
    				<tr>
    					<th scope="row"><p>Path in dropbox folder (please, don't save to root folder).</p></th>
    		            <td><input type="text" size="60" name="db_path" value="<?php echo get_option( 'db_path' ); ?>" />
    					<label for="inputid">/public_upload/</label>
    					</td>
    				</tr>
    				<tr>
    					<th scope="row"><p>Temporary path on server. Files get saved here if Dropbox server is down.</p></th>
    		            <td><input type="text" size="60" name="db_temp_path" value="<?php echo get_option( 'db_temp_path' ); ?>" />
    					<label for="inputid">/path/outside/your/public_html/</label>
    					</td>
    				</tr>
    				<tr>
    					<th scope="row"><p>Allowed file extensions, separated by space.</p></th>
        				<td><input type="text" size="60" name="db_allow_ext" value="<?php echo get_option( 'db_allow_ext' ); ?>" />
    						<label for="inputid">doc docx pdf</label>
    					</td>
    				</tr>
    				<tr>
    					<th scope="row"><input type="submit" value="<?php _e('Save options',wpdbUploadForm); ?>" /></th>
    					<td></td>
    				</tr>
    </table>
    		</form>
    
    		</div>
    	<?php }
    
    	// shortcode
    	function shortcode_wp_dropbox( $atts, $content = NULL ) {
    		// Hackis way to show my shortcode at the right place
    		ob_start();
    		show_dropbox();
    		$output_string=ob_get_contents();
    		ob_end_clean();
    		return $output_string;
    	}
    
    	function wp_db_create_menu() {
    		//create new top-level menu
    		add_options_page('WP-Dropbox', 'WP-Dropbox', 'administrator', __FILE__, 'wp_dropbox_settings_page');
    
    		//call register settings function
    		add_action( 'admin_init', 'register_wp_dropbox_settings' );
    	}
    
    	function wp_dropbox_deactivate()
    		{
    			remove_shortcode( 'wp-dropbox' );
    	        delete_option( 'db_username' );
    	        delete_option( 'db_password' );
    	        delete_option( 'db_path' );
    	        delete_option( 'db_temp_path' );
    			delete_option( 'db_allow_ext' );
    		}
    
    	function register_wp_dropbox_settings() {
    		//register our settings
    		register_setting( 'wp_db-settings-group', 'db_username' );
    		register_setting( 'wp_db-settings-group', 'db_password' );
    		register_setting( 'wp_db-settings-group', 'db_path' );
    		register_setting( 'wp_db-settings-group', 'db_temp_path' );
    		register_setting( 'wp_db-settings-group', 'db_allow_ext' );
    	}
    
    	function WP_DB_PluginInit()
    	  {
    	  	load_plugin_textdomain( 'wpdbUploadForm', PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)),
    		       dirname(plugin_basename(__FILE__)));
    	  }
    
    	// Start this plugin once all other plugins are fully loaded
    	// add_action( 'plugins_loaded', 'WPDropbox');
    	add_shortcode( 'wp-dropbox', 'shortcode_wp_dropbox' );
    	add_action('admin_menu', 'wp_db_create_menu');
    	add_action( 'init', 'WP_DB_PluginInit' );
    
    	register_deactivation_hook( __FILE__, 'wp_dropbox_deactivate' );
    
    	// Logs metadata submitted with file upload to text file
    	function save_metadata($db_temp_path, $filepath, $client = '', $medium = '', $country = '', $email_address = '')
    	{
    		// Trim temp path off filename
    		$filename = str_replace($db_temp_path, '', $filepath);
    
    		// Create text file
    		$fd = fopen($filepath . '.txt', "w");
    
    		$metadata = 'File: ' . $filename . "\n";
    		$metadata .= 'Client: ' . $client . "\n";
    		$metadata .= 'Medium: ' . $medium . "\n";
    		$metadata .= 'Country: ' . $country . "\n";
    		$metadata .= 'Uploaded By: ' . $email_address . "\n";
    
    		// write string
    		fwrite($fd, $metadata);
    		// close file
    		fclose($fd);
    	}
    
    	function send_mail($db_temp_path, $filepath, $client = '', $medium = '', $country = '', $email_address = '')
    	{
    		require_once "Mail.php"; 					// PEAR Mail class
    
    		// Trim temp path off filename
    		$filename = str_replace($db_temp_path, '', $filepath);
    
    		$params['host'] = 'SMTP_HOST';
    		$params['auth'] = true;
    		$params['username'] = 'SMTP_USERNAME';
    		$params['password'] = 'SMTP_PASSWORD';
    
    		$to = 'recipient@address.com';
    
    		$headers['From'] =  "From Name <from@address.com>";
    		$headers['To'] = $to;
    		$headers['Subject'] = 'New Upload';
    		$headers['MIME-Version'] = "1.0";
    		$headers['Content-type'] = "text/html; charset=utf-8";
    		$headers['X-Mailer'] = "php";
    
    		$body =  <<<HEREDOC
    <body style="color:#333;font-family:Geneva,Verdana,sans-serif;font-size:12px;line-height:1.5em;">
    <center>
    <div style="background-color:#f0f0f0;border:1px solid #ccc;margin:20px auto;padding:20px;width:600px;text-align:left;">
    <p>Greetings. Someone has uploaded a new item on the <a href="http://url.here">Blog</a>.</p>
    <table align="center" cellpadding="5" style="color:#333;font-family:Geneva,Verdana,sans-serif;font-size:12px;">
    	<tr>
    		<td><b>Uploaded by:</b></td>
    		<td>$email_address</td>
    	</tr>
    	<tr>
    		<td><b>File:</b></td>
    		<td>$filename</td>
    	</tr>
    	<tr>
    		<td><b>Client:</b></td>
    		<td>$client</td>
    	</tr>
    	<tr>
    		<td><b>Medium:</b></td>
    		<td>$medium</td>
    	</tr>
    	<tr>
    		<td><b>Country:</b></td>
    		<td>$country</td>
    	</tr>
    </table>
    </div>
    </center>
    </body>
    HEREDOC;
    
    		$smtp = Mail::factory('smtp', $params);
    
    		$mail = $smtp->send($to, $headers, $body); 
    
    	   /* Error sending mail */
    	   if (PEAR::isError($mail))
    	   {
    			// Error handling here
    			return false;
    	   }
    	   /* Mail sent */
    	   else
    	   {
    			// Error handling here
    			return true;
    	   }
    	}
    ?>

    http://wordpress.org/extend/plugins/dropbox-upload-form/

  2. Dunkkan
    Member
    Posted 3 years ago #

    Hi!

    I encountered an error, in the old version as well... hope someone can tell me how to proceed?

    Parse error: syntax error, unexpected '{' in /home/orangest/public_html/wp-content/plugins/dropbox-upload-form/wp-dropbox.php on line 46

    Many thanks,

  3. spiritsentient
    Member
    Posted 3 years ago #

    andFinally!!! This is FANTASTIC. It's exactly what I was interested in. You're a brilliant coder, and super-kind of you to share it.

    Rock on man, it'd be great if Henrik incorporated your additions somehow.

  4. ostlund
    Member
    Plugin Author

    Posted 3 years ago #

    Hi

    I will eventually look into the send mail on file upload but I probably will use WordPress mail function. And make a settings page.

  5. petezarustica
    Member
    Posted 3 years ago #

    Hi everybody

    The plugin was updated and the line 59 needs a correction:

    require 'inc/dropbox.php';

    Also, I'm getting an error, that says:

    Fatal error: Class 'DropboxUploader' not found in /home/****/xxxxxxxxxxxxx.com/wp-content/plugins/dropbox-upload-form/wp-dropbox.php on line 97

    Does anyone have a clue?

  6. freeryan
    Member
    Posted 3 years ago #

    i've got version 0.1.1 of wp-dropbox.php, does the code above replace that or am I looking at an old thread?

  7. design-is
    Member
    Posted 3 years ago #

    Hi andfinally

    Latest version is...

    Version: 0.1.5

    Can you let us know if the great amendments you've made still work?

    Cheers

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic