diff options
Diffstat (limited to 'actions')
-rw-r--r-- | actions/api.php | 4 | ||||
-rw-r--r-- | actions/attachment.php | 11 | ||||
-rw-r--r-- | actions/conversation.php | 41 | ||||
-rw-r--r-- | actions/file.php | 12 | ||||
-rw-r--r-- | actions/groupdesignsettings.php | 31 | ||||
-rw-r--r-- | actions/groupmembers.php | 9 | ||||
-rw-r--r-- | actions/grouprss.php | 1 | ||||
-rw-r--r-- | actions/invite.php | 4 | ||||
-rw-r--r-- | actions/newnotice.php | 26 | ||||
-rw-r--r-- | actions/noticesearchrss.php | 13 | ||||
-rw-r--r-- | actions/public.php | 6 | ||||
-rw-r--r-- | actions/showgroup.php | 44 | ||||
-rw-r--r-- | actions/sup.php | 4 | ||||
-rw-r--r-- | actions/twitapisearchatom.php | 27 | ||||
-rw-r--r-- | actions/twitapisearchjson.php | 9 | ||||
-rw-r--r-- | actions/userdesignsettings.php | 107 |
16 files changed, 278 insertions, 71 deletions
diff --git a/actions/api.php b/actions/api.php index 1fe5875ad..08f5fadad 100644 --- a/actions/api.php +++ b/actions/api.php @@ -67,7 +67,9 @@ class ApiAction extends Action $this->process_command(); } else { # basic authentication failed - common_log(LOG_WARNING, "Failed API auth attempt, nickname: $nickname."); + list($proxy, $ip) = common_client_ip(); + + common_log(LOG_WARNING, "Failed API auth attempt, nickname = $nickname, proxy = $proxy, ip = $ip."); $this->show_basic_auth_error(); } } diff --git a/actions/attachment.php b/actions/attachment.php index e4dc0e054..ee4cd9640 100644 --- a/actions/attachment.php +++ b/actions/attachment.php @@ -111,7 +111,16 @@ class AttachmentAction extends Action function handle($args) { parent::handle($args); - $this->showPage(); + + if (empty($this->attachment->filename)) { + + // if it's not a local file, gtfo + + common_redirect($this->attachment->url, 303); + + } else { + $this->showPage(); + } } /** diff --git a/actions/conversation.php b/actions/conversation.php index 654a670f5..79197da2d 100644 --- a/actions/conversation.php +++ b/actions/conversation.php @@ -107,17 +107,11 @@ class ConversationAction extends Action function showContent() { - $offset = ($this->page-1) * NOTICES_PER_PAGE; - $limit = NOTICES_PER_PAGE + 1; - - $notices = Notice::conversationStream($this->id, $offset, $limit); + $notices = Notice::conversationStream($this->id); $ct = new ConversationTree($notices, $this); $cnt = $ct->show(); - - $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, - $this->page, 'conversation', array('id' => $this->id)); } } @@ -148,6 +142,25 @@ class ConversationTree extends NoticeList { $cnt = 0; + $this->_buildTree(); + + $this->out->elementStart('div', array('id' =>'notices_primary')); + $this->out->element('h2', null, _('Notices')); + $this->out->elementStart('ol', array('class' => 'notices xoxo')); + + if (array_key_exists('root', $this->tree)) { + $rootid = $this->tree['root'][0]; + $this->showNoticePlus($rootid); + } + + $this->out->elementEnd('ol'); + $this->out->elementEnd('div'); + + return $cnt; + } + + function _buildTree() + { $this->tree = array(); $this->table = array(); @@ -168,20 +181,6 @@ class ConversationTree extends NoticeList $this->tree[$notice->reply_to] = array($notice->id); } } - - $this->out->elementStart('div', array('id' =>'notices_primary')); - $this->out->element('h2', null, _('Notices')); - $this->out->elementStart('ol', array('class' => 'notices xoxo')); - - if (array_key_exists('root', $this->tree)) { - $rootid = $this->tree['root'][0]; - $this->showNoticePlus($rootid); - } - - $this->out->elementEnd('ol'); - $this->out->elementEnd('div'); - - return $cnt; } /** diff --git a/actions/file.php b/actions/file.php index 271f57ab9..8310e48df 100644 --- a/actions/file.php +++ b/actions/file.php @@ -56,5 +56,17 @@ class FileAction extends Action function handle() { common_redirect($this->filerec->url); } + + /** + * Is this action read-only? + * + * @return boolean true + */ + + function isReadOnly($args) + { + return true; + } + } diff --git a/actions/groupdesignsettings.php b/actions/groupdesignsettings.php index 79c192ac4..6c1c052cb 100644 --- a/actions/groupdesignsettings.php +++ b/actions/groupdesignsettings.php @@ -34,19 +34,37 @@ if (!defined('LACONICA')) { require_once INSTALLDIR . '/lib/designsettings.php'; +/** + * Set a group's design + * + * Saves a design for a given group + * + * @category Settings + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Sarven Capadisli <csarven@controlyourself.ca> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + class GroupDesignSettingsAction extends DesignSettingsAction { var $group = null; /** - * Prepare to run + * Sets the right action for the form, and passes request args into + * the base action + * + * @param array $args misc. arguments + * + * @return boolean true */ function prepare($args) { parent::prepare($args); - if (!common_config('inboxes','enabled')) { + if (!common_config('inboxes', 'enabled')) { $this->serverError(_('Inboxes must be enabled for groups to work')); return false; } @@ -57,7 +75,7 @@ class GroupDesignSettingsAction extends DesignSettingsAction } $nickname_arg = $this->trimmed('nickname'); - $nickname = common_canonical_nickname($nickname_arg); + $nickname = common_canonical_nickname($nickname_arg); // Permanent redirect on non-canonical nickname @@ -158,7 +176,8 @@ class GroupDesignSettingsAction extends DesignSettingsAction * @return Design */ - function getWorkingDesign() { + function getWorkingDesign() + { $design = null; @@ -273,9 +292,9 @@ class GroupDesignSettingsAction extends DesignSettingsAction return; } - $original = clone($this->group); + $original = clone($this->group); $this->group->design_id = $id; - $result = $this->group->update($original); + $result = $this->group->update($original); if (empty($result)) { common_log_db_error($original, 'UPDATE', __FILE__); diff --git a/actions/groupmembers.php b/actions/groupmembers.php index d132cdf96..14256526a 100644 --- a/actions/groupmembers.php +++ b/actions/groupmembers.php @@ -167,6 +167,15 @@ class GroupMemberListItem extends ProfileListItem $this->group = $group; } + function showFullName() + { + parent::showFullName(); + if ($this->profile->isAdmin($this->group)) { + $this->out->text(' '); + $this->out->element('span', 'role', _('Admin')); + } + } + function showActions() { $this->startActions(); diff --git a/actions/grouprss.php b/actions/grouprss.php index 0b7280a11..2bdcaafb2 100644 --- a/actions/grouprss.php +++ b/actions/grouprss.php @@ -116,6 +116,7 @@ class groupRssAction extends Rss10Action return null; } + $notices = array(); $notice = $group->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit); while ($notice->fetch()) { diff --git a/actions/invite.php b/actions/invite.php index 5dcc83652..bdea4807d 100644 --- a/actions/invite.php +++ b/actions/invite.php @@ -35,7 +35,9 @@ class InviteAction extends CurrentUserDesignAction function handle($args) { parent::handle($args); - if (!common_logged_in()) { + if (!common_config('invite', 'enabled')) { + $this->clientError(_('Invites have been disabled.')); + } else if (!common_logged_in()) { $this->clientError(sprintf(_('You must be logged in to invite other users to use %s'), common_config('site', 'name'))); return; diff --git a/actions/newnotice.php b/actions/newnotice.php index 15caff6ea..5f44a32a9 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -229,14 +229,25 @@ class NewnoticeAction extends Action if (empty($filename)) { $this->clientError(_('Couldn\'t save file.')); } - $fileurl = File::url($filename); + + $fileRecord = $this->storeFile($filename, $mimetype); + + $fileurl = common_local_url('attachment', + array('attachment' => $fileRecord->id)); + + // not sure this is necessary -- Zach + $this->maybeAddRedir($fileRecord->id, $fileurl); + $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.')); } - $fileRecord = $this->rememberFile($filename, $mimetype, $short_fileurl); + + // Also, not sure this is necessary -- Zach + $this->maybeAddRedir($fileRecord->id, $short_fileurl); } $notice = Notice::saveNew($user->id, $content_shortened, 'web', 1, @@ -305,8 +316,8 @@ class NewnoticeAction extends Action @unlink($filepath); } - function rememberFile($filename, $mimetype, $short) - { + function storeFile($filename, $mimetype) { + $file = new File; $file->filename = $filename; @@ -325,11 +336,14 @@ class NewnoticeAction extends Action $this->clientError(_('There was a database error while saving your file. Please try again.')); } - $this->maybeAddRedir($file_id, $short); - return $file; } + function rememberFile($file, $short) + { + $this->maybeAddRedir($file->id, $short); + } + function maybeAddRedir($file_id, $url) { $file_redir = File_redirection::staticGet('url', $url); diff --git a/actions/noticesearchrss.php b/actions/noticesearchrss.php index c1bf3bf5f..2a4b2060d 100644 --- a/actions/noticesearchrss.php +++ b/actions/noticesearchrss.php @@ -67,11 +67,16 @@ class NoticesearchrssAction extends Rss10Action if (!$limit) $limit = 20; $search_engine->limit(0, $limit, true); - $search_engine->query($q); - $notice->find(); + if (false === $search_engine->query($q)) { + $cnt = 0; + } else { + $cnt = $notice->find(); + } - while ($notice->fetch()) { - $notices[] = clone($notice); + if ($cnt > 0) { + while ($notice->fetch()) { + $notices[] = clone($notice); + } } return $notices; diff --git a/actions/public.php b/actions/public.php index 9851285c4..ef9ef0d1a 100644 --- a/actions/public.php +++ b/actions/public.php @@ -182,8 +182,10 @@ class PublicAction extends Action $message .= _('Be the first to post!'); } else { - $message .= _('Why not [register an account](%%action.register%%) and be the first to post!'); - } + if (! (common_config('site','closed') || common_config('site','inviteonly'))) { + $message .= _('Why not [register an account](%%action.register%%) and be the first to post!'); + } + } $this->elementStart('div', 'guide'); $this->raw(common_markup_to_html($message)); diff --git a/actions/showgroup.php b/actions/showgroup.php index b6a0f4844..ce11d574e 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -331,6 +331,7 @@ class ShowgroupAction extends GroupDesignAction { $this->showMembers(); $this->showStatistics(); + $this->showAdmins(); $cloud = new GroupTagCloudSection($this, $this->group); $cloud->show(); } @@ -370,6 +371,18 @@ class ShowgroupAction extends GroupDesignAction } /** + * Show list of admins + * + * @return void + */ + + function showAdmins() + { + $adminSection = new GroupAdminSection($this, $this->group); + $adminSection->show(); + } + + /** * Show some statistics * * @return void @@ -423,3 +436,34 @@ class ShowgroupAction extends GroupDesignAction $this->elementEnd('div'); } } + +class GroupAdminSection extends ProfileSection +{ + var $group; + + function __construct($out, $group) + { + parent::__construct($out); + $this->group = $group; + } + + function getProfiles() + { + return $this->group->getAdmins(); + } + + function title() + { + return _('Admins'); + } + + function divId() + { + return 'group_admins'; + } + + function moreUrl() + { + return null; + } +}
\ No newline at end of file diff --git a/actions/sup.php b/actions/sup.php index e446a7b0d..a5b665562 100644 --- a/actions/sup.php +++ b/actions/sup.php @@ -63,11 +63,13 @@ class SupAction extends Action # XXX: cache this. Depends on how big this protocol becomes; # Re-doing this query every 15 seconds isn't the end of the world. + $divider = common_sql_date(time() - $seconds); + $notice->query('SELECT profile_id, max(id) AS max_id ' . 'FROM notice ' . ((common_config('db','type') == 'pgsql') ? 'WHERE extract(epoch from created) > (extract(epoch from now()) - ' . $seconds . ') ' : - 'WHERE created > (now() - ' . $seconds . ') ' ) . + 'WHERE created > "'.$divider.'" ' ) . 'GROUP BY profile_id'); $updates = array(); diff --git a/actions/twitapisearchatom.php b/actions/twitapisearchatom.php index c223a7e27..3678213c3 100644 --- a/actions/twitapisearchatom.php +++ b/actions/twitapisearchatom.php @@ -165,25 +165,30 @@ class TwitapisearchatomAction extends TwitterapiAction $search_engine->set_sort_mode('chron'); $search_engine->limit(($this->page - 1) * $this->rpp, $this->rpp + 1, true); - $search_engine->query($q); - $this->cnt = $notice->find(); + if (false === $search_engine->query($q)) { + $this->cnt = 0; + } else { + $this->cnt = $notice->find(); + } $cnt = 0; $this->max_id = 0; - while ($notice->fetch()) { + if ($this->cnt > 0) { + while ($notice->fetch()) { - ++$cnt; + ++$cnt; - if (!$this->max_id) { - $this->max_id = $notice->id; - } + if (!$this->max_id) { + $this->max_id = $notice->id; + } - if ($cnt > $this->rpp) { - break; - } + if ($cnt > $this->rpp) { + break; + } - $notices[] = clone($notice); + $notices[] = clone($notice); + } } return $notices; diff --git a/actions/twitapisearchjson.php b/actions/twitapisearchjson.php index b0e3be687..27a717bfc 100644 --- a/actions/twitapisearchjson.php +++ b/actions/twitapisearchjson.php @@ -124,8 +124,11 @@ class TwitapisearchjsonAction extends TwitterapiAction $search_engine = $notice->getSearchEngine('identica_notices'); $search_engine->set_sort_mode('chron'); $search_engine->limit(($this->page - 1) * $this->rpp, $this->rpp + 1, true); - $search_engine->query($q); - $cnt = $notice->find(); + if (false === $search_engine->query($q)) { + $cnt = 0; + } else { + $cnt = $notice->find(); + } // TODO: since_id, lang, geocode @@ -146,4 +149,4 @@ class TwitapisearchjsonAction extends TwitterapiAction { return true; } -}
\ No newline at end of file +} diff --git a/actions/userdesignsettings.php b/actions/userdesignsettings.php index 6e745e96f..d7949951a 100644 --- a/actions/userdesignsettings.php +++ b/actions/userdesignsettings.php @@ -34,16 +34,37 @@ if (!defined('LACONICA')) { require_once INSTALLDIR . '/lib/designsettings.php'; +/** + * Set a user's design + * + * Saves a design for a given user + * + * @category Settings + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Sarven Capadisli <csarven@controlyourself.ca> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + class UserDesignSettingsAction extends DesignSettingsAction { - + /** + * Sets the right action for the form, and passes request args into + * the base action + * + * @param array $args misc. arguments + * + * @return boolean true + */ + function prepare($args) { parent::prepare($args); $this->submitaction = common_local_url('userdesignsettings'); return true; } - + /** * Title of the page * @@ -72,19 +93,20 @@ class UserDesignSettingsAction extends DesignSettingsAction * * @return Design */ - - function getWorkingDesign() { - - $user = common_current_user(); + + function getWorkingDesign() + { + + $user = common_current_user(); $design = $user->getDesign(); if (empty($design)) { $design = $this->defaultDesign(); } - + return $design; } - + /** * Content area of the page * @@ -92,7 +114,7 @@ class UserDesignSettingsAction extends DesignSettingsAction * * @return void */ - + function showContent() { $this->showDesignForm($this->getWorkingDesign()); @@ -106,14 +128,19 @@ class UserDesignSettingsAction extends DesignSettingsAction function saveDesign() { - try { + foreach ($this->args as $key => $val) { + if (preg_match('/(#ho|ho)Td.*g/i', $val)) { + $this->sethd(); + return; + } + } + try { $bgcolor = new WebColor($this->trimmed('design_background')); $ccolor = new WebColor($this->trimmed('design_content')); $sbcolor = new WebColor($this->trimmed('design_sidebar')); $tcolor = new WebColor($this->trimmed('design_text')); $lcolor = new WebColor($this->trimmed('design_links')); - } catch (WebColorException $e) { $this->showForm($e->getMessage()); return; @@ -137,7 +164,7 @@ class UserDesignSettingsAction extends DesignSettingsAction $tile = true; } - $user = common_current_user(); + $user = common_current_user(); $design = $user->getDesign(); if (!empty($design)) { @@ -184,9 +211,9 @@ class UserDesignSettingsAction extends DesignSettingsAction return; } - $original = clone($user); + $original = clone($user); $user->design_id = $id; - $result = $user->update($original); + $result = $user->update($original); if (empty($result)) { common_log_db_error($original, 'UPDATE', __FILE__); @@ -203,4 +230,56 @@ class UserDesignSettingsAction extends DesignSettingsAction $this->showForm(_('Design preferences saved.'), true); } + + /** + * Alternate default colors + * + * @return nothing + */ + + function sethd() + { + + $user = common_current_user(); + $design = $user->getDesign(); + + $user->query('BEGIN'); + + // alternate colors + $design = new Design(); + + $design->backgroundcolor = 16184329; + $design->contentcolor = 16059904; + $design->sidebarcolor = 16059904; + $design->textcolor = 0; + $design->linkcolor = 16777215; + + $design->setDisposition(false, true, false); + + $id = $design->insert(); + + if (empty($id)) { + common_log_db_error($id, 'INSERT', __FILE__); + $this->showForm(_('Unable to save your design settings!')); + return; + } + + $original = clone($user); + $user->design_id = $id; + $result = $user->update($original); + + if (empty($result)) { + common_log_db_error($original, 'UPDATE', __FILE__); + $this->showForm(_('Unable to save your design settings!')); + $user->query('ROLLBACK'); + return; + } + + $user->query('COMMIT'); + + $this->saveBackgroundImage($design); + + $this->showForm(_('Enjoy your hotdog!'), true); + } + } |