diff --git a/actions/noticesearch.php b/actions/noticesearch.php index 336e39bd3a..8c5128de15 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -1,5 +1,16 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,43 +28,64 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} -require_once(INSTALLDIR.'/lib/searchaction.php'); - -# XXX common parent for people and content search? +require_once INSTALLDIR.'/lib/searchaction.php'; +/** + * Notice search action class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * @todo common parent for people and content search? + */ class NoticesearchAction extends SearchAction { - - function get_instructions() + /** + * Get instructions + * + * @return string instruction text + */ + function getInstructions() { return _('Search for notices on %%site.name%% by their contents. Separate search terms by spaces; they must be 3 characters or more.'); } - function get_title() + /** + * Get title + * + * @return string title + */ + function title() { return _('Text search'); } - function show_results($q, $page) + /** + * Show results + * + * @param string $q search query + * @param integer $page page number + * + * @return void + */ + function showResults($q, $page) { - - $notice = new Notice(); - - # lcase it for comparison - $q = strtolower($q); - + $notice = new Notice(); + $q = strtolower($q); $search_engine = $notice->getSearchEngine('identica_notices'); - $search_engine->set_sort_mode('chron'); - # Ask for an extra to see if there's more. + // Ask for an extra to see if there's more. $search_engine->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); - if (false === $search_engine->query($q)) { $cnt = 0; - } - else { + } else { $cnt = $notice->find(); } if ($cnt > 0) { @@ -61,7 +93,7 @@ class NoticesearchAction extends SearchAction $this->elementStart('ul', array('id' => 'notices')); for ($i = 0; $i < min($cnt, NOTICES_PER_PAGE); $i++) { if ($notice->fetch()) { - $this->show_notice($notice, $terms); + $this->showNotice($notice, $terms); } else { // shouldn't happen! break; @@ -72,15 +104,21 @@ class NoticesearchAction extends SearchAction $this->element('p', 'error', _('No results')); } - common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, + $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE, $page, 'noticesearch', array('q' => $q)); } - function show_header($arr) + /** + * Show header + * + * @param array $arr array containing the query + * + * @return void + */ + + function extraHead() { - if ($arr) { - $q = $arr[0]; - } + $q = $this->trimmed('q'); if ($q) { $this->element('link', array('rel' => 'alternate', 'href' => common_local_url('noticesearchrss', @@ -90,9 +128,17 @@ class NoticesearchAction extends SearchAction } } - # XXX: refactor and combine with StreamAction::show_notice() - - function show_notice($notice, $terms) + /** + * Show notice + * + * @param class $notice notice + * @param array $terms terms to highlight + * + * @return void + * + * @todo refactor and combine with StreamAction::showNotice() + */ + function showNotice($notice, $terms) { $profile = $notice->getProfile(); if (!$profile) { @@ -100,7 +146,7 @@ class NoticesearchAction extends SearchAction $this->serverError(_('Notice without matching profile')); return; } - # XXX: RDFa + // XXX: RDFa $this->elementStart('li', array('class' => 'notice_single', 'id' => 'notice-' . $notice->id)); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); @@ -116,14 +162,14 @@ class NoticesearchAction extends SearchAction $this->element('a', array('href' => $profile->profileurl, 'class' => 'nickname'), $profile->nickname); - # FIXME: URL, image, video, audio + // FIXME: URL, image, video, audio $this->elementStart('p', array('class' => 'content')); if ($notice->rendered) { $this->raw($this->highlight($notice->rendered, $terms)); } else { - # XXX: may be some uncooked notices in the DB, - # we cook them right now. This should probably disappear in future - # versions (>> 0.4.x) + // XXX: may be some uncooked notices in the DB, + // we cook them right now. This should probably disappear in future + // versions (>> 0.4.x) $this->raw($this->highlight(common_render_content($notice->content, $notice), $terms)); } $this->elementEnd('p'); @@ -155,17 +201,26 @@ class NoticesearchAction extends SearchAction $this->elementEnd('li'); } + /** + * Highlist query terms + * + * @param string $text notice text + * @param array $terms terms to highlight + * + * @return void + */ function highlight($text, $terms) { /* Highligh serach terms */ - $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i'; - $result = preg_replace($pattern, '\\1', $text); + $pattern = '/('.implode('|', array_map('htmlspecialchars', $terms)).')/i'; + $result = preg_replace($pattern, '\\1', $text); /* Remove highlighting from inside links, loop incase multiple highlights in links */ - $pattern = '/(href="[^"]*)('.implode('|',array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU'; + $pattern = '/(href="[^"]*)('.implode('|', array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU'; do { $result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count); } while ($count); return $result; } } + diff --git a/actions/tagother.php b/actions/tagother.php index 5daf612fb5..9a63fc4382 100644 --- a/actions/tagother.php +++ b/actions/tagother.php @@ -73,48 +73,84 @@ class TagotherAction extends Action function showContent() { - $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + $this->elementStart('div', 'entity_profile vcard author'); + $this->element('h2', null, _('User profile')); + $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + $this->elementStart('dl', 'entity_depiction'); + $this->element('dt', null, _('Photo')); + $this->elementStart('dd'); $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), - 'class' => 'avatar stream', + 'class' => 'photo avatar', 'width' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE, 'alt' => ($this->profile->fullname) ? $this->profile->fullname : $this->profile->nickname)); + $this->elementEnd('dd'); + $this->elementEnd('dl'); + + $this->elementStart('dl', 'entity_nickname'); + $this->element('dt', null, _('Nickname')); + $this->elementStart('dd'); $this->element('a', array('href' => $this->profile->profileurl, - 'class' => 'external profile nickname'), + 'class' => 'nickname'), $this->profile->nickname); + $this->elementEnd('dd'); + $this->elementEnd('dl'); if ($this->profile->fullname) { - $this->elementStart('div', 'fullname'); - if ($this->profile->homepage) { - $this->element('a', array('href' => $this->profile->homepage), - $this->profile->fullname); - } else { - $this->text($this->profile->fullname); - } - $this->elementEnd('div'); + $this->elementStart('dl', 'entity_fn'); + $this->element('dt', null, _('Full name')); + $this->elementStart('dd'); + $this->element('span', 'fn', $this->profile->fullname); + $this->elementEnd('dd'); + $this->elementEnd('dl'); } if ($this->profile->location) { - $this->element('div', 'location', $this->profile->location); + $this->elementStart('dl', 'entity_location'); + $this->element('dt', null, _('Location')); + $this->element('dd', 'location', $this->profile->location); + $this->elementEnd('dl'); + } + if ($this->profile->homepage) { + $this->elementStart('dl', 'entity_url'); + $this->element('dt', null, _('URL')); + $this->elementStart('dd'); + $this->element('a', array('href' => $this->profile->homepage, + 'rel' => 'me', 'class' => 'url'), + $this->profile->homepage); + $this->elementEnd('dd'); + $this->elementEnd('dl'); } if ($this->profile->bio) { - $this->element('div', 'bio', $this->profile->bio); + $this->elementStart('dl', 'entity_note'); + $this->element('dt', null, _('Note')); + $this->element('dd', 'note', $this->profile->bio); + $this->elementEnd('dl'); } + $this->elementEnd('div'); $this->elementStart('form', array('method' => 'post', - 'id' => 'tag_user', + 'id' => 'form_tag_user', + 'class' => 'form_settings', 'name' => 'tagother', 'action' => $this->selfUrl())); + $this->elementStart('fieldset'); + $this->element('legend', null, _('Tag user')); $this->hidden('token', common_session_token()); $this->hidden('id', $this->profile->id); + + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); $this->input('tags', _('Tags'), ($this->arg('tags')) ? $this->arg('tags') : implode(' ', Profile_tag::getTags($user->id, $this->profile->id)), _('Tags for this user (letters, numbers, -, ., and _), comma- or space- separated')); - + $this->elementEnd('li'); + $this->elementEnd('ul'); $this->submit('save', _('Save')); + $this->elementEnd('fieldset'); $this->elementEnd('form'); } @@ -166,7 +202,7 @@ class TagotherAction extends Action $action = $user->isSubscribed($this->profile) ? 'subscriptions' : 'subscribers'; if ($this->boolean('ajax')) { - common_start_html('text/xml'); + $this->startHTML('text/xml'); $this->elementStart('head'); $this->element('title', null, _('Tags')); $this->elementEnd('head'); diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 54a5b88332..d829b71e47 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -41,6 +41,7 @@ font-size:1.3em; text-transform:uppercase; } form { +clear:both; } input, textarea, select, option { padding:4px; @@ -143,7 +144,8 @@ font-weight:bold; #form_password legend, #form_settings_avatar legend, #newgroup legend, -#editgroup legend { +#editgroup legend, +#form_tag_user legend { display:none; } @@ -347,6 +349,7 @@ margin-bottom:1em; #content { width:644px; +width:46em; padding:18px; float:left; border-radius:7px; @@ -364,6 +367,7 @@ float;left; #aside_primary { width:300px; +width:21.429em; float:left; margin-left:2px; padding:18px 4px 18px 18px; @@ -705,6 +709,7 @@ margin-right:11px; + /* NOTICE */ .notice, .profile { @@ -713,8 +718,6 @@ padding-top:11px; padding-bottom:11px; clear:both; float:left; -width:644px; -width:96.699%; width:100%; border-top-width:1px; border-top-style:dashed; @@ -734,6 +737,7 @@ border-radius:4px; #notices_primary { float:left; width:644px; +width:46em; border-radius:7px; -moz-border-radius:7px; -webkit-border-radius:7px;