diff options
author | Zach Copley <zach@controlyourself.ca> | 2009-06-23 14:29:46 -0700 |
---|---|---|
committer | Zach Copley <zach@controlyourself.ca> | 2009-06-23 14:29:46 -0700 |
commit | f04a54ed2f70686d67ed50da21bde61c55b07696 (patch) | |
tree | d4dbfac2a98e35b6f47696f787a3c2aa551f51ab /actions/newnotice.php | |
parent | 31325f0995bb61413b07f166d253b13fb27d085d (diff) | |
parent | 2d3e990ed47ee1c7130e1febabe7133884a85c80 (diff) |
Merge branch '0.8.x' of git@gitorious.org:laconica/dev into 0.8.x
* '0.8.x' of git@gitorious.org:laconica/dev: (61 commits)
Using default theme design values (it was previously set to identica
Updated default colour theme and IE6 colours for transparent values
chmod +x delete_status_network.sh
rm -Rf, not rmdir
script to delete a status network
chmod allsites.php
script to show all sites on a network
use different name for connection and database
use /etc/laconica/setup.cfg instead of local file
other base directories
On XHR notice post, calls NoticeAttachment to trigger thumbnail and
oembed and thumbnail don't need sequences
add innodb by default to status networks
pwgen not pwdgen
make pwgen command configurable
a little sql script to drop full-text index and use innodb for profile and notice
remove common_debug from newnotice
append uploads to content rather than showing them double
use a subclass for single notice items to show attachments
make file command configurable
...
Diffstat (limited to 'actions/newnotice.php')
-rw-r--r-- | actions/newnotice.php | 101 |
1 files changed, 72 insertions, 29 deletions
diff --git a/actions/newnotice.php b/actions/newnotice.php index 09652d2b3..4a2c369f0 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -116,6 +116,9 @@ class NewnoticeAction extends Action function getUploadedFileType() { require_once 'MIME/Type.php'; + $cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd'); + $cmd = common_config('attachments', 'filecommand'); + $filetype = MIME_Type::autoDetect($_FILES['attach']['tmp_name']); if (in_array($filetype, common_config('attachments', 'supported'))) { return $filetype; @@ -221,16 +224,34 @@ class NewnoticeAction extends Action } } + if (isset($mimetype)) { + $filename = $this->saveFile($mimetype); + if (empty($filename)) { + $this->clientError(_('Couldn\'t save file.')); + } + $fileurl = File::url($filename); + $short_fileurl = common_shorten_url($fileurl); + $content_shortened .= ' ' . $short_fileurl; + if (mb_strlen($content_shortened) > 140) { + $this->deleteFile($filename); + $this->clientError(_('Max notice size is 140 chars, including attachment URL.')); + } + } + $notice = Notice::saveNew($user->id, $content_shortened, 'web', 1, ($replyto == 'false') ? null : $replyto); if (is_string($notice)) { + if (isset($filename)) { + $this->deleteFile($filename); + } $this->clientError($notice); } if (isset($mimetype)) { - $this->storeFile($notice, $mimetype); + $this->attachFile($notice, $filename, $mimetype, $short_fileurl); } + common_broadcast_notice($notice); if ($this->boolean('ajax')) { @@ -256,50 +277,72 @@ class NewnoticeAction extends Action } } - function storeFile($notice, $mimetype) { + function saveFile($mimetype) { + + $cur = common_current_user(); - common_debug("NewnoticeAction::storeFile()"); + if (empty($cur)) { + $this->serverError(_('Somehow lost the login in saveFile')); + } $basename = basename($_FILES['attach']['name']); - common_debug("Basename: $basename"); + $filename = File::filename($cur->getProfile(), $basename, $mimetype); + + $filepath = File::path($filename); + + if (move_uploaded_file($_FILES['attach']['tmp_name'], $filepath)) { + return $filename; + } else { + $this->clientError(_('File could not be moved to destination directory.')); + } + } + + function deleteFile($filename) + { + $filepath = File::path($filename); + @unlink($filepath); + } - $filename = File::filename($notice->id, $basename); + function attachFile($notice, $filename, $mimetype, $short) + { + $file = new File; + $file->filename = $filename; - common_debug("filename: $filename"); + $file->url = common_local_url('file', array('notice' => $notice->id)); $filepath = File::path($filename); - common_debug("filepath: $filepath"); + $file->size = filesize($filepath); + $file->date = time(); + $file->mimetype = $mimetype; - if (move_uploaded_file($_FILES['attach']['tmp_name'], $filepath)) { + $file_id = $file->insert(); - $file = new File; - $file->filename = $filename; + if (!$file_id) { + common_log_db_error($file, "INSERT", __FILE__); + $this->clientError(_('There was a database error while saving your file. Please try again.')); + } - $file->url = common_local_url('file', array('notice' => $notice->id)); + $file_redir = new File_redirection; + $file_redir->url = File::url($filename); + $file_redir->file_id = $file_id; - common_debug("file->url =". $file->url); + $result = $file_redir->insert(); - $file->size = filesize($filepath); - $file->date = time(); - $file->mimetype = $mimetype; + if (!$result) { + common_log_db_error($file_redir, "INSERT", __FILE__); + $this->clientError(_('There was a database error while saving your file. Please try again.')); + } - if ($file_id = $file->insert()) { - $file_redir = new File_redirection; - $file_redir->url = File::url($filename); - $file_redir->file_id = $file_id; - $file_redir->insert(); + $f2p = new File_to_post; + $f2p->file_id = $file_id; + $f2p->post_id = $notice->id; + $f2p->insert(); - $f2p = new File_to_post; - $f2p->file_id = $file_id; - $f2p->post_id = $notice->id; - $f2p->insert(); - } else { - $this->clientError(_('There was a database error while saving your file. Please try again.')); - } - } else { - $this->clientError(_('File could not be moved to destination directory.')); + if (!$result) { + common_log_db_error($f2p, "INSERT", __FILE__); + $this->clientError(_('There was a database error while saving your file. Please try again.')); } } |