]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/util.php
Update settingsaction.php to new framework
[quix0rs-gnu-social.git] / lib / util.php
index f0387ebe5a5d66ef3232dc4904115dc57c26eb1e..9ca817eab304478eece29acce9c5b6c5985a69c5 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* XXX: break up into separate modules (HTTP, HTML, user, files) */
+/* XXX: break up into separate modules (HTTP, user, files) */
 
 // Show a server error
 
-function common_server_error($msg, $code=500) {
+function common_server_error($msg, $code=500)
+{
     static $status = array(500 => 'Internal Server Error',
                            501 => 'Not Implemented',
                            502 => 'Bad Gateway',
@@ -44,7 +45,8 @@ function common_server_error($msg, $code=500) {
 }
 
 // Show a user error
-function common_user_error($msg, $code=400) {
+function common_user_error($msg, $code=400)
+{
     static $status = array(400 => 'Bad Request',
                            401 => 'Unauthorized',
                            402 => 'Payment Required',
@@ -77,61 +79,8 @@ function common_user_error($msg, $code=400) {
     common_show_footer();
 }
 
-$xw = null;
-
-// Start an HTML element
-function common_element_start($tag, $attrs=null) {
-    global $xw;
-    $xw->startElement($tag);
-    if (is_array($attrs)) {
-        foreach ($attrs as $name => $value) {
-            $xw->writeAttribute($name, $value);
-        }
-    } else if (is_string($attrs)) {
-        $xw->writeAttribute('class', $attrs);
-    }
-}
-
-function common_element_end($tag) {
-    static $empty_tag = array('base', 'meta', 'link', 'hr',
-                              'br', 'param', 'img', 'area',
-                              'input', 'col');
-    global $xw;
-    // XXX: check namespace
-    if (in_array($tag, $empty_tag)) {
-        $xw->endElement();
-    } else {
-        $xw->fullEndElement();
-    }
-}
-
-function common_element($tag, $attrs=null, $content=null) {
-    common_element_start($tag, $attrs);
-    global $xw;
-    if (!is_null($content)) {
-        $xw->text($content);
-    }
-    common_element_end($tag);
-}
-
-function common_start_xml($doc=null, $public=null, $system=null, $indent=true) {
-    global $xw;
-    $xw = new XMLWriter();
-    $xw->openURI('php://output');
-    $xw->setIndent($indent);
-    $xw->startDocument('1.0', 'UTF-8');
-    if ($doc) {
-        $xw->writeDTD($doc, $public, $system);
-    }
-}
-
-function common_end_xml() {
-    global $xw;
-    $xw->endDocument();
-    $xw->flush();
-}
-
-function common_init_locale($language=null) {
+function common_init_locale($language=null)
+{
     if(!$language) {
         $language = common_language();
     }
@@ -144,7 +93,8 @@ function common_init_locale($language=null) {
                      $language);
 }
 
-function common_init_language() {
+function common_init_language()
+{
     mb_internal_encoding('UTF-8');
     $language = common_language();
     // So we don't have to make people install the gettext locales
@@ -158,333 +108,8 @@ function common_init_language() {
     }
 }
 
-define('PAGE_TYPE_PREFS', 'text/html,application/xhtml+xml,application/xml;q=0.3,text/xml;q=0.2');
-
-function common_show_header($pagetitle, $callable=null, $data=null, $headercall=null) {
-
-    global $config, $xw;
-    global $action; /* XXX: kind of cheating here. */
-
-    common_start_html();
-
-    common_element_start('head');
-    common_element('title', null,
-                   $pagetitle . " - " . $config['site']['name']);
-    common_element('link', array('rel' => 'stylesheet',
-                                 'type' => 'text/css',
-                                 'href' => theme_path('display.css') . '?version=' . LACONICA_VERSION,
-                                 'media' => 'screen, projection, tv'));
-    foreach (array(6,7) as $ver) {
-        if (file_exists(theme_file('ie'.$ver.'.css'))) {
-            // Yes, IE people should be put in jail.
-            $xw->writeComment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
-                              'href="'.theme_path('ie'.$ver.'.css').'?version='.LACONICA_VERSION.'" /><![endif]');
-        }
-    }
-
-    common_element('script', array('type' => 'text/javascript',
-                                   'src' => common_path('js/jquery.min.js')),
-                   ' ');
-    common_element('script', array('type' => 'text/javascript',
-                                   'src' => common_path('js/jquery.form.js')),
-                   ' ');
-    common_element('script', array('type' => 'text/javascript',
-                                   'src' => common_path('js/xbImportNode.js')),
-                   ' ');
-    common_element('script', array('type' => 'text/javascript',
-                                   'src' => common_path('js/util.js?version='.LACONICA_VERSION)),
-                   ' ');
-    common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml',
-                                 'href' =>  common_local_url('opensearch', array('type' => 'people')),
-                                 'title' => common_config('site', 'name').' People Search'));
-
-    common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml',
-                                 'href' =>  common_local_url('opensearch', array('type' => 'notice')),
-                                 'title' => common_config('site', 'name').' Notice Search'));
-
-    if ($callable) {
-        if ($data) {
-            call_user_func($callable, $data);
-        } else {
-            call_user_func($callable);
-        }
-    }
-    common_element_end('head');
-    common_element_start('body', $action);
-    common_element_start('div', array('id' => 'wrap'));
-    common_element_start('div', array('id' => 'header'));
-    common_nav_menu();
-    if ((isset($config['site']['logo']) && is_string($config['site']['logo']) && (strlen($config['site']['logo']) > 0))
-        || file_exists(theme_file('logo.png')))
-    {
-        common_element_start('a', array('href' => common_local_url('public')));
-        common_element('img', array('src' => isset($config['site']['logo']) ?
-                                    ($config['site']['logo']) : theme_path('logo.png'),
-                                    'alt' => $config['site']['name'],
-                                    'id' => 'logo'));
-        common_element_end('a');
-    } else {
-        common_element_start('p', array('id' => 'branding'));
-        common_element('a', array('href' => common_local_url('public')),
-                       $config['site']['name']);
-        common_element_end('p');
-    }
-
-    common_element('h1', 'pagetitle', $pagetitle);
-
-    if ($headercall) {
-        if ($data) {
-            call_user_func($headercall, $data);
-        } else {
-            call_user_func($headercall);
-        }
-    }
-    common_element_end('div');
-    common_element_start('div', array('id' => 'content'));
-}
-
-function common_start_html($type=null, $indent=true) {
-
-    if (!$type) {
-        $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null;
-
-        // XXX: allow content negotiation for RDF, RSS, or XRDS
-
-        $type = common_negotiate_type(common_accept_to_prefs($httpaccept),
-                                      common_accept_to_prefs(PAGE_TYPE_PREFS));
-
-        if (!$type) {
-            common_user_error(_('This page is not available in a media type you accept'), 406);
-            exit(0);
-        }
-    }
-
-    header('Content-Type: '.$type);
-
-    common_start_xml('html',
-                     '-//W3C//DTD XHTML 1.0 Strict//EN',
-                     'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd', $indent);
-
-    // FIXME: correct language for interface
-
-    $language = common_language();
-
-    common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml',
-                                       'xml:lang' => $language,
-                                       'lang' => $language));
-}
-
-function common_show_footer() {
-    global $xw, $config;
-    common_element_end('div'); // content div
-    common_foot_menu();
-    common_element_start('div', array('id' => 'footer'));
-    common_element_start('div', 'laconica');
-    if (common_config('site', 'broughtby')) {
-        $instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%). ');
-    } else {
-        $instr = _('**%%site.name%%** is a microblogging service. ');
-    }
-    $instr .= sprintf(_('It runs the [Laconica](http://laconi.ca/) microblogging software, version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), LACONICA_VERSION);
-    $output = common_markup_to_html($instr);
-    common_raw($output);
-    common_element_end('div');
-    common_element('img', array('id' => 'cc',
-                                'src' => $config['license']['image'],
-                                'alt' => $config['license']['title']));
-    common_element_start('p');
-    common_text(_('Unless otherwise specified, contents of this site are copyright by the contributors and available under the '));
-    common_element('a', array('class' => 'license',
-                              'rel' => 'license',
-                              'href' => $config['license']['url']),
-                   $config['license']['title']);
-    common_text(_('. Contributors should be attributed by full name or nickname.'));
-    common_element_end('p');
-    common_element_end('div');
-    common_element_end('div');
-    common_element_end('body');
-    common_element_end('html');
-    common_end_xml();
-}
-
-function common_text($txt) {
-    global $xw;
-    $xw->text($txt);
-}
-
-function common_raw($xml) {
-    global $xw;
-    $xw->writeRaw($xml);
-}
-
-function common_nav_menu() {
-    $user = common_current_user();
-    common_element_start('ul', array('id' => 'nav'));
-    if ($user) {
-        common_menu_item(common_local_url('all', array('nickname' => $user->nickname)),
-                         _('Home'));
-    }
-    common_menu_item(common_local_url('peoplesearch'), _('Search'));
-    if ($user) {
-        common_menu_item(common_local_url('profilesettings'),
-                         _('Settings'));
-        common_menu_item(common_local_url('invite'),
-                         _('Invite'));
-        common_menu_item(common_local_url('logout'),
-                         _('Logout'));
-    } else {
-        common_menu_item(common_local_url('login'), _('Login'));
-        if (!common_config('site', 'closed')) {
-            common_menu_item(common_local_url('register'), _('Register'));
-        }
-        common_menu_item(common_local_url('openidlogin'), _('OpenID'));
-    }
-    common_menu_item(common_local_url('doc', array('title' => 'help')),
-                     _('Help'));
-    common_element_end('ul');
-}
-
-function common_foot_menu() {
-    common_element_start('ul', array('id' => 'nav_sub'));
-    common_menu_item(common_local_url('doc', array('title' => 'help')),
-                     _('Help'));
-    common_menu_item(common_local_url('doc', array('title' => 'about')),
-                     _('About'));
-    common_menu_item(common_local_url('doc', array('title' => 'faq')),
-                     _('FAQ'));
-    common_menu_item(common_local_url('doc', array('title' => 'privacy')),
-                     _('Privacy'));
-    common_menu_item(common_local_url('doc', array('title' => 'source')),
-                     _('Source'));
-    common_menu_item(common_local_url('doc', array('title' => 'contact')),
-                     _('Contact'));
-    common_element_end('ul');
-}
-
-function common_menu_item($url, $text, $title=null, $is_selected=false) {
-    $lattrs = array();
-    if ($is_selected) {
-        $lattrs['class'] = 'current';
-    }
-    common_element_start('li', $lattrs);
-    $attrs['href'] = $url;
-    if ($title) {
-        $attrs['title'] = $title;
-    }
-    common_element('a', $attrs, $text);
-    common_element_end('li');
-}
-
-function common_input($id, $label, $value=null,$instructions=null) {
-    common_element_start('p');
-    common_element('label', array('for' => $id), $label);
-    $attrs = array('name' => $id,
-                   'type' => 'text',
-                   'class' => 'input_text',
-                   'id' => $id);
-    if ($value) {
-        $attrs['value'] = htmlspecialchars($value);
-    }
-    common_element('input', $attrs);
-    if ($instructions) {
-        common_element('span', 'input_instructions', $instructions);
-    }
-    common_element_end('p');
-}
-
-function common_checkbox($id, $label, $checked=false, $instructions=null, $value='true', $disabled=false)
-{
-    common_element_start('p');
-    $attrs = array('name' => $id,
-                   'type' => 'checkbox',
-                   'class' => 'checkbox',
-                   'id' => $id);
-    if ($value) {
-        $attrs['value'] = htmlspecialchars($value);
-    }
-    if ($checked) {
-        $attrs['checked'] = 'checked';
-    }
-    if ($disabled) {
-        $attrs['disabled'] = 'true';
-    }
-    common_element('input', $attrs);
-    common_text(' ');
-    common_element('label', array('class' => 'checkbox_label', 'for' => $id), $label);
-    common_text(' ');
-    if ($instructions) {
-        common_element('span', 'input_instructions', $instructions);
-    }
-    common_element_end('p');
-}
-
-function common_dropdown($id, $label, $content, $instructions=null, $blank_select=FALSE, $selected=null) {
-    common_element_start('p');
-    common_element('label', array('for' => $id), $label);
-    common_element_start('select', array('id' => $id, 'name' => $id));
-    if ($blank_select) {
-        common_element('option', array('value' => ''));
-    }
-    foreach ($content as $value => $option) {
-        if ($value == $selected) {
-            common_element('option', array('value' => $value, 'selected' => $value), $option);
-        } else {
-            common_element('option', array('value' => $value), $option);
-        }
-    }
-    common_element_end('select');
-    if ($instructions) {
-        common_element('span', 'input_instructions', $instructions);
-    }
-    common_element_end('p');
-}
-function common_hidden($id, $value) {
-    common_element('input', array('name' => $id,
-                                  'type' => 'hidden',
-                                  'id' => $id,
-                                  'value' => $value));
-}
-
-function common_password($id, $label, $instructions=null) {
-    common_element_start('p');
-    common_element('label', array('for' => $id), $label);
-    $attrs = array('name' => $id,
-                   'type' => 'password',
-                   'class' => 'password',
-                   'id' => $id);
-    common_element('input', $attrs);
-    if ($instructions) {
-        common_element('span', 'input_instructions', $instructions);
-    }
-    common_element_end('p');
-}
-
-function common_submit($id, $label, $cls='submit') {
-    global $xw;
-    common_element_start('p');
-    common_element('input', array('type' => 'submit',
-                                  'id' => $id,
-                                  'name' => $id,
-                                  'class' => $cls,
-                                  'value' => $label));
-    common_element_end('p');
-}
-
-function common_textarea($id, $label, $content=null, $instructions=null) {
-    common_element_start('p');
-    common_element('label', array('for' => $id), $label);
-    common_element('textarea', array('rows' => 3,
-                                     'cols' => 40,
-                                     'name' => $id,
-                                     'id' => $id),
-                   ($content) ? $content : '');
-    if ($instructions) {
-        common_element('span', 'input_instructions', $instructions);
-    }
-    common_element_end('p');
-}
-
-function common_timezone() {
+function common_timezone()
+{
     if (common_logged_in()) {
         $user = common_current_user();
         if ($user->timezone) {
@@ -496,7 +121,8 @@ function common_timezone() {
     return $config['site']['timezone'];
 }
 
-function common_language() {
+function common_language()
+{
 
     // If there is a user logged in and they've set a language preference
     // then return that one...
@@ -521,12 +147,14 @@ function common_language() {
 }
 // salted, hashed passwords are stored in the DB
 
-function common_munge_password($password, $id) {
+function common_munge_password($password, $id)
+{
     return md5($password . $id);
 }
 
 // check if a username exists and has matching password
-function common_check_user($nickname, $password) {
+function common_check_user($nickname, $password)
+{
     // NEVER allow blank passwords, even if they match the DB
     if (mb_strlen($password) == 0) {
         return false;
@@ -545,15 +173,18 @@ function common_check_user($nickname, $password) {
 }
 
 // is the current user logged in?
-function common_logged_in() {
+function common_logged_in()
+{
     return (!is_null(common_current_user()));
 }
 
-function common_have_session() {
+function common_have_session()
+{
     return (0 != strcmp(session_id(), ''));
 }
 
-function common_ensure_session() {
+function common_ensure_session()
+{
     if (!common_have_session()) {
         @session_start();
     }
@@ -568,7 +199,8 @@ function common_ensure_session() {
 
 $_cur = false;
 
-function common_set_user($user) {
+function common_set_user($user)
+{
 
     global $_cur;
 
@@ -592,7 +224,8 @@ function common_set_user($user) {
     return false;
 }
 
-function common_set_cookie($key, $value, $expiration=0) {
+function common_set_cookie($key, $value, $expiration=0)
+{
     $path = common_config('site', 'path');
     $server = common_config('site', 'server');
 
@@ -611,7 +244,8 @@ function common_set_cookie($key, $value, $expiration=0) {
 define('REMEMBERME', 'rememberme');
 define('REMEMBERME_EXPIRY', 30 * 24 * 60 * 60); // 30 days
 
-function common_rememberme($user=null) {
+function common_rememberme($user=null)
+{
     if (!$user) {
         $user = common_current_user();
         if (!$user) {
@@ -650,7 +284,8 @@ function common_rememberme($user=null) {
     return true;
 }
 
-function common_remembered_user() {
+function common_remembered_user()
+{
 
     $user = null;
 
@@ -715,12 +350,14 @@ function common_remembered_user() {
 
 // must be called with a valid user!
 
-function common_forgetme() {
+function common_forgetme()
+{
     common_set_cookie(REMEMBERME, '', 0);
 }
 
 // who is the current user?
-function common_current_user() {
+function common_current_user()
+{
     global $_cur;
 
     if ($_cur === false) {
@@ -752,23 +389,27 @@ function common_current_user() {
 // cookie-stealing. So, we don't let them do certain things. New reg,
 // OpenID, and password logins _are_ real.
 
-function common_real_login($real=true) {
+function common_real_login($real=true)
+{
     common_ensure_session();
     $_SESSION['real_login'] = $real;
 }
 
-function common_is_real_login() {
+function common_is_real_login()
+{
     return common_logged_in() && $_SESSION['real_login'];
 }
 
 // get canonical version of nickname for comparison
-function common_canonical_nickname($nickname) {
+function common_canonical_nickname($nickname)
+{
     // XXX: UTF-8 canonicalization (like combining chars)
     return strtolower($nickname);
 }
 
 // get canonical version of email for comparison
-function common_canonical_email($email) {
+function common_canonical_email($email)
+{
     // XXX: canonicalize UTF-8
     // XXX: lcase the domain part
     return $email;
@@ -776,7 +417,8 @@ function common_canonical_email($email) {
 
 define('URL_REGEX', '^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))');
 
-function common_render_content($text, $notice) {
+function common_render_content($text, $notice)
+{
     $r = common_render_text($text);
     $id = $notice->profile_id;
     $r = preg_replace('/(^|\s+)@([A-Za-z0-9]{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r);
@@ -785,7 +427,8 @@ function common_render_content($text, $notice) {
     return $r;
 }
 
-function common_render_text($text) {
+function common_render_text($text)
+{
     $r = htmlspecialchars($text);
 
     $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
@@ -795,7 +438,8 @@ function common_render_text($text) {
     return $r;
 }
 
-function common_render_uri_thingy($matches) {
+function common_render_uri_thingy($matches)
+{
     $uri = $matches[0];
     $trailer = '';
 
@@ -829,20 +473,23 @@ function common_render_uri_thingy($matches) {
     return '<a href="' . $uri . '"' . $title . ' class="extlink">' . $uri . '</a>' . $trailer;
 }
 
-function common_longurl($short_url)  {
+function common_longurl($short_url)
+{
     $long_url = common_shorten_link($short_url, true);
     if ($long_url === $short_url) return false;
     return $long_url;
 }
 
-function common_longurl2($uri)  {
+function common_longurl2($uri)
+{
     $uri_e = urlencode($uri);
     $longurl = unserialize(file_get_contents("http://api.longurl.org/v1/expand?format=php&url=$uri_e"));
     if (empty($longurl['long_url']) || $uri === $longurl['long_url']) return false;
     return stripslashes($longurl['long_url']);
 }
 
-function common_shorten_links($text) {
+function common_shorten_links($text)
+{
     if (mb_strlen($text) <= 140) return $text;
     static $cache = array();
     if (isset($cache[$text])) return $cache[$text];
@@ -850,7 +497,8 @@ function common_shorten_links($text) {
     return $cache[$text] = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text);
 }
 
-function common_shorten_link($url, $reverse = false) {
+function common_shorten_link($url, $reverse = false)
+{
     static $url_cache = array();
     if ($reverse) return isset($url_cache[$url]) ? $url_cache[$url] : $url;
 
@@ -911,38 +559,44 @@ function common_shorten_link($url, $reverse = false) {
     return $url;
 }
 
-function common_xml_safe_str($str) {
+function common_xml_safe_str($str)
+{
     $xmlStr = htmlentities(iconv('UTF-8', 'UTF-8//IGNORE', $str), ENT_NOQUOTES, 'UTF-8');
 
     // Replace control, formatting, and surrogate characters with '*', ala Twitter
     return preg_replace('/[\p{Cc}\p{Cf}\p{Cs}]/u', '*', $str);
 }
 
-function common_tag_link($tag) {
+function common_tag_link($tag)
+{
     $canonical = common_canonical_tag($tag);
     $url = common_local_url('tag', array('tag' => $canonical));
-    return '<a href="' . htmlspecialchars($url) . '" rel="tag" class="hashlink">' . htmlspecialchars($tag) . '</a>';
+    return '<span class="tag"><a href="' . htmlspecialchars($url) . '" rel="tag">' . htmlspecialchars($tag) . '</a></span>';
 }
 
-function common_canonical_tag($tag) {
+function common_canonical_tag($tag)
+{
     return strtolower(str_replace(array('-', '_', '.'), '', $tag));
 }
 
-function common_valid_profile_tag($str) {
+function common_valid_profile_tag($str)
+{
     return preg_match('/^[A-Za-z0-9_\-\.]{1,64}$/', $str);
 }
 
-function common_at_link($sender_id, $nickname) {
+function common_at_link($sender_id, $nickname)
+{
     $sender = Profile::staticGet($sender_id);
     $recipient = common_relative_profile($sender, common_canonical_nickname($nickname));
     if ($recipient) {
-        return '<a href="'.htmlspecialchars($recipient->profileurl).'" class="atlink">'.$nickname.'</a>';
+        return '<span class="vcard"><a href="'.htmlspecialchars($recipient->profileurl).'" class="url"><span class="fn nickname">'.$nickname.'</span></a></span>';
     } else {
         return $nickname;
     }
 }
 
-function common_at_hash_link($sender_id, $tag) {
+function common_at_hash_link($sender_id, $tag)
+{
     $user = User::staticGet($sender_id);
     if (!$user) {
         return $tag;
@@ -952,19 +606,20 @@ function common_at_hash_link($sender_id, $tag) {
         $url = common_local_url('subscriptions',
                                 array('nickname' => $user->nickname,
                                       'tag' => $tag));
-        return '<a href="'.htmlspecialchars($url).'" class="atlink">'.$tag.'</a>';
+        return '<span class="tag"><a href="'.htmlspecialchars($url).'" rel="tag">'.$tag.'</a></span>';
     } else {
         return $tag;
     }
 }
 
-function common_relative_profile($sender, $nickname, $dt=null) {
+function common_relative_profile($sender, $nickname, $dt=null)
+{
     // Try to find profiles this profile is subscribed to that have this nickname
     $recipient = new Profile();
     // XXX: use a join instead of a subquery
     $recipient->whereAdd('EXISTS (SELECT subscribed from subscription where subscriber = '.$sender->id.' and subscribed = id)', 'AND');
     $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND');
-    if ($recipient->find(TRUE)) {
+    if ($recipient->find(true)) {
         // XXX: should probably differentiate between profiles with
         // the same name by date of most recent update
         return $recipient;
@@ -974,7 +629,7 @@ function common_relative_profile($sender, $nickname, $dt=null) {
     // XXX: use a join instead of a subquery
     $recipient->whereAdd('EXISTS (SELECT subscriber from subscription where subscribed = '.$sender->id.' and subscriber = id)', 'AND');
     $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND');
-    if ($recipient->find(TRUE)) {
+    if ($recipient->find(true)) {
         // XXX: should probably differentiate between profiles with
         // the same name by date of most recent update
         return $recipient;
@@ -995,7 +650,8 @@ function common_relative_profile($sender, $nickname, $dt=null) {
 
 // where should the avatar go for this user?
 
-function common_avatar_filename($id, $extension, $size=null, $extra=null) {
+function common_avatar_filename($id, $extension, $size=null, $extra=null)
+{
     global $config;
 
     if ($size) {
@@ -1005,16 +661,19 @@ function common_avatar_filename($id, $extension, $size=null, $extra=null) {
     }
 }
 
-function common_avatar_path($filename) {
+function common_avatar_path($filename)
+{
     global $config;
     return INSTALLDIR . '/avatar/' . $filename;
 }
 
-function common_avatar_url($filename) {
+function common_avatar_url($filename)
+{
     return common_path('avatar/'.$filename);
 }
 
-function common_avatar_display_url($avatar) {
+function common_avatar_display_url($avatar)
+{
     $server = common_config('avatar', 'server');
     if ($server) {
         return 'http://'.$server.'/'.$avatar->filename;
@@ -1023,14 +682,16 @@ function common_avatar_display_url($avatar) {
     }
 }
 
-function common_default_avatar($size) {
+function common_default_avatar($size)
+{
     static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
                               AVATAR_STREAM_SIZE => 'stream',
                               AVATAR_MINI_SIZE => 'mini');
     return theme_path('default-avatar-'.$sizenames[$size].'.png');
 }
 
-function common_local_url($action, $args=null, $fragment=null) {
+function common_local_url($action, $args=null, $fragment=null)
+{
     $url = null;
     if (common_config('site','fancy')) {
         $url = common_fancy_url($action, $args);
@@ -1043,7 +704,8 @@ function common_local_url($action, $args=null, $fragment=null) {
     return $url;
 }
 
-function common_fancy_url($action, $args=null) {
+function common_fancy_url($action, $args=null)
+{
     switch (strtolower($action)) {
      case 'public':
         if ($args && isset($args['page'])) {
@@ -1256,7 +918,8 @@ function common_fancy_url($action, $args=null) {
     }
 }
 
-function common_simple_url($action, $args=null) {
+function common_simple_url($action, $args=null)
+{
     global $config;
     /* XXX: pretty URLs */
     $extra = '';
@@ -1268,13 +931,15 @@ function common_simple_url($action, $args=null) {
     return common_path("index.php?action=${action}${extra}");
 }
 
-function common_path($relative) {
+function common_path($relative)
+{
     global $config;
     $pathpart = ($config['site']['path']) ? $config['site']['path']."/" : '';
     return "http://".$config['site']['server'].'/'.$pathpart.$relative;
 }
 
-function common_date_string($dt) {
+function common_date_string($dt)
+{
     // XXX: do some sexy date formatting
     // return date(DATE_RFC822, $dt);
     $t = strtotime($dt);
@@ -1308,7 +973,8 @@ function common_date_string($dt) {
     }
 }
 
-function common_exact_date($dt) {
+function common_exact_date($dt)
+{
     static $_utc;
     static $_siteTz;
 
@@ -1323,32 +989,37 @@ function common_exact_date($dt) {
     return $d->format(DATE_RFC850);
 }
 
-function common_date_w3dtf($dt) {
+function common_date_w3dtf($dt)
+{
     $dateStr = date('d F Y H:i:s', strtotime($dt));
     $d = new DateTime($dateStr, new DateTimeZone('UTC'));
     $d->setTimezone(new DateTimeZone(common_timezone()));
     return $d->format(DATE_W3C);
 }
 
-function common_date_rfc2822($dt) {
+function common_date_rfc2822($dt)
+{
     $dateStr = date('d F Y H:i:s', strtotime($dt));
     $d = new DateTime($dateStr, new DateTimeZone('UTC'));
     $d->setTimezone(new DateTimeZone(common_timezone()));
     return $d->format('r');
 }
 
-function common_date_iso8601($dt) {
+function common_date_iso8601($dt)
+{
     $dateStr = date('d F Y H:i:s', strtotime($dt));
     $d = new DateTime($dateStr, new DateTimeZone('UTC'));
     $d->setTimezone(new DateTimeZone(common_timezone()));
     return $d->format('c');
 }
 
-function common_sql_now() {
+function common_sql_now()
+{
     return strftime('%Y-%m-%d %H:%M:%S', time());
 }
 
-function common_redirect($url, $code=307) {
+function common_redirect($url, $code=307)
+{
     static $status = array(301 => "Moved Permanently",
                            302 => "Found",
                            303 => "See Other",
@@ -1364,7 +1035,8 @@ function common_redirect($url, $code=307) {
     exit;
 }
 
-function common_save_replies($notice) {
+function common_save_replies($notice)
+{
     // Alternative reply format
     $tname = false;
     if (preg_match('/^T ([A-Z0-9]{1,64}) /', $notice->content, $match)) {
@@ -1447,7 +1119,8 @@ function common_save_replies($notice) {
     }
 }
 
-function common_broadcast_notice($notice, $remote=false) {
+function common_broadcast_notice($notice, $remote=false)
+{
 
     // Check to see if notice should go to Twitter
     $flink = Foreign_link::getByUserID($notice->profile_id, 1); // 1 == Twitter
@@ -1474,7 +1147,8 @@ function common_broadcast_notice($notice, $remote=false) {
     }
 }
 
-function common_twitter_broadcast($notice, $flink) {
+function common_twitter_broadcast($notice, $flink)
+{
     global $config;
     $success = true;
     $fuser = $flink->getForeignUser();
@@ -1498,7 +1172,10 @@ function common_twitter_broadcast($notice, $flink) {
                      CURLOPT_FOLLOWLOCATION    => true,
                      CURLOPT_USERAGENT        => "Laconica",
                      CURLOPT_CONNECTTIMEOUT    => 120,  // XXX: Scary!!!! How long should this be?
-                     CURLOPT_TIMEOUT            => 120
+                     CURLOPT_TIMEOUT            => 120,
+
+                     # Twitter is strict about accepting invalid "Expect" headers
+                     CURLOPT_HTTPHEADER => array('Expect:')
                      );
 
     $ch = curl_init($uri);
@@ -1534,7 +1211,8 @@ function common_twitter_broadcast($notice, $flink) {
 
 // Stick the notice on the queue
 
-function common_enqueue_notice($notice) {
+function common_enqueue_notice($notice)
+{
     foreach (array('jabber', 'omb', 'sms', 'public') as $transport) {
         $qi = new Queue_item();
         $qi->notice_id = $notice->id;
@@ -1551,7 +1229,8 @@ function common_enqueue_notice($notice) {
     return $result;
 }
 
-function common_dequeue_notice($notice) {
+function common_dequeue_notice($notice)
+{
     $qi = Queue_item::staticGet($notice->id);
     if ($qi) {
         $result = $qi->delete();
@@ -1567,7 +1246,8 @@ function common_dequeue_notice($notice) {
     }
 }
 
-function common_real_broadcast($notice, $remote=false) {
+function common_real_broadcast($notice, $remote=false)
+{
     $success = true;
     if (!$remote) {
         // Make sure we have the OMB stuff
@@ -1601,7 +1281,8 @@ function common_real_broadcast($notice, $remote=false) {
     return $success;
 }
 
-function common_broadcast_profile($profile) {
+function common_broadcast_profile($profile)
+{
     // XXX: optionally use a queue system like http://code.google.com/p/microapps/wiki/NQDQ
     require_once(INSTALLDIR.'/lib/omb.php');
     omb_broadcast_profile($profile);
@@ -1609,52 +1290,23 @@ function common_broadcast_profile($profile) {
     return true;
 }
 
-function common_profile_url($nickname) {
+function common_profile_url($nickname)
+{
     return common_local_url('showstream', array('nickname' => $nickname));
 }
 
-// Don't call if nobody's logged in
-
-function common_notice_form($action=null, $content=null) {
-    $user = common_current_user();
-    assert(!is_null($user));
-    common_element_start('form', array('id' => 'status_form',
-                                       'method' => 'post',
-                                       'action' => common_local_url('newnotice')));
-    common_element_start('p');
-    common_element('label', array('for' => 'status_textarea',
-                                  'id' => 'status_label'),
-                   sprintf(_('What\'s up, %s?'), $user->nickname));
-    common_element('span', array('id' => 'counter', 'class' => 'counter'), '140');
-    common_element('textarea', array('id' => 'status_textarea',
-                                     'cols' => 60,
-                                     'rows' => 3,
-                                     'name' => 'status_textarea'),
-                   ($content) ? $content : '');
-    common_hidden('token', common_session_token());
-    if ($action) {
-        common_hidden('returnto', $action);
-    }
-    // set by JavaScript
-    common_hidden('inreplyto', 'false');
-    common_element('input', array('id' => 'status_submit',
-                                  'name' => 'status_submit',
-                                  'type' => 'submit',
-                                  'value' => _('Send')));
-    common_element_end('p');
-    common_element_end('form');
-}
-
 // Should make up a reasonable root URL
 
-function common_root_url() {
+function common_root_url()
+{
     return common_path('');
 }
 
 // returns $bytes bytes of random data as a hexadecimal string
 // "good" here is a goal and not a guarantee
 
-function common_good_rand($bytes) {
+function common_good_rand($bytes)
+{
     // XXX: use random.org...?
     if (file_exists('/dev/urandom')) {
         return common_urandom($bytes);
@@ -1663,7 +1315,8 @@ function common_good_rand($bytes) {
     }
 }
 
-function common_urandom($bytes) {
+function common_urandom($bytes)
+{
     $h = fopen('/dev/urandom', 'rb');
     // should not block
     $src = fread($h, $bytes);
@@ -1675,7 +1328,8 @@ function common_urandom($bytes) {
     return $enc;
 }
 
-function common_mtrand($bytes) {
+function common_mtrand($bytes)
+{
     $enc = '';
     for ($i = 0; $i < $bytes; $i++) {
         $enc .= sprintf("%02x", mt_rand(0, 255));
@@ -1683,21 +1337,25 @@ function common_mtrand($bytes) {
     return $enc;
 }
 
-function common_set_returnto($url) {
+function common_set_returnto($url)
+{
     common_ensure_session();
     $_SESSION['returnto'] = $url;
 }
 
-function common_get_returnto() {
+function common_get_returnto()
+{
     common_ensure_session();
     return $_SESSION['returnto'];
 }
 
-function common_timestamp() {
+function common_timestamp()
+{
     return date('YmdHis');
 }
 
-function common_ensure_syslog() {
+function common_ensure_syslog()
+{
     static $initialized = false;
     if (!$initialized) {
         global $config;
@@ -1706,7 +1364,8 @@ function common_ensure_syslog() {
     }
 }
 
-function common_log($priority, $msg, $filename=null) {
+function common_log($priority, $msg, $filename=null)
+{
     $logfile = common_config('site', 'logfile');
     if ($logfile) {
         $log = fopen($logfile, "a");
@@ -1723,7 +1382,8 @@ function common_log($priority, $msg, $filename=null) {
     }
 }
 
-function common_debug($msg, $filename=null) {
+function common_debug($msg, $filename=null)
+{
     if ($filename) {
         common_log(LOG_DEBUG, basename($filename).' - '.$msg);
     } else {
@@ -1731,13 +1391,15 @@ function common_debug($msg, $filename=null) {
     }
 }
 
-function common_log_db_error(&$object, $verb, $filename=null) {
+function common_log_db_error(&$object, $verb, $filename=null)
+{
     $objstr = common_log_objstring($object);
     $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
     common_log(LOG_ERR, $last_error->message . '(' . $verb . ' on ' . $objstr . ')', $filename);
 }
 
-function common_log_objstring(&$object) {
+function common_log_objstring(&$object)
+{
     if (is_null($object)) {
         return "null";
     }
@@ -1750,11 +1412,13 @@ function common_log_objstring(&$object) {
     return $objstring;
 }
 
-function common_valid_http_url($url) {
+function common_valid_http_url($url)
+{
     return Validate::uri($url, array('allowed_schemes' => array('http', 'https')));
 }
 
-function common_valid_tag($tag) {
+function common_valid_tag($tag)
+{
     if (preg_match('/^tag:(.*?),(\d{4}(-\d{2}(-\d{2})?)?):(.*)$/', $tag, $matches)) {
         return (Validate::email($matches[1]) ||
                 preg_match('/^([\w-\.]+)$/', $matches[1]));
@@ -1762,44 +1426,11 @@ function common_valid_tag($tag) {
     return false;
 }
 
-// Does a little before-after block for next/prev page
-
-function common_pagination($have_before, $have_after, $page, $action, $args=null) {
-
-    if ($have_before || $have_after) {
-        common_element_start('div', array('id' => 'pagination'));
-        common_element_start('ul', array('id' => 'nav_pagination'));
-    }
-
-    if ($have_before) {
-        $pargs = array('page' => $page-1);
-        $newargs = ($args) ? array_merge($args,$pargs) : $pargs;
-
-        common_element_start('li', 'before');
-        common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'prev'),
-                       _('« After'));
-        common_element_end('li');
-    }
-
-    if ($have_after) {
-        $pargs = array('page' => $page+1);
-        $newargs = ($args) ? array_merge($args,$pargs) : $pargs;
-        common_element_start('li', 'after');
-        common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'next'),
-                       _('Before »'));
-        common_element_end('li');
-    }
-
-    if ($have_before || $have_after) {
-        common_element_end('ul');
-        common_element_end('div');
-    }
-}
-
 /* Following functions are copied from MediaWiki GlobalFunctions.php
  * and written by Evan Prodromou. */
 
-function common_accept_to_prefs($accept, $def = '*/*') {
+function common_accept_to_prefs($accept, $def = '*/*')
+{
     // No arg means accept anything (per HTTP spec)
     if(!$accept) {
         return array($def => 1);
@@ -1823,7 +1454,8 @@ function common_accept_to_prefs($accept, $def = '*/*') {
     return $prefs;
 }
 
-function common_mime_type_match($type, $avail) {
+function common_mime_type_match($type, $avail)
+{
     if(array_key_exists($type, $avail)) {
         return $type;
     } else {
@@ -1838,7 +1470,8 @@ function common_mime_type_match($type, $avail) {
     }
 }
 
-function common_negotiate_type($cprefs, $sprefs) {
+function common_negotiate_type($cprefs, $sprefs)
+{
     $combine = array();
 
     foreach(array_keys($sprefs) as $type) {
@@ -1874,12 +1507,14 @@ function common_negotiate_type($cprefs, $sprefs) {
     return $besttype;
 }
 
-function common_config($main, $sub) {
+function common_config($main, $sub)
+{
     global $config;
     return isset($config[$main][$sub]) ? $config[$main][$sub] : false;
 }
 
-function common_copy_args($from) {
+function common_copy_args($from)
+{
     $to = array();
     $strip = get_magic_quotes_gpc();
     foreach ($from as $k => $v) {
@@ -1890,25 +1525,29 @@ function common_copy_args($from) {
 
 // Neutralise the evil effects of magic_quotes_gpc in the current request.
 // This is used before handing a request off to OAuthRequest::from_request.
-function common_remove_magic_from_request() {
+function common_remove_magic_from_request()
+{
     if(get_magic_quotes_gpc()) {
         $_POST=array_map('stripslashes',$_POST);
         $_GET=array_map('stripslashes',$_GET);
     }
 }
 
-function common_user_uri(&$user) {
+function common_user_uri(&$user)
+{
     return common_local_url('userbyid', array('id' => $user->id));
 }
 
-function common_notice_uri(&$notice) {
+function common_notice_uri(&$notice)
+{
     return common_local_url('shownotice',
                             array('notice' => $notice->id));
 }
 
 // 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits
 
-function common_confirmation_code($bits) {
+function common_confirmation_code($bits)
+{
     // 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits
     static $codechars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
     $chars = ceil($bits/5);
@@ -1925,14 +1564,16 @@ function common_confirmation_code($bits) {
 
 // convert markup to HTML
 
-function common_markup_to_html($c) {
+function common_markup_to_html($c)
+{
     $c = preg_replace('/%%action.(\w+)%%/e', "common_local_url('\\1')", $c);
     $c = preg_replace('/%%doc.(\w+)%%/e', "common_local_url('doc', array('title'=>'\\1'))", $c);
     $c = preg_replace('/%%(\w+).(\w+)%%/e', 'common_config(\'\\1\', \'\\2\')', $c);
     return Markdown($c);
 }
 
-function common_profile_avatar_url($profile, $size=AVATAR_PROFILE_SIZE) {
+function common_profile_avatar_url($profile, $size=AVATAR_PROFILE_SIZE)
+{
     $avatar = $profile->getAvatar($size);
     if ($avatar) {
         return common_avatar_display_url($avatar);
@@ -1941,7 +1582,8 @@ function common_profile_avatar_url($profile, $size=AVATAR_PROFILE_SIZE) {
     }
 }
 
-function common_profile_uri($profile) {
+function common_profile_uri($profile)
+{
     if (!$profile) {
         return null;
     }
@@ -1958,13 +1600,15 @@ function common_profile_uri($profile) {
     return null;
 }
 
-function common_canonical_sms($sms) {
+function common_canonical_sms($sms)
+{
     // strip non-digits
     preg_replace('/\D/', '', $sms);
     return $sms;
 }
 
-function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
+function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext)
+{
     switch ($errno) {
      case E_USER_ERROR:
         common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline)");
@@ -1985,7 +1629,8 @@ function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext)
     return true;
 }
 
-function common_session_token() {
+function common_session_token()
+{
     common_ensure_session();
     if (!array_key_exists('token', $_SESSION)) {
         $_SESSION['token'] = common_good_rand(64);
@@ -1993,107 +1638,14 @@ function common_session_token() {
     return $_SESSION['token'];
 }
 
-function common_disfavor_form($notice) {
-    common_element_start('form', array('id' => 'disfavor-' . $notice->id,
-                                       'method' => 'post',
-                                       'class' => 'disfavor',
-                                       'action' => common_local_url('disfavor')));
-
-    common_element('input', array('type' => 'hidden',
-                                  'name' => 'token-'. $notice->id,
-                                  'id' => 'token-'. $notice->id,
-                                  'class' => 'token',
-                                  'value' => common_session_token()));
-
-    common_element('input', array('type' => 'hidden',
-                                  'name' => 'notice',
-                                  'id' => 'notice-n'. $notice->id,
-                                  'class' => 'notice',
-                                  'value' => $notice->id));
-
-    common_element('input', array('type' => 'submit',
-                                  'id' => 'disfavor-submit-' . $notice->id,
-                                  'name' => 'disfavor-submit-' . $notice->id,
-                                  'class' => 'disfavor',
-                                  'value' => 'Disfavor favorite',
-                                  'title' => 'Remove this message from favorites'));
-    common_element_end('form');
-}
-
-function common_favor_form($notice) {
-    common_element_start('form', array('id' => 'favor-' . $notice->id,
-                                       'method' => 'post',
-                                       'class' => 'favor',
-                                       'action' => common_local_url('favor')));
-
-    common_element('input', array('type' => 'hidden',
-                                  'name' => 'token-'. $notice->id,
-                                  'id' => 'token-'. $notice->id,
-                                  'class' => 'token',
-                                  'value' => common_session_token()));
-
-    common_element('input', array('type' => 'hidden',
-                                  'name' => 'notice',
-                                  'id' => 'notice-n'. $notice->id,
-                                  'class' => 'notice',
-                                  'value' => $notice->id));
-
-    common_element('input', array('type' => 'submit',
-                                  'id' => 'favor-submit-' . $notice->id,
-                                  'name' => 'favor-submit-' . $notice->id,
-                                  'class' => 'favor',
-                                  'value' => 'Add to favorites',
-                                  'title' => 'Add this message to favorites'));
-    common_element_end('form');
-}
-
-function common_nudge_form($profile) {
-    common_element_start('form', array('id' => 'nudge', 'method' => 'post',
-                                       'action' => common_local_url('nudge', array('nickname' => $profile->nickname))));
-    common_hidden('token', common_session_token());
-    common_element('input', array('type' => 'submit',
-                                  'class' => 'submit',
-                                  'value' => _('Send a nudge')));
-    common_element_end('form');
-}
-function common_nudge_response() {
+function common_nudge_response()
+{
     common_element('p', array('id' => 'nudge_response'), _('Nudge sent!'));
 }
 
-function common_subscribe_form($profile) {
-    common_element_start('form', array('id' => 'subscribe-' . $profile->id,
-                                       'method' => 'post',
-                                       'class' => 'subscribe',
-                                       'action' => common_local_url('subscribe')));
-    common_hidden('token', common_session_token());
-    common_element('input', array('id' => 'subscribeto-' . $profile->id,
-                                  'name' => 'subscribeto',
-                                  'type' => 'hidden',
-                                  'value' => $profile->id));
-    common_element('input', array('type' => 'submit',
-                                  'class' => 'submit',
-                                  'value' => _('Subscribe')));
-    common_element_end('form');
-}
-
-function common_unsubscribe_form($profile) {
-    common_element_start('form', array('id' => 'unsubscribe-' . $profile->id,
-                                       'method' => 'post',
-                                       'class' => 'unsubscribe',
-                                       'action' => common_local_url('unsubscribe')));
-    common_hidden('token', common_session_token());
-    common_element('input', array('id' => 'unsubscribeto-' . $profile->id,
-                                  'name' => 'unsubscribeto',
-                                  'type' => 'hidden',
-                                  'value' => $profile->id));
-    common_element('input', array('type' => 'submit',
-                                  'class' => 'submit',
-                                  'value' => _('Unsubscribe')));
-    common_element_end('form');
-}
-
 // XXX: Refactor this code
-function common_profile_new_message_nudge ($cur, $profile) {
+function common_profile_new_message_nudge ($cur, $profile)
+{
     $user = User::staticGet('id', $profile->id);
 
     if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) {
@@ -2110,57 +1662,20 @@ function common_profile_new_message_nudge ($cur, $profile) {
     }
 }
 
-function common_cache_key($extra) {
+function common_cache_key($extra)
+{
     return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra;
 }
 
-function common_keyize($str) {
+function common_keyize($str)
+{
     $str = strtolower($str);
     $str = preg_replace('/\s/', '_', $str);
     return $str;
 }
 
-function common_message_form($content, $user, $to) {
-
-    common_element_start('form', array('id' => 'message_form',
-                                       'method' => 'post',
-                                       'action' => common_local_url('newmessage')));
-
-    $mutual_users = $user->mutuallySubscribedUsers();
-
-    $mutual = array();
-
-    while ($mutual_users->fetch()) {
-        if ($mutual_users->id != $user->id) {
-            $mutual[$mutual_users->id] = $mutual_users->nickname;
-        }
-    }
-
-    $mutual_users->free();
-    unset($mutual_users);
-
-    common_dropdown('to', _('To'), $mutual, null, FALSE, $to->id);
-
-    common_element_start('p');
-
-    common_element('textarea', array('id' => 'message_content',
-                                     'cols' => 60,
-                                     'rows' => 3,
-                                     'name' => 'content'),
-                   ($content) ? $content : '');
-
-    common_element('input', array('id' => 'message_send',
-                                  'name' => 'message_send',
-                                  'type' => 'submit',
-                                  'value' => _('Send')));
-
-    common_hidden('token', common_session_token());
-
-    common_element_end('p');
-    common_element_end('form');
-}
-
-function common_memcache() {
+function common_memcache()
+{
     static $cache = null;
     if (!common_config('memcached', 'enabled')) {
         return null;
@@ -2180,40 +1695,8 @@ function common_memcache() {
     }
 }
 
-function common_compatible_license($from, $to) {
+function common_compatible_license($from, $to)
+{
     // XXX: better compatibility check needed here!
     return ($from == $to);
 }
-
-/* These are almost identical, so we use a helper function */
-
-function common_block_form($profile, $args=null) {
-    common_blocking_form('block', _('Block'), $profile, $args);
-}
-
-function common_unblock_form($profile, $args=null) {
-    common_blocking_form('unblock', _('Unblock'), $profile, $args);
-}
-
-function common_blocking_form($type, $label, $profile, $args=null) {
-    common_element_start('form', array('id' => $type . '-' . $profile->id,
-                                       'method' => 'post',
-                                       'class' => $type,
-                                       'action' => common_local_url($type)));
-    common_hidden('token', common_session_token());
-    common_element('input', array('id' => $type . 'to-' . $profile->id,
-                                  'name' => $type . 'to',
-                                  'type' => 'hidden',
-                                  'value' => $profile->id));
-    common_element('input', array('type' => 'submit',
-                                  'class' => 'submit',
-                                  'name' => $type,
-                                  'value' => $label));
-    if ($args) {
-        foreach ($args as $k => $v) {
-            common_hidden('returnto-' . $k, $v);
-        }
-    }
-    common_element_end('form');
-    return;
-}