Magento: Add upload field to contact form

wget -q http://dl.panticz.de/magento/contact_attachment/form.phtml.diff -O - | patch -p2 \
/var/www/app/design/frontend/default/default/template/contacts/form.phtml

--- /var/www/app/design/frontend/default/default/template/contacts/form.phtml.org	2013-11-11 17:35:28.000000000 +0100
+++ /var/www/app/design/frontend/default/default/template/contacts/form.phtml	2013-11-12 16:20:06.000000000 +0100
@@ -28,7 +28,7 @@
 <div class="page-title">
     <h1><?php echo Mage::helper('contacts')->__('Contact Us Form') ?></h1>
 </div>
-<form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post">
+<form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post" enctype="multipart/form-data"> 
     <div class="fieldset">
         <h2 class="legend"><?php echo Mage::helper('contacts')->__('Contact Information') ?></h2>
         <ul class="form-list">
@@ -68,6 +68,13 @@
                     <textarea name="comment" id="comment" title="<?php echo Mage::helper('contacts')->__('Comment') ?>" class="required-entry input-text" cols="5" rows="3"><?php echo $this->getRequest()->getParam('message');?></textarea>
                 </div>
             </li>
+            <li>
+                <label for="attachment"><?php echo Mage::helper('contacts')->__('Attachment') ?></label>
+                <div class="input-box">
+                    <input name="MAX_FILE_SIZE" type="hidden" value="2000000" />
+                    <input name="attachment" id="attachment" class="input-text" type="file" />
+                </div>
+            </li>
         </ul>
     </div>
     <div class="buttons-set">

wget -q http://dl.panticz.de/magento/contact_attachment/IndexController.php.diff -O - | patch -p2 \
/var/www/app/code/core/Mage/Contacts/controllers/IndexController.php

--- /var/www/app/code/core/Mage/Contacts/controllers/IndexController.php.org	2013-11-11 17:44:06.000000000 +0100
+++ /var/www/app/code/core/Mage/Contacts/controllers/IndexController.php	2013-11-13 11:34:56.000000000 +0100
@@ -91,7 +91,40 @@
                 if ($error) {
                     throw new Exception();
                 }
+
+                $fileName = '';
+                if (isset($_FILES['attachment']['name']) && $_FILES['attachment']['name'] != '') {
+                    try {
+                        $fileName       = $_FILES['attachment']['name'];
+                        $fileExt        = strtolower(substr(strrchr($fileName, "."), 1));
+                        $fileNamewoe    = rtrim($fileName, $fileExt);
+                        $fileName       = preg_replace('/\s+', '', $fileNamewoe) . time() . '.' . $fileExt;
+ 
+                        $uploader       = new Varien_File_Uploader('attachment');
+                        $uploader->setAllowedExtensions(array('jpg', 'png', 'bmp', 'gif', 'pdf', 'zip', 'rar'));
+                        $uploader->setAllowRenameFiles(false);
+                        $uploader->setFilesDispersion(false);
+                        $path = Mage::getBaseDir('media') . DS . 'contacts';
+                        if(!is_dir($path)){
+                            mkdir($path, 0777, true);
+                        }
+                        $uploader->save($path . DS, $fileName);
+ 
+                    } catch (Exception $e) {
+                        $error = true;
+                    }
+                }
+
                 $mailTemplate = Mage::getModel('core/email_template');
+                if($fileName != '') {
+                    $attachmentFilePath = Mage::getBaseDir('media'). DS . 'contacts' . DS . $fileName;
+                    if(file_exists($attachmentFilePath)){
+                        $fileContents = file_get_contents($attachmentFilePath);
+                        $attachment   = $mailTemplate->getMail()->createAttachment($fileContents);
+                        $attachment->filename = $fileName;
+                    }
+                }
+
                 /* @var $mailTemplate Mage_Core_Model_Email_Template */
                 $mailTemplate->setDesignConfig(array('area' => 'frontend'))
                     ->setReplyTo($post['email'])

wget -q http://dl.panticz.de/magento/contact_attachment/Mage_Contacts.csv.diff -O - | patch -p2 \
/var/www/app/locale/de_DE/Mage_Contacts.csv

--- /var/www/app/locale/de_DE/Mage_Contacts.csv.org	2013-11-13 15:57:34.000000000 +0100
+++ /var/www/app/locale/de_DE/Mage_Contacts.csv	2013-11-13 11:40:11.000000000 +0100
@@ -15,5 +15,6 @@
 "Send Emails To","Sende E-Mails an"
 "Submit","Absenden"
 "Telephone","Telefon"
+"Attachment","Anhang"
 "Unable to submit your request. Please, try again later","Fehler beim Übertragen der Anfrage. Bitte versuchen Sie es später noch einmal."
 "Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.","Ihre Anfrage wurde übertragen. Wir werden diese umgehend bearbeiten und uns gegebenenfalls mit Ihnen in Verbindung setzen. Vielen Dank!"

Links
http://www.blog.magepsycho.com/adding-upload-field-in-contact-form-and-send-as-attachment/
http://www.magentocommerce.com/boards/viewthread/440759/