$user = User::getKV('nickname', Nickname::normalize($nickname));
}
- if (!empty($user)) {
- if (!empty($password)) { // never allow login with blank password
- if (0 == strcmp(common_munge_password($password, $user->id),
- $user->password)) {
- //internal checking passed
- $authenticatedUser = $user;
- }
+ if ($user instanceof User && !empty($password)) {
+ if (0 == strcmp(common_munge_password($password, $user->id),
+ $user->password)) {
+ //internal checking passed
+ $authenticatedUser = $user;
}
}
Event::handle('EndCheckPassword', array($nickname, $password, $authenticatedUser));
return false;
}
- if ($user) {
+ if ($user instanceof User) {
if (Event::handle('StartSetUser', array(&$user))) {
if (!empty($user)) {
if (!$user->hasRight(Right::WEBLOGIN)) {
if ($user === false) {
$user = common_current_user();
}
- if ($user) {
+ if ($user instanceof User) {
return crc32($user->id . ':' . $user->nickname);
} else {
return '0';
$xs = new XMLStringer(false);
$attrs = array('href' => $mention['url'],
- 'class' => 'url');
+ 'class' => 'h-card '.$mention['type']);
if (!empty($mention['title'])) {
$attrs['title'] = $mention['title'];
}
- $xs->elementStart('span', 'vcard');
- $xs->elementStart('a', $attrs);
- $xs->element('span', 'fn nickname mention', $mention['text']);
- $xs->elementEnd('a');
- $xs->elementEnd('span');
+ $xs->element('a', $attrs, $mention['text']);
$output = $xs->getString();
} catch (NoProfileException $e) {
common_log(LOG_WARNING, sprintf('Notice %d author profile id %d does not exist', $origNotice->id, $origNotice->profile_id));
} catch (ServerException $e) {
- common_log(LOG_WARNING, __METHOD__ . ' got exception: ' . $e->getMessage());
+ // Probably just no parent. Should get a specific NoParentException
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, __METHOD__ . ' got exception ' . get_class($e) . ' : ' . $e->getMessage());
}
}
}
$mention = array('mentioned' => array($mentioned),
+ 'type' => 'mention',
'text' => $match[0],
'position' => $match[1],
'url' => $url);
'tag' => $tag));
$mentions[] = array('mentioned' => $tagged,
+ 'type' => 'list',
'text' => $hmatch[0],
'position' => $hmatch[1],
'url' => $url);
$profile = $group->getProfile();
$mentions[] = array('mentioned' => array($profile),
+ 'type' => 'group',
'text' => $hmatch[0],
'position' => $hmatch[1],
'url' => $group->permalink(),
function common_render_text($text)
{
- $r = htmlspecialchars($text);
+ $r = nl2br(htmlspecialchars($text));
$r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
$r = common_replace_urls_callback($r, 'common_linkify');
return substr($matches[0],0,$left) . $result . substr($matches[0],$right);
}
-if (version_compare(PHP_VERSION, '5.3.0', 'ge')) {
- // lambda implementation in a separate file; PHP 5.2 won't parse it.
- require_once INSTALLDIR . "/lib/curry.php";
-} else {
- function curry($fn) {
- $args = func_get_args();
- array_shift($args);
- $id = uniqid('_partial');
- $GLOBALS[$id] = array($fn, $args);
- return create_function('',
- '$args = func_get_args(); '.
- 'return call_user_func_array('.
- '$GLOBALS["'.$id.'"][0],'.
- 'array_merge('.
- '$args,'.
- '$GLOBALS["'.$id.'"][1]));');
- }
-}
+require_once INSTALLDIR . "/lib/curry.php";
function common_linkify($url) {
// It comes in special'd, so we unspecial it before passing to the stringifying
$f = File::getKV('url', $longurl);
- if (empty($f)) {
+ if (!$f instanceof File) {
if (common_config('attachments', 'process_links')) {
// XXX: this writes to the database. :<
- $f = File::processNew($longurl);
+ try {
+ $f = File::processNew($longurl);
+ } catch (ServerException $e) {
+ $f = null;
+ }
}
}
- if (!empty($f)) {
- if ($f->getEnclosure()) {
+ if ($f instanceof File) {
+ try {
+ $enclosure = $f->getEnclosure();
$is_attachment = true;
$attachment_id = $f->id;
$thumb = File_thumbnail::getKV('file_id', $f->id);
- if (!empty($thumb)) {
- $has_thumb = true;
- }
+ $has_thumb = ($thumb instanceof File_thumbnail);
+ } catch (ServerException $e) {
+ // There was not enough metadata available
}
}
function common_inject_session($url, $serverpart = null)
{
- if (common_have_session()) {
+ if (!common_have_session()) {
+ return $url;
+ }
- if (empty($serverpart)) {
- $serverpart = parse_url($url, PHP_URL_HOST);
- }
+ if (empty($serverpart)) {
+ $serverpart = parse_url($url, PHP_URL_HOST);
+ }
- $currentServer = (array_key_exists('HTTP_HOST', $_SERVER)) ? $_SERVER['HTTP_HOST'] : null;
+ $currentServer = (array_key_exists('HTTP_HOST', $_SERVER)) ? $_SERVER['HTTP_HOST'] : null;
- // Are we pointing to another server (like an SSL server?)
+ // Are we pointing to another server (like an SSL server?)
- if (!empty($currentServer) &&
- 0 != strcasecmp($currentServer, $serverpart)) {
- // Pass the session ID as a GET parameter
- $sesspart = session_name() . '=' . session_id();
- $i = strpos($url, '?');
- if ($i === false) { // no GET params, just append
- $url .= '?' . $sesspart;
- } else {
- $url = substr($url, 0, $i + 1).$sesspart.'&'.substr($url, $i + 1);
- }
+ if (!empty($currentServer) && 0 != strcasecmp($currentServer, $serverpart)) {
+ // Pass the session ID as a GET parameter
+ $sesspart = session_name() . '=' . session_id();
+ $i = strpos($url, '?');
+ if ($i === false) { // no GET params, just append
+ $url .= '?' . $sesspart;
+ } else {
+ $url = substr($url, 0, $i + 1).$sesspart.'&'.substr($url, $i + 1);
}
}
$dateStr = date('d F Y H:i:s', strtotime($dt));
$d = new DateTime($dateStr, $_utc);
$d->setTimezone($_siteTz);
- return $d->format(DATE_RFC850);
+ // TRANS: Human-readable full date-time specification (formatting on http://php.net/date)
+ return $d->format(_('l, d-M-Y H:i:s T'));
}
function common_date_w3dtf($dt)
$hexstr = '';
for ($i = 0; $i < $bytes; $i++) {
- $hexstr .= sprintf("%02x", ord($str{$i}));
+ $hexstr .= sprintf("%02x", ord($str[$i]));
}
return $hexstr;
}
return $prefs;
}
+// Match by our supported file extensions
+function common_supported_ext_to_mime($fileext)
+{
+ // Accept a filename and take out the extension
+ if (strpos($fileext, '.') !== false) {
+ $fileext = substr(strrchr($fileext, '.'), 1);
+ }
+
+ $supported = common_config('attachments', 'supported');
+ foreach($supported as $type => $ext) {
+ if ($ext === $fileext) {
+ return $type;
+ }
+ }
+
+ throw new ServerException('Unsupported file extension');
+}
+
+// Match by our supported mime types
+function common_supported_mime_to_ext($mimetype)
+{
+ $supported = common_config('attachments', 'supported');
+ foreach($supported as $type => $ext) {
+ if ($mimetype === $type) {
+ return $ext;
+ }
+ }
+
+ throw new ServerException('Unsupported MIME type');
+}
+
+// The MIME "media" is the part before the slash (video in video/webm)
+function common_get_mime_media($type)
+{
+ $tmp = explode('/', $type);
+ return strtolower($tmp[0]);
+}
+
+function common_bare_mime($mimetype)
+{
+ $mimetype = mb_strtolower($mimetype);
+ if ($semicolon = mb_strpos($mimetype, ';')) {
+ $mimetype = mb_substr($mimetype, 0, $semicolon);
+ }
+ return $mimetype;
+}
+
function common_mime_type_match($type, $avail)
{
if(array_key_exists($type, $avail)) {
null, null, false);
}
-function common_notice_uri(&$notice)
-{
- return common_local_url('shownotice',
- array('notice' => $notice->id),
- null, null, false);
-}
-
// 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits
function common_confirmation_code($bits)
}
// convert markup to HTML
-
function common_markup_to_html($c, $args=null)
{
+ if ($c === null) {
+ return '';
+ }
+
if (is_null($args)) {
$args = array();
}
$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 \Michelf\Markdown::defaultTransform($c);
}
function common_user_property($property)
if (Event::handle('StartCommonProfileURI', array($profile, &$uri))) {
$user = User::getKV('id', $profile->id);
if ($user instanceof User) {
- $uri = $user->uri;
+ $uri = $user->getUri();
}
Event::handle('EndCommonProfileURI', array($profile, &$uri));
}
if (Event::handle('StartShortenUrl',
array($long_url, $shortenerName, &$shortenedUrl))) {
if ($shortenerName == 'internal') {
- $f = File::processNew($long_url);
- if (empty($f)) {
- return $long_url;
- } else {
- $shortenedUrl = common_local_url('redirecturl',
- array('id' => $f->id));
+ try {
+ $f = File::processNew($long_url);
+ $shortenedUrl = common_local_url('redirecturl', array('id' => $f->id));
if ((mb_strlen($shortenedUrl) < mb_strlen($long_url)) || $force) {
return $shortenedUrl;
} else {
return $long_url;
}
+ } catch (ServerException $e) {
+ return $long_url;
}
} else {
return $long_url;
common_debug(sprintf("%s: %d %d", $comment, $mtotal, round($ttotal * 1000000)));
}
+
+function common_strip_html($html, $trim=true, $save_whitespace=false)
+{
+ if (!$save_whitespace) {
+ $html = preg_replace('/\s+/', ' ', $html);
+ }
+ $text = html_entity_decode(strip_tags($html), ENT_QUOTES, 'UTF-8');
+ return $trim ? trim($text) : $text;
+}