Merge branch '0.8.x' of git@gitorious.org:+laconica-developers/laconica/dev into taggedprofile
This commit is contained in:
commit
420e8994f8
9
README
9
README
|
@ -1223,6 +1223,7 @@ supported: an array of mime types you accept to store and distribute,
|
||||||
like 'image/gif', 'video/mpeg', 'audio/mpeg', etc. Make sure you
|
like 'image/gif', 'video/mpeg', 'audio/mpeg', etc. Make sure you
|
||||||
setup your server to properly reckognize the types you want to
|
setup your server to properly reckognize the types you want to
|
||||||
support.
|
support.
|
||||||
|
uploads: false to disable uploading files with notices (true by default).
|
||||||
|
|
||||||
For quotas, be sure you've set the upload_max_filesize and post_max_size
|
For quotas, be sure you've set the upload_max_filesize and post_max_size
|
||||||
in php.ini to be large enough to handle your upload. In httpd.conf
|
in php.ini to be large enough to handle your upload. In httpd.conf
|
||||||
|
@ -1246,6 +1247,14 @@ Options for group functionality.
|
||||||
maxaliases: maximum number of aliases a group can have. Default 3. Set
|
maxaliases: maximum number of aliases a group can have. Default 3. Set
|
||||||
to 0 or less to prevent aliases in a group.
|
to 0 or less to prevent aliases in a group.
|
||||||
|
|
||||||
|
|
||||||
|
oohembed
|
||||||
|
--------
|
||||||
|
|
||||||
|
oEmbed endpoint for multimedia attachments (links in posts).
|
||||||
|
|
||||||
|
endpoint: oohembed endpoint using http://oohembed.com/ software.
|
||||||
|
|
||||||
Troubleshooting
|
Troubleshooting
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,11 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
$user = $this->get_user($apidata['api_arg'], $apidata);
|
$user = $this->get_user($apidata['api_arg'], $apidata);
|
||||||
|
|
||||||
if (empty($user)) {
|
if (empty($user)) {
|
||||||
|
if ($apidata['content-type'] == 'xml') {
|
||||||
|
$this->show_single_xml_status($notice);
|
||||||
|
} elseif ($apidata['content-type'] == 'json') {
|
||||||
|
$this->show_single_json_status($notice);
|
||||||
|
}
|
||||||
$this->clientError('Not Found', 404, $apidata['content-type']);
|
$this->clientError('Not Found', 404, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +96,6 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
|
|
||||||
// Check for RESTfulness
|
// Check for RESTfulness
|
||||||
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
||||||
// XXX: Twitter just prints the err msg, no XML / JSON.
|
|
||||||
$this->clientError(_('This method requires a POST or DELETE.'),
|
$this->clientError(_('This method requires a POST or DELETE.'),
|
||||||
400, $apidata['content-type']);
|
400, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
|
@ -103,7 +107,6 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $apidata['user']; // Always the auth user
|
$user = $apidata['user']; // Always the auth user
|
||||||
|
|
||||||
$notice_id = $apidata['api_arg'];
|
$notice_id = $apidata['api_arg'];
|
||||||
$notice = Notice::staticGet($notice_id);
|
$notice = Notice::staticGet($notice_id);
|
||||||
|
|
||||||
|
@ -115,7 +118,7 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
|
|
||||||
// XXX: Twitter lets you fave things repeatedly via api.
|
// XXX: Twitter lets you fave things repeatedly via api.
|
||||||
if ($user->hasFave($notice)) {
|
if ($user->hasFave($notice)) {
|
||||||
$this->clientError(_('This notice is already a favorite!'),
|
$this->clientError(_('This status is already a favorite!'),
|
||||||
403, $apidata['content-type']);
|
403, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +126,7 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
$fave = Fave::addNew($user, $notice);
|
$fave = Fave::addNew($user, $notice);
|
||||||
|
|
||||||
if (empty($fave)) {
|
if (empty($fave)) {
|
||||||
$this->serverError(_('Could not create favorite.'));
|
$this->clientError(_('Could not create favorite.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +144,55 @@ class TwitapifavoritesAction extends TwitterapiAction
|
||||||
function destroy($args, $apidata)
|
function destroy($args, $apidata)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
$this->serverError(_('API method under construction.'), $code=501);
|
|
||||||
|
// Check for RESTfulness
|
||||||
|
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
||||||
|
$this->clientError(_('This method requires a POST or DELETE.'),
|
||||||
|
400, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!in_array($apidata['content-type'], array('xml', 'json'))) {
|
||||||
|
$this->clientError(_('API method not found!'), $code = 404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $apidata['user']; // Always the auth user
|
||||||
|
$notice_id = $apidata['api_arg'];
|
||||||
|
$notice = Notice::staticGet($notice_id);
|
||||||
|
|
||||||
|
if (empty($notice)) {
|
||||||
|
$this->clientError(_('No status found with that ID.'),
|
||||||
|
404, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fave = new Fave();
|
||||||
|
$fave->user_id = $this->id;
|
||||||
|
$fave->notice_id = $notice->id;
|
||||||
|
|
||||||
|
if (!$fave->find(true)) {
|
||||||
|
$this->clientError(_('That status is not a favorite!'),
|
||||||
|
403, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $fave->delete();
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
common_log_db_error($fave, 'DELETE', __FILE__);
|
||||||
|
$this->clientError(_('Could not delete favorite.'), 404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user->blowFavesCache();
|
||||||
|
|
||||||
|
if ($apidata['content-type'] == 'xml') {
|
||||||
|
$this->show_single_xml_status($notice);
|
||||||
|
} elseif ($apidata['content-type'] == 'json') {
|
||||||
|
$this->show_single_json_status($notice);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: these two funcs swiped from faves.
|
// XXX: these two funcs swiped from faves.
|
||||||
|
|
|
@ -79,7 +79,6 @@ class File extends Memcached_DataObject
|
||||||
&& ('text/html' === substr($redir_data['type'], 0, 9))
|
&& ('text/html' === substr($redir_data['type'], 0, 9))
|
||||||
&& ($oembed_data = File_oembed::_getOembed($given_url))
|
&& ($oembed_data = File_oembed::_getOembed($given_url))
|
||||||
&& isset($oembed_data['json'])) {
|
&& isset($oembed_data['json'])) {
|
||||||
|
|
||||||
File_oembed::saveNew($oembed_data['json'], $file_id);
|
File_oembed::saveNew($oembed_data['json'], $file_id);
|
||||||
}
|
}
|
||||||
return $x;
|
return $x;
|
||||||
|
@ -98,7 +97,6 @@ class File extends Memcached_DataObject
|
||||||
if ($redir_url === $given_url) {
|
if ($redir_url === $given_url) {
|
||||||
$x = File::saveNew($redir_data, $given_url);
|
$x = File::saveNew($redir_data, $given_url);
|
||||||
$file_id = $x->id;
|
$file_id = $x->id;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$x = File::processNew($redir_url, $notice_id);
|
$x = File::processNew($redir_url, $notice_id);
|
||||||
$file_id = $x->id;
|
$file_id = $x->id;
|
||||||
|
|
|
@ -53,7 +53,7 @@ class File_oembed extends Memcached_DataObject
|
||||||
|
|
||||||
|
|
||||||
function _getOembed($url, $maxwidth = 500, $maxheight = 400, $format = 'json') {
|
function _getOembed($url, $maxwidth = 500, $maxheight = 400, $format = 'json') {
|
||||||
$cmd = 'http://oohembed.com/oohembed/?url=' . urlencode($url);
|
$cmd = common_config('oohembed', 'endpoint') . '?url=' . urlencode($url);
|
||||||
if (is_int($maxwidth)) $cmd .= "&maxwidth=$maxwidth";
|
if (is_int($maxwidth)) $cmd .= "&maxwidth=$maxwidth";
|
||||||
if (is_int($maxheight)) $cmd .= "&maxheight=$maxheight";
|
if (is_int($maxheight)) $cmd .= "&maxheight=$maxheight";
|
||||||
if (is_string($format)) $cmd .= "&format=$format";
|
if (is_string($format)) $cmd .= "&format=$format";
|
||||||
|
|
|
@ -223,6 +223,12 @@ class Notice extends Memcached_DataObject
|
||||||
$notice->addToInboxes();
|
$notice->addToInboxes();
|
||||||
$notice->saveGroups();
|
$notice->saveGroups();
|
||||||
$notice->saveUrls();
|
$notice->saveUrls();
|
||||||
|
$orig2 = clone($notice);
|
||||||
|
$notice->rendered = common_render_content($final, $notice);
|
||||||
|
if (!$notice->update($orig2)) {
|
||||||
|
common_log_db_error($notice, 'UPDATE', __FILE__);
|
||||||
|
return _('Problem saving notice.');
|
||||||
|
}
|
||||||
|
|
||||||
$notice->query('COMMIT');
|
$notice->query('COMMIT');
|
||||||
|
|
||||||
|
@ -242,8 +248,6 @@ class Notice extends Memcached_DataObject
|
||||||
* follow redirects and save all available file information
|
* follow redirects and save all available file information
|
||||||
* (mimetype, date, size, oembed, etc.)
|
* (mimetype, date, size, oembed, etc.)
|
||||||
*
|
*
|
||||||
* @param class $notice Notice to pull URLs from
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function saveUrls() {
|
function saveUrls() {
|
||||||
|
|
|
@ -222,4 +222,6 @@ $config['sphinx']['port'] = 3312;
|
||||||
// $config['attachments']['file_quota'] = 5000000;
|
// $config['attachments']['file_quota'] = 5000000;
|
||||||
// $config['attachments']['user_quota'] = 50000000;
|
// $config['attachments']['user_quota'] = 50000000;
|
||||||
// $config['attachments']['monthly_quota'] = 15000000;
|
// $config['attachments']['monthly_quota'] = 15000000;
|
||||||
|
// $config['attachments']['uploads'] = true;
|
||||||
|
|
||||||
|
// $config['oohembed']['endpoint'] = 'http://oohembed.com/oohembed/';
|
||||||
|
|
|
@ -200,9 +200,11 @@ $config =
|
||||||
'file_quota' => 5000000,
|
'file_quota' => 5000000,
|
||||||
'user_quota' => 50000000,
|
'user_quota' => 50000000,
|
||||||
'monthly_quota' => 15000000,
|
'monthly_quota' => 15000000,
|
||||||
|
'uploads' => true,
|
||||||
),
|
),
|
||||||
'group' =>
|
'group' =>
|
||||||
array('maxaliases' => 3),
|
array('maxaliases' => 3),
|
||||||
|
'oohembed' => array('endpoint' => 'http://oohembed.com/oohembed/')
|
||||||
);
|
);
|
||||||
|
|
||||||
$config['db'] = &PEAR::getStaticProperty('DB_DataObject','options');
|
$config['db'] = &PEAR::getStaticProperty('DB_DataObject','options');
|
||||||
|
|
|
@ -90,8 +90,10 @@ class NoticeForm extends Form
|
||||||
$this->user = common_current_user();
|
$this->user = common_current_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (common_config('attachments', 'uploads')) {
|
||||||
$this->enctype = 'multipart/form-data';
|
$this->enctype = 'multipart/form-data';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ID of the form
|
* ID of the form
|
||||||
|
@ -148,12 +150,14 @@ class NoticeForm extends Form
|
||||||
$this->out->element('dd', array('id' => 'notice_text-count'),
|
$this->out->element('dd', array('id' => 'notice_text-count'),
|
||||||
'140');
|
'140');
|
||||||
$this->out->elementEnd('dl');
|
$this->out->elementEnd('dl');
|
||||||
|
if (common_config('attachments', 'uploads')) {
|
||||||
|
$this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota'));
|
||||||
$this->out->element('label', array('for' => 'notice_data-attach'),_('Attach'));
|
$this->out->element('label', array('for' => 'notice_data-attach'),_('Attach'));
|
||||||
$this->out->element('input', array('id' => 'notice_data-attach',
|
$this->out->element('input', array('id' => 'notice_data-attach',
|
||||||
'type' => 'file',
|
'type' => 'file',
|
||||||
'name' => 'attach',
|
'name' => 'attach',
|
||||||
'title' => _('Attach a file')));
|
'title' => _('Attach a file')));
|
||||||
$this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota'));
|
}
|
||||||
if ($this->action) {
|
if ($this->action) {
|
||||||
$this->out->hidden('notice_return-to', $this->action, 'returnto');
|
$this->out->hidden('notice_return-to', $this->action, 'returnto');
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,7 +351,8 @@ class Router
|
||||||
|
|
||||||
$m->connect('api/favorites/:method/:argument',
|
$m->connect('api/favorites/:method/:argument',
|
||||||
array('action' => 'api',
|
array('action' => 'api',
|
||||||
'apiaction' => 'favorites'));
|
'apiaction' => 'favorites',
|
||||||
|
array('method' => '(create|destroy)')));
|
||||||
|
|
||||||
$m->connect('api/favorites/:argument',
|
$m->connect('api/favorites/:argument',
|
||||||
array('action' => 'api',
|
array('action' => 'api',
|
||||||
|
|
|
@ -545,7 +545,7 @@ class TwitterapiAction extends Action
|
||||||
$this->init_twitter_atom();
|
$this->init_twitter_atom();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->client_error(_('Not a supported data format.'));
|
$this->clientError(_('Not a supported data format.'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,13 +573,13 @@ class TwitterapiAction extends Action
|
||||||
$this->end_twitter_rss();
|
$this->end_twitter_rss();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->client_error(_('Not a supported data format.'));
|
$this->clientError(_('Not a supported data format.'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function client_error($msg, $code = 400, $content_type = 'json')
|
function clientError($msg, $code = 400, $content_type = 'json')
|
||||||
{
|
{
|
||||||
|
|
||||||
static $status = array(400 => 'Bad Request',
|
static $status = array(400 => 'Bad Request',
|
||||||
|
@ -666,7 +666,7 @@ class TwitterapiAction extends Action
|
||||||
$this->show_json_objects($profile_array);
|
$this->show_json_objects($profile_array);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->client_error(_('Not a supported data format.'));
|
$this->clientError(_('Not a supported data format.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user