/** * @param array $file * * @return App_Model_File|array * * @throws App_Exception_FileIsNotReadable * @throws App_Exception_UnableToCopyFile */ public function save(array $file) { if (!is_readable($file['tmpName'])) { throw new App_Exception_FileIsNotReadable($file['tmpName']); } $identifier = md5(microtime()); try { $ext = explode('.', $file['name'])[count(explode('.', $file['name'])) - 1]; $newFilePath = $this->_getAbsoluteFilePath($identifier, $ext, true); copy($file['tmpName'], $newFilePath); chmod($newFilePath, 0777); $file = new App_Model_File(array('name' => $file['name'], 'type' => $file['type'], 'size' => $file['size'], 'ext' => $ext, 'identity' => $identifier, 'user' => (string) self::$_user->id)); $file->save(); } catch (\Exception $e) { throw new App_Exception_UnableToCopyFile($e->getMessage()); } return $file; }
/** * Create a new File object from posted values and store it into the database. * * @param array $post ~= $_POST * @param array $files ~= $_FILES * @return App_Model_File */ private function saveFile($post, $uploadedFile) { // Computing default values $comment = array_key_exists('comment', $post) ? $post['comment'] : ''; // Validating lifetime $lifetime = fz_config_get('app', 'default_file_lifetime', 10); if (array_key_exists('lifetime', $post) && is_numeric($post['lifetime'])) { $lifetime = intval($post['lifetime']); $maxLifetime = intval(fz_config_get('app', 'max_file_lifetime', 20)); if ($lifetime > $maxLifetime) { $lifetime = $maxLifetime; } } $availableFrom = array_key_exists('start-from', $post) ? $post['start-from'] : null; $availableFrom = new Zend_Date($availableFrom, Zend_Date::DATE_SHORT); $availableUntil = clone $availableFrom; $availableUntil->add($lifetime, Zend_Date::DAY); $user = $this->getUser(); // Storing values $file = new App_Model_File(); $file->setFileInfo($uploadedFile); if (option('visitor')) { $file->setVisitorUploader(); } else { $file->setUploader($user); } $file->setCreatedAt(new Zend_Date()); $file->comment = substr($comment, 0, 199); $file->setAvailableFrom($availableFrom); $file->setAvailableUntil($availableUntil); $file->notify_uploader = isset($post['email-notifications']); if (!empty($post['password'])) { $file->setPassword($post['password']); } try { $file->save(); if ($file->moveUploadedFile($uploadedFile)) { fz_log('Saved "' . $file->file_name . '"[' . $file->id . '] uploaded by ' . $user); return $file; } else { $file->delete(); return null; } } catch (Exception $e) { fz_log('Can\'t save file "' . $uploadedFile['name'] . '" uploaded by ' . $user, FZ_LOG_ERROR); fz_log($e, FZ_LOG_ERROR); return null; } }