Difference between revisions of "API:EPrints/Utils"
Line 62: | Line 62: | ||
<!-- Pod2Wiki=head_methods --> | <!-- Pod2Wiki=head_methods --> | ||
==METHODS== | ==METHODS== | ||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_make_name_string --> | ||
+ | ===make_name_string=== | ||
+ | |||
+ | $string = EPrints::Utils::make_name_string( $name, [$familylast] ) | ||
+ | Return a string containing the name described in the hash reference $name. | ||
+ | |||
+ | The keys of the hash are one or more of given, family, honourific and lineage. The values are utf-8 strings. | ||
+ | |||
+ | Normally the result will be: | ||
+ | |||
+ | "family lineage, honourific given" | ||
+ | |||
+ | but if $familylast is true then it will be: | ||
+ | |||
+ | "honourific given family lineage" | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_wrap_text --> | ||
+ | ===wrap_text=== | ||
+ | |||
+ | $str = EPrints::Utils::wrap_text( $text, [$width], [$init_tab], [$sub_tab] ) | ||
+ | Wrap $text to be at most $width (or 80 if undefined) characters per line. As a special case $width may be <tt>console</tt>, in which case the width used is the current console width ({{API:PodLink|file=Term/ReadKey|package_name=Term::ReadKey|section=|text=Term::ReadKey}}). | ||
+ | |||
+ | $init_tab and $sub_tab allow indenting on the first and subsequent lines respectively (see {{API:PodLink|file=Text/Wrap|package_name=Text::Wrap|section=|text=Text::Wrap}} for more information). | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_is_set --> | ||
+ | ===is_set=== | ||
+ | |||
+ | $boolean = EPrints::Utils::is_set( $r ) | ||
+ | Recursive function. | ||
+ | |||
+ | Return false if $r is not set. | ||
+ | |||
+ | If $r is a scalar then returns true if it is not an empty string. | ||
+ | |||
+ | For arrays and hashes return true if at least one value of them is_set(). | ||
+ | |||
+ | This is used to see if a complex data structure actually has any data in it. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_tree_to_utf8 --> | ||
+ | ===tree_to_utf8=== | ||
+ | |||
+ | $string = EPrints::Utils::tree_to_utf8( $tree, $width, [$pre], [$whitespace_before], [$ignore_a] ) | ||
+ | Convert a XML DOM tree to a utf-8 encoded string. | ||
+ | |||
+ | If $width is set then word-wrap at that many characters. | ||
+ | |||
+ | XHTML elements are removed with the following exceptions: | ||
+ | |||
+ | <br /> is converted to a newline. | ||
+ | |||
+ | <p>...</p> will have a blank line above and below. | ||
+ | |||
+ | <img /> will be replaced with the content of the alt attribute. | ||
+ | |||
+ | <hr /> will, if a width was specified, insert a line of dashes. | ||
+ | |||
+ | <a href="foo">bar</a> will be converted into "bar <foo>" unless ignore_a is set. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_copy --> | ||
+ | ===copy=== | ||
+ | |||
+ | $ok = EPrints::Utils::copy( $source, $target ) | ||
+ | Copy $source file to $target file without alteration. | ||
+ | |||
+ | Return true on success (sets $! on error). | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_wget --> | ||
+ | ===wget=== | ||
+ | |||
+ | $response = EPrints::Utils::wget( $session, $source, $target ) | ||
+ | Copy $source file or URL to $target file without alteration. | ||
+ | |||
+ | Will fail if $source is a "file:" and "enable_file_imports" is false or if $source is any other scheme and "enable_web_imports" is false. | ||
+ | |||
+ | Returns the HTTP response object: use $response->is_success to check whether the copy succeeded. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_rmtree --> | ||
+ | ===rmtree=== | ||
+ | |||
+ | $ok = EPrints::Utils::rmtree( $full_path ) | ||
+ | Unlinks the path and everything in it. | ||
+ | |||
+ | Return true on success. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_field_from_config_string --> | ||
+ | ===field_from_config_string=== | ||
+ | |||
+ | $metafield = EPrints::Utils::field_from_config_string( $dataset, $fieldname ) | ||
+ | Return the EPrint::MetaField from $dataset with the given name. | ||
+ | |||
+ | If fieldname has a semicolon followed by render options then these are passed as render options to the new EPrints::MetaField object. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_input --> | ||
+ | ===get_input=== | ||
+ | |||
+ | $string = EPrints::Utils::get_input( $regexp, [$prompt], [$default] ) | ||
+ | Read input from the keyboard. | ||
+ | |||
+ | Prints the promp and default value, if any. eg. | ||
+ | How many fish [5] > | ||
+ | |||
+ | Return the value the user enters at the keyboard. | ||
+ | |||
+ | If the value does not match the regexp then print the prompt again and try again. | ||
+ | |||
+ | If a default is set and the user just hits return then the default value is returned. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_input_hidden --> | ||
+ | ===get_input_hidden=== | ||
+ | |||
+ | EPrints::Utils::get_input_hidden( $regexp, [$prompt], [$default] ) | ||
+ | Get input from the console without echoing the entered characters (mostly useful for getting passwords). Uses {{API:PodLink|file=Term/ReadKey|package_name=Term::ReadKey|section=|text=Term::ReadKey}}. | ||
+ | |||
+ | Identical to get_input except the characters don't appear. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_get_input_confirm --> | ||
+ | ===get_input_confirm=== | ||
+ | |||
+ | EPrints::Utils::get_input_confirm( [$prompt], [$quick], [$default] ) | ||
+ | Asks the user for confirmation (yes/no). If $quick is true only checks for a single-character input ('y' or 'n'). | ||
+ | |||
+ | If $default is '1' defaults to yes, if '0' defaults to no. | ||
+ | |||
+ | Returns true if the user answers 'yes' or false for any other value. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_clone --> | ||
+ | ===clone=== | ||
+ | |||
+ | $clone_of_data = EPrints::Utils::clone( $data ) | ||
+ | Deep copies the data structure $data, following arrays and hashes. | ||
+ | |||
+ | Does not handle blessed items. | ||
+ | |||
+ | Useful when we want to modify a temporary copy of a data structure that came from the configuration files. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_crypt_password --> | ||
+ | ===crypt_password=== | ||
+ | |||
+ | $crypted_value = EPrints::Utils::crypt_password( $value, $session ) | ||
+ | Apply the crypt encoding to the given $value. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_url_escape --> | ||
+ | ===url_escape=== | ||
+ | |||
+ | $string = EPrints::Utils::url_escape( $url ) | ||
+ | Escape the given $url, so that it can appear safely in HTML. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_ip2long --> | ||
+ | ===ip2long=== | ||
+ | |||
+ | $long = EPrints::Utils::ip2long( $ip ) | ||
+ | Convert quad-dotted notation to long | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_long2ip --> | ||
+ | ===long2ip=== | ||
+ | |||
+ | $ip = EPrints::Utils::long2ip( $ip ) | ||
+ | Convert long to quad-dotted notation | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_cmd_version --> | ||
+ | ===cmd_version=== | ||
+ | |||
+ | EPrints::Utils::cmd_version( $progname ) | ||
+ | Print out a "--version" style message to STDOUT. | ||
+ | |||
+ | $progname is the name of the current script. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_escape_filename --> | ||
+ | ===escape_filename=== | ||
+ | |||
+ | $esc_string = EPrints::Utils::escape_filename( $string ) | ||
+ | Take a value and escape it to be a legal filename to go in the /view/ section of the site. | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_unescape_filename --> | ||
+ | ===unescape_filename=== | ||
+ | |||
+ | $string = EPrints::Utils::unescape_filename( $esc_string ) | ||
+ | Unescape a string previously escaped with escape_filename(). | ||
+ | |||
+ | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
+ | <span style='display:none'>User Comments</span> | ||
+ | <!-- Edit below this comment --> | ||
+ | |||
+ | |||
+ | <!-- Pod2Wiki= --> | ||
+ | </div> | ||
+ | <!-- Pod2Wiki=item_human_filesize --> | ||
+ | ===human_filesize=== | ||
+ | |||
+ | $filesize_text = EPrints::Utils::human_filesize( $size_in_bytes ) | ||
+ | Return a human readable version of a filesize. If 0-4095b then show as bytes, if 4-4095Kb show as Kb otherwise show as Mb. | ||
+ | |||
+ | eg. Input of 5234 gives "5Kb", input of 3234 gives "3234b". | ||
+ | |||
+ | This is not internationalised, I don't think it needs to be. Let me know if this is a problem. support@eprints.org | ||
+ | |||
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | <div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce; padding: 0em 1em 0em 1em; font-size: 80%; '> | ||
<span style='display:none'>User Comments</span> | <span style='display:none'>User Comments</span> |
Revision as of 13:52, 25 February 2010
EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects
Latest Source Code (3.4, 3.3) | Revision Log | Before editing this page please read Pod2Wiki
Contents
- 1 NAME
- 2 SYNOPSIS
- 3 DESCRIPTION
- 4 METHODS
- 4.1 make_name_string
- 4.2 wrap_text
- 4.3 is_set
- 4.4 tree_to_utf8
- 4.5 copy
- 4.6 wget
- 4.7 rmtree
- 4.8 field_from_config_string
- 4.9 get_input
- 4.10 get_input_hidden
- 4.11 get_input_confirm
- 4.12 clone
- 4.13 crypt_password
- 4.14 url_escape
- 4.15 ip2long
- 4.16 long2ip
- 4.17 cmd_version
- 4.18 escape_filename
- 4.19 unescape_filename
- 4.20 human_filesize
NAME
EPrints::Utils - Utility functions for EPrints.
SYNOPSIS
$boolean = EPrints::Utils::is_set( $object ) # return true if an object/scalar/array has any data in it # copy the contents of the url to a file $response = EPrints::Utils::wget( $handle, "http://www.eprints.org/index.php", "temp_dir/my_file" ) if($response->is_sucess()){ do something...} $name = { given=>"Wendy", family=>"Hall", honourific=>"Dame" }; # return Dame Wendy Hall $string = EPrints::Utils::make_name_string( $name, 1 ); # return Dame Hall, Wendy $string = EPrints::Utils::make_name_string( $name, 0 ); # returns http://www.eprints.org?var=%3Cfoo%3E $string = EPrints::Utils::url_escape( "http://www.eprints.org?var=<foo>" ); $esc_string = EPrints::Utils::escape_filename( $string ); $string = EPrints::Utils::unescape_filename( $esc_string ); $filesize_text = EPrints::Utils::human_filesize( 3300 ); # returns "3kb"
DESCRIPTION
This package contains functions which don't belong anywhere else.
METHODS
make_name_string
$string = EPrints::Utils::make_name_string( $name, [$familylast] )
Return a string containing the name described in the hash reference $name.
The keys of the hash are one or more of given, family, honourific and lineage. The values are utf-8 strings.
Normally the result will be:
"family lineage, honourific given"
but if $familylast is true then it will be:
"honourific given family lineage"
wrap_text
$str = EPrints::Utils::wrap_text( $text, [$width], [$init_tab], [$sub_tab] )
Wrap $text to be at most $width (or 80 if undefined) characters per line. As a special case $width may be console, in which case the width used is the current console width (Term::ReadKey).
$init_tab and $sub_tab allow indenting on the first and subsequent lines respectively (see Text::Wrap for more information).
is_set
$boolean = EPrints::Utils::is_set( $r )
Recursive function.
Return false if $r is not set.
If $r is a scalar then returns true if it is not an empty string.
For arrays and hashes return true if at least one value of them is_set().
This is used to see if a complex data structure actually has any data in it.
tree_to_utf8
$string = EPrints::Utils::tree_to_utf8( $tree, $width, [$pre], [$whitespace_before], [$ignore_a] )
Convert a XML DOM tree to a utf-8 encoded string.
If $width is set then word-wrap at that many characters.
XHTML elements are removed with the following exceptions:
<br /> is converted to a newline.
<p>...</p> will have a blank line above and below.
<img /> will be replaced with the content of the alt attribute.
<hr /> will, if a width was specified, insert a line of dashes.
<a href="foo">bar</a> will be converted into "bar <foo>" unless ignore_a is set.
copy
$ok = EPrints::Utils::copy( $source, $target )
Copy $source file to $target file without alteration.
Return true on success (sets $! on error).
wget
$response = EPrints::Utils::wget( $session, $source, $target )
Copy $source file or URL to $target file without alteration.
Will fail if $source is a "file:" and "enable_file_imports" is false or if $source is any other scheme and "enable_web_imports" is false.
Returns the HTTP response object: use $response->is_success to check whether the copy succeeded.
rmtree
$ok = EPrints::Utils::rmtree( $full_path )
Unlinks the path and everything in it.
Return true on success.
field_from_config_string
$metafield = EPrints::Utils::field_from_config_string( $dataset, $fieldname )
Return the EPrint::MetaField from $dataset with the given name.
If fieldname has a semicolon followed by render options then these are passed as render options to the new EPrints::MetaField object.
get_input
$string = EPrints::Utils::get_input( $regexp, [$prompt], [$default] )
Read input from the keyboard.
Prints the promp and default value, if any. eg.
How many fish [5] >
Return the value the user enters at the keyboard.
If the value does not match the regexp then print the prompt again and try again.
If a default is set and the user just hits return then the default value is returned.
EPrints::Utils::get_input_hidden( $regexp, [$prompt], [$default] )
Get input from the console without echoing the entered characters (mostly useful for getting passwords). Uses Term::ReadKey.
Identical to get_input except the characters don't appear.
get_input_confirm
EPrints::Utils::get_input_confirm( [$prompt], [$quick], [$default] )
Asks the user for confirmation (yes/no). If $quick is true only checks for a single-character input ('y' or 'n').
If $default is '1' defaults to yes, if '0' defaults to no.
Returns true if the user answers 'yes' or false for any other value.
clone
$clone_of_data = EPrints::Utils::clone( $data )
Deep copies the data structure $data, following arrays and hashes.
Does not handle blessed items.
Useful when we want to modify a temporary copy of a data structure that came from the configuration files.
crypt_password
$crypted_value = EPrints::Utils::crypt_password( $value, $session )
Apply the crypt encoding to the given $value.
url_escape
$string = EPrints::Utils::url_escape( $url )
Escape the given $url, so that it can appear safely in HTML.
ip2long
$long = EPrints::Utils::ip2long( $ip )
Convert quad-dotted notation to long
long2ip
$ip = EPrints::Utils::long2ip( $ip )
Convert long to quad-dotted notation
cmd_version
EPrints::Utils::cmd_version( $progname )
Print out a "--version" style message to STDOUT.
$progname is the name of the current script.
escape_filename
$esc_string = EPrints::Utils::escape_filename( $string )
Take a value and escape it to be a legal filename to go in the /view/ section of the site.
unescape_filename
$string = EPrints::Utils::unescape_filename( $esc_string )
Unescape a string previously escaped with escape_filename().
human_filesize
$filesize_text = EPrints::Utils::human_filesize( $size_in_bytes )
Return a human readable version of a filesize. If 0-4095b then show as bytes, if 4-4095Kb show as Kb otherwise show as Mb.
eg. Input of 5234 gives "5Kb", input of 3234 gives "3234b".
This is not internationalised, I don't think it needs to be. Let me know if this is a problem. support@eprints.org