if (Event::handle('StartCheckPassword', array($nickname, $password, &$authenticatedUser))) {
if (common_is_email($nickname)) {
- $user = User::staticGet('email', common_canonical_email($nickname));
+ $user = User::getKV('email', common_canonical_email($nickname));
} else {
- $user = User::staticGet('nickname', common_canonical_nickname($nickname));
+ $user = User::getKV('nickname', Nickname::normalize($nickname));
}
if (!empty($user)) {
return true;
} else if (is_string($user)) {
$nickname = $user;
- $user = User::staticGet('nickname', $nickname);
+ $user = User::getKV('nickname', $nickname);
} else if (!($user instanceof User)) {
return false;
}
return null;
}
- $rm = Remember_me::staticGet($code);
+ $rm = Remember_me::getKV('code', $code);
if (!$rm) {
common_log(LOG_WARNING, 'No such remember code: ' . $code);
return null;
}
- $user = User::staticGet($rm->user_id);
+ $user = User::getKV('id', $rm->user_id);
if (!$user) {
common_log(LOG_WARNING, 'No such user for rememberme: ' . $rm->user_id);
common_ensure_session();
$id = isset($_SESSION['userid']) ? $_SESSION['userid'] : false;
if ($id) {
- $user = User::staticGet($id);
+ $user = User::getKV($id);
if ($user) {
$_cur = $user;
return $_cur;
$r = common_render_text($text);
$id = $notice->profile_id;
$r = common_linkify_mentions($r, $notice);
- $r = preg_replace('/(^|[\s\.\,\:\;]+)!(' . Nickname::DISPLAY_FMT . ')/e',
- "'\\1!'.common_group_link($id, '\\2')", $r);
+ $r = preg_replace_callback('/(^|[\s\.\,\:\;]+)!(' . Nickname::DISPLAY_FMT . ')/',
+ function ($m) { return "{$m[1]}!".common_group_link($id, $m[2]); }, $r);
return $r;
}
{
$mentions = array();
- $sender = Profile::staticGet('id', $notice->profile_id);
+ $sender = Profile::getKV('id', $notice->profile_id);
if (empty($sender)) {
return $mentions;
// Is it a reply?
if (!empty($notice) && !empty($notice->reply_to)) {
- $originalNotice = Notice::staticGet('id', $notice->reply_to);
+ $originalNotice = Notice::getKV('id', $notice->reply_to);
if (!empty($originalNotice)) {
- $originalAuthor = Profile::staticGet('id', $originalNotice->profile_id);
+ $originalAuthor = Profile::getKV('id', $originalNotice->profile_id);
$ids = $originalNotice->getReplies();
foreach ($ids as $id) {
- $repliedTo = Profile::staticGet('id', $id);
+ $repliedTo = Profile::getKV('id', $id);
if (!empty($repliedTo)) {
$originalMentions[$repliedTo->nickname] = $repliedTo;
}
}
if (!empty($mentioned)) {
- $user = User::staticGet('id', $mentioned->id);
+ $user = User::getKV('id', $mentioned->id);
if ($user) {
$url = common_local_url('userbyid', array('id' => $user->id));
$r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
$r = common_replace_urls_callback($r, 'common_linkify');
- $r = preg_replace('/(^|\"\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/ue', "'\\1#'.common_tag_link('\\2')", $r);
+ $r = preg_replace_callback('/(^|\"\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/u',
+ function ($m) { return "{$m[1]}#".common_tag_link($m[2]); }, $r);
// XXX: machine tags
return $r;
}
// Check to see whether this is a known "attachment" URL.
- $f = File::staticGet('url', $longurl);
+ $f = File::getKV('url', $longurl);
if (empty($f)) {
if (common_config('attachments', 'process_links')) {
$is_attachment = true;
$attachment_id = $f->id;
- $thumb = File_thumbnail::staticGet('file_id', $f->id);
+ $thumb = File_thumbnail::getKV('file_id', $f->id);
if (!empty($thumb)) {
$has_thumb = true;
}
*/
function common_shorten_links($text, $always = false, User $user=null)
{
- $user = common_current_user();
+ if ($user === null) {
+ $user = common_current_user();
+ }
$maxLength = User_urlshortener_prefs::maxNoticeLength($user);
- if ($always || mb_strlen($text) > $maxLength) {
+ if ($always || ($maxLength != -1 && mb_strlen($text) > $maxLength)) {
return common_replace_urls_callback($text, array('File_redirection', 'forceShort'), $user);
} else {
return common_replace_urls_callback($text, array('File_redirection', 'makeShort'), $user);
function common_canonical_tag($tag)
{
+ // only alphanum
+ $tag = preg_replace('/[^\pL\pN]/u', '', $tag);
$tag = mb_convert_case($tag, MB_CASE_LOWER, "UTF-8");
- return str_replace(array('-', '_', '.'), '', $tag);
+ $tag = substr($tag, 0, 64);
+ return $tag;
}
function common_valid_profile_tag($str)
*/
function common_group_link($sender_id, $nickname)
{
- $sender = Profile::staticGet($sender_id);
+ $sender = Profile::getKV($sender_id);
$group = User_group::getForNickname($nickname, $sender);
if ($sender && $group && $sender->isMember($group)) {
$attrs = array('href' => $group->permalink(),
return $recipient;
}
// If this is a local user, try to find a local user with that nickname.
- $sender = User::staticGet($sender->id);
+ $sender = User::getKV($sender->id);
if ($sender) {
- $recipient_user = User::staticGet('nickname', $nickname);
+ $recipient_user = User::getKV('nickname', $nickname);
if ($recipient_user) {
return $recipient_user->getProfile();
}
$r = Router::get();
$path = $r->build($action, $args, $params, $fragment);
- $ssl = common_is_sensitive($action);
+ $ssl = StatusNet::isHTTPS() || common_is_sensitive($action);
if (common_config('site','fancy')) {
- $url = common_path(mb_substr($path, 1), $ssl, $addSession);
+ $url = common_path($path, $ssl, $addSession);
} else {
if (mb_strpos($path, '/index.php') === 0) {
- $url = common_path(mb_substr($path, 1), $ssl, $addSession);
+ $url = common_path($path, $ssl, $addSession);
} else {
- $url = common_path('index.php'.$path, $ssl, $addSession);
+ $url = common_path('index.php/'.$path, $ssl, $addSession);
}
}
Event::handle('EndLocalURL', array(&$action, &$params, &$fragment, &$addSession, &$url));
'register',
'passwordsettings',
'api',
- 'ApiOauthRequestToken',
- 'ApiOauthAccessToken',
- 'ApiOauthAuthorize',
- 'ApiOauthPin',
+ 'ApiOAuthRequestToken',
+ 'ApiOAuthAccessToken',
+ 'ApiOAuthAuthorize',
+ 'ApiOAuthPin',
'showapplication'
);
$ssl = null;
{
if (common_have_session()) {
- if (empty($serverpart)) {
- $serverpart = parse_url($url, PHP_URL_HOST);
- }
+ if (empty($serverpart)) {
+ $serverpart = parse_url($url, PHP_URL_HOST);
+ }
- $currentServer = $_SERVER['HTTP_HOST'];
+ $currentServer = (array_key_exists('HTTP_HOST', $_SERVER)) ? $_SERVER['HTTP_HOST'] : null;
// Are we pointing to another server (like an SSL server?)
header('HTTP/1.1 '.$code.' '.$status[$code]);
header("Location: $url");
+ header("Connection: close");
$xo = new XMLOutputter();
$xo->startXML('a',
}
/**
- * Broadcast profile updates to remote subscribers.
+ * Legacy function to broadcast profile updates to OMB remote subscribers.
+ *
+ * XXX: This probably needs killing, but there are several bits of code
+ * that broadcast profile changes that need to be dealt with. AFAIK
+ * this function is only used for OMB. -z
*
* Since this may be slow with a lot of subscribers or bad remote sites,
* this is run through the background queues if possible.
*/
function common_broadcast_profile(Profile $profile)
{
- $qm = QueueManager::get();
- $qm->enqueue($profile, "profile");
- return true;
+ Event::handle('BroadcastProfile', array($profile));
}
function common_profile_url($nickname)
return $objstring;
}
-function common_valid_http_url($url)
+function common_valid_http_url($url, $secure=false)
{
- return Validate::uri($url, array('allowed_schemes' => array('http', 'https')));
+ // If $secure is true, only allow https URLs to pass
+ // (if false, we use '?' in 'https?' to say the 's' is optional)
+ $regex = $secure ? '/^https$/' : '/^https?$/';
+ return filter_var($url, FILTER_VALIDATE_URL)
+ && preg_match($regex, parse_url($url, PHP_URL_SCHEME));
}
function common_valid_tag($tag)
$c = preg_replace('/%%arg.'.$name.'%%/', $value, $c);
}
- $c = preg_replace('/%%user.(\w+)%%/e', "common_user_property('\\1')", $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);
+ $c = preg_replace_callback('/%%user.(\w+)%%/', function ($m) { return common_user_property($m[1]); }, $c);
+ $c = preg_replace_callback('/%%action.(\w+)%%/', function ($m) { return common_local_url($m[1]); }, $c);
+ $c = preg_replace_callback('/%%doc.(\w+)%%/', function ($m) { return common_local_url('doc', array('title'=>$m[1])); }, $c);
+ $c = preg_replace_callback('/%%(\w+).(\w+)%%/', function ($m) { return common_config($m[1], $m[2]); }, $c);
return Markdown($c);
}
return $profile->$property;
break;
case 'avatar':
- return $profile->getAvatar(AVATAR_STREAM_SIZE);
+ try {
+ return $profile->getAvatar(AVATAR_STREAM_SIZE);
+ } catch (Exception $e) {
+ return null;
+ }
break;
case 'bestname':
return $profile->getBestName();
if (!empty($profile)) {
if (Event::handle('StartCommonProfileURI', array($profile, &$uri))) {
- $user = User::staticGet($profile->id);
+ $user = User::getKV($profile->id);
if (!empty($user)) {
$uri = $user->uri;
}
// $force forces shortening even if it's not strictly needed
// I doubt URL shortening is ever 'strictly' needed. - ESP
- if (mb_strlen($long_url) < $maxUrlLength && !$force) {
+ if (($maxUrlLength == -1 || mb_strlen($long_url) < $maxUrlLength) && !$force) {
return $long_url;
}
} else {
$shortenedUrl = common_local_url('redirecturl',
array('id' => $f->id));
- return $shortenedUrl;
+ if ((mb_strlen($shortenedUrl) < mb_strlen($long_url)) || $force) {
+ return $shortenedUrl;
+ } else {
+ return $long_url;
+ }
}
} else {
return $long_url;
function common_nicknamize($str)
{
- $str = preg_replace('/\W/', '', $str);
- return strtolower($str);
+ try {
+ return Nickname::normalize($str);
+ } catch (NicknameException $e) {
+ return null;
+ }
}
function common_perf_counter($key, $val=null)
{
return (strpos($str, '@') !== false);
}
+
+function common_init_stats()
+{
+ global $_mem, $_ts;
+
+ $_mem = memory_get_usage(true);
+ $_ts = microtime(true);
+}
+
+function common_log_delta($comment=null)
+{
+ global $_mem, $_ts;
+
+ $mold = $_mem;
+ $told = $_ts;
+
+ $_mem = memory_get_usage(true);
+ $_ts = microtime(true);
+
+ $mtotal = $_mem - $mold;
+ $ttotal = $_ts - $told;
+
+ if (empty($comment)) {
+ $comment = 'Delta';
+ }
+
+ common_debug(sprintf("%s: %d %d", $comment, $mtotal, round($ttotal * 1000000)));
+}