* @link http://elgg.org/
*/
/**
* Takes a string and turns any URLs into formatted links
*
* @param string $text The input string
* @return string The output stirng with formatted links
**/
function parse_urls($text) {
// @todo this causes problems with
\s*
|', "\n\n", $pee);
// Space things out a little
$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
$pee = preg_replace('!(' . $allblocks . '>)!', "$1\n\n", $pee);
$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
if ( strpos($pee, '
\s*(?' . $allblocks . '[^>]*>)!', "$1", $pee); $pee = preg_replace('!(?' . $allblocks . '[^>]*>)\s*
!', "$1", $pee); if ($br) { $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', create_function('$matches', 'return str_replace("\n", ". Only there because of the comment.
// $pee = preg_replace_callback('!()(.*?) !is', 'clean_pre', $pee );
// }
$pee = preg_replace( "|\n$|", '', $pee );
return $pee;
}
/**
* Returns an excerpt.
* Will return up to n chars stopping at the nearest space.
* If no spaces are found (like in Japanese) will crop off at the
* n char mark. Adds ... if any text was chopped.
*
* @param string $text
* @param int $num_chars Return a string up to $num_chars long
* @return string
* @since 1.7.2
*/
function elgg_get_excerpt($text, $num_chars = 250) {
$text = trim(elgg_strip_tags($text));
$string_length = elgg_strlen($text);
if ($string_length <= $num_chars) {
return $text;
}
// handle cases
$excerpt = elgg_substr($text, 0, $num_chars);
$space = elgg_strrpos($excerpt, ' ', 0);
// don't crop if can't find a space.
if ($space === FALSE) {
$space = $num_chars;
}
$excerpt = trim(elgg_substr($excerpt, 0, $space));
if ($string_length != elgg_strlen($excerpt)) {
$excerpt .= '...';
}
return $excerpt;
}
/**
* Handles formatting of ampersands in urls
*
* @param string $url
* @return string
* @since 1.7.1
*/
function elgg_format_url($url) {
return preg_replace('/&(?!amp;)/', '&', $url);
}
/**
* When given a title, returns a version suitable for inclusion in a URL
*
* @param string $title The title
* @return string The optimised title
* @deprecated 1.8
*/
function friendly_title($title) {
elgg_deprecated_notice('friendly_title was deprecated by elgg_get_friendly_title', 1.8);
return elgg_get_friendly_title($title);
}
/**
* When given a title, returns a version suitable for inclusion in a URL
*
* @param string $title The title
* @return string The optimised title
* @since 1.7.2
*/
function elgg_get_friendly_title($title) {
// return a URL friendly title to short circuit normal title formatting
$params = array('title' => $title);
$result = trigger_plugin_hook('format', 'friendly:title', $params, NULL);
if ($result) {
return $result;
}
//$title = iconv('UTF-8', 'ASCII//TRANSLIT', $title);
$title = preg_replace("/[^\w ]/","",$title);
$title = str_replace(" ","-",$title);
$title = str_replace("--","-",$title);
$title = trim($title);
$title = strtolower($title);
return $title;
}
/**
* Displays a UNIX timestamp in a friendly way (eg "less than a minute ago")
*
* @param int $time A UNIX epoch timestamp
* @return string The friendly time
* @deprecated 1.8
*/
function friendly_time($time) {
elgg_deprecated_notice('friendly_time was deprecated by elgg_view_friendly_time', 1.8);
return elgg_view_friendly_time($time);
}
/**
* Formats a UNIX timestamp in a friendly way (eg "less than a minute ago")
*
* @see elgg_view_friendly_time()
*
* @param int $time A UNIX epoch timestamp
* @return string The friendly time string
* @since 1.7.2
*/
function elgg_get_friendly_time($time) {
// return a time string to short circuit normal time formatting
$params = array('time' => $time);
$result = trigger_plugin_hook('format', 'friendly:time', $params, NULL);
if ($result) {
return $result;
}
$diff = time() - (int)$time;
$minute = 60;
$hour = $minute * 60;
$day = $hour * 24;
if ($diff < $minute) {
return elgg_echo("friendlytime:justnow");
} else if ($diff < $hour) {
$diff = round($diff / $minute);
if ($diff == 0) {
$diff = 1;
}
if ($diff > 1) {
return sprintf(elgg_echo("friendlytime:minutes"), $diff);
} else {
return sprintf(elgg_echo("friendlytime:minutes:singular"), $diff);
}
} else if ($diff < $day) {
$diff = round($diff / $hour);
if ($diff == 0) {
$diff = 1;
}
if ($diff > 1) {
return sprintf(elgg_echo("friendlytime:hours"), $diff);
} else {
return sprintf(elgg_echo("friendlytime:hours:singular"), $diff);
}
} else {
$diff = round($diff / $day);
if ($diff == 0) {
$diff = 1;
}
if ($diff > 1) {
return sprintf(elgg_echo("friendlytime:days"), $diff);
} else {
return sprintf(elgg_echo("friendlytime:days:singular"), $diff);
}
}
}
/**
* Strip tags and offer plugins the chance.
* Plugins register for output:strip_tags plugin hook.
* Original string included in $params['original_string']
*
* @param string $string Formatted string
* @return string String run through strip_tags() and any plugin hooks.
*/
function elgg_strip_tags($string) {
$params['original_string'] = $string;
$string = strip_tags($string);
$string = trigger_plugin_hook('format', 'strip_tags', $params, $string);
return $string;
}