X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Futil.php;h=49764f86a5fe40cc32effaa60a75fb682547202c;hb=7c57aab44e3fad989b85872d416d0c525dbb9de8;hp=f4c9824fd53021253ffa509e7c0890e538801544;hpb=e75c9988ebe33822e493ac225859bc593ff9b855;p=quix0rs-gnu-social.git diff --git a/lib/util.php b/lib/util.php index f4c9824fd5..49764f86a5 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1,7 +1,7 @@ id), @@ -407,7 +413,7 @@ function common_remembered_user() return null; } - $rm = Remember_me::staticGet($code); + $rm = Remember_me::staticGet('code', $code); if (!$rm) { common_log(LOG_WARNING, 'No such remember code: ' . $code); @@ -421,7 +427,7 @@ function common_remembered_user() return null; } - $user = User::staticGet($rm->user_id); + $user = User::staticGet('id', $rm->user_id); if (!$user) { common_log(LOG_WARNING, 'No such user for rememberme: ' . $rm->user_id); @@ -1121,8 +1127,11 @@ function common_tag_link($tag) 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) @@ -1221,19 +1230,22 @@ function common_relative_profile($sender, $nickname, $dt=null) function common_local_url($action, $args=null, $params=null, $fragment=null, $addSession=true) { - $r = Router::get(); - $path = $r->build($action, $args, $params, $fragment); + if (Event::handle('StartLocalURL', array(&$action, &$params, &$fragment, &$addSession, &$url))) { + $r = Router::get(); + $path = $r->build($action, $args, $params, $fragment); - $ssl = common_is_sensitive($action); + $ssl = common_is_sensitive($action); - if (common_config('site','fancy')) { - $url = common_path(mb_substr($path, 1), $ssl, $addSession); - } else { - if (mb_strpos($path, '/index.php') === 0) { - $url = common_path(mb_substr($path, 1), $ssl, $addSession); + if (common_config('site','fancy')) { + $url = common_path($path, $ssl, $addSession); } else { - $url = common_path('index.php'.$path, $ssl, $addSession); + if (mb_strpos($path, '/index.php') === 0) { + $url = common_path($path, $ssl, $addSession); + } else { + $url = common_path('index.php/'.$path, $ssl, $addSession); + } } + Event::handle('EndLocalURL', array(&$action, &$params, &$fragment, &$addSession, &$url)); } return $url; } @@ -1461,8 +1473,7 @@ function common_redirect($url, $code=307) function common_enqueue_notice($notice) { - static $localTransports = array('omb', - 'ping'); + static $localTransports = array('ping'); $transports = array(); if (common_config('sms', 'enabled')) { @@ -1493,16 +1504,18 @@ function common_enqueue_notice($notice) } /** - * Broadcast profile updates to OMB and other 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) @@ -1857,6 +1870,30 @@ function common_config($main, $sub) array_key_exists($sub, $config[$main])) ? $config[$main][$sub] : false; } +function common_config_set($main, $sub, $value) +{ + global $config; + if (!array_key_exists($main, $config)) { + $config[$main] = array(); + } + $config[$main][$sub] = $value; +} + +function common_config_append($main, $sub, $value) +{ + global $config; + if (!array_key_exists($main, $config)) { + $config[$main] = array(); + } + if (!array_key_exists($sub, $config[$main])) { + $config[$main][$sub] = array(); + } + if (!is_array($config[$main][$sub])) { + $config[$main][$sub] = array($config[$main][$sub]); + } + array_push($config[$main][$sub], $value); +} + /** * Pull arguments from a GET/POST/REQUEST array with first-level input checks: * strips "magic quotes" slashes if necessary, and kills invalid UTF-8 strings. @@ -1928,30 +1965,68 @@ function common_confirmation_code($bits) // convert markup to HTML -function common_markup_to_html($c) +function common_markup_to_html($c, $args=null) { + if (is_null($args)) { + $args = array(); + } + + // XXX: not very efficient + + foreach ($args as $name => $value) { + $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); return Markdown($c); } -function common_profile_uri($profile) +function common_user_property($property) { - if (!$profile) { + $profile = Profile::current(); + + if (empty($profile)) { return null; } - $user = User::staticGet($profile->id); - if ($user) { - return $user->uri; + + switch ($property) { + case 'profileurl': + case 'nickname': + case 'fullname': + case 'location': + case 'bio': + return $profile->$property; + break; + case 'avatar': + return $profile->getAvatar(AVATAR_STREAM_SIZE); + break; + case 'bestname': + return $profile->getBestName(); + break; + default: + return null; } +} + +function common_profile_uri($profile) +{ + $uri = null; - $remote = Remote_profile::staticGet($profile->id); - if ($remote) { - return $remote->uri; + if (!empty($profile)) { + if (Event::handle('StartCommonProfileURI', array($profile, &$uri))) { + $user = User::staticGet($profile->id); + if (!empty($user)) { + $uri = $user->uri; + } + Event::handle('EndCommonProfileURI', array($profile, &$uri)); + } } + // XXX: this is a very bad profile! - return null; + return $uri; } function common_canonical_sms($sms) @@ -2232,3 +2307,36 @@ function common_log_perf_counters() } } } + +function common_is_email($str) +{ + 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))); +}